/* =========================================================
   ANAGRAMA · Gestão de Obra
   Direção: prancha técnica / titleblock de projeto.
   Paleta da marca (sage, charcoal, cinza), figuras em mono,
   micro-rótulos em Montserrat versalete, fios de 1px.
   ========================================================= */

:root {
  --sage: #9aa6a4;
  --sage-deep: #56645f;
  --sage-wash: #eef1f0;
  --ink: #2c2f2e;
  --ink-soft: #4e4e4e;
  --line: #d7dbd9;
  --line-strong: #b9c0bd;
  --paper: #f4f4f2;
  --surface: #ffffff;
  --amber: #b4772e; /* atenção / atraso */

  --mono: "IBM Plex Mono", ui-monospace, "SF Mono", "Cascadia Mono", monospace;
  --sans: "Montserrat", system-ui, -apple-system, "Segoe UI", sans-serif;

  --sp: 8px;
  --maxw: 1180px;
}

* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font-family: var(--sans);
  color: var(--ink);
  background: var(--paper);
  line-height: 1.5;
  font-size: 15px;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 { margin: 0; font-weight: 600; }

.eyebrow {
  font-size: 10.5px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--sage-deep);
}

.num { font-family: var(--mono); font-feature-settings: "tnum" 1; }

button { font-family: var(--sans); cursor: pointer; }

a { color: var(--sage-deep); }

/* ---------- utilidades de layout ---------- */
.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }
.hidden { display: none !important; }

/* =========================================================
   LOGIN
   ========================================================= */
.login {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 24px;
  background:
    linear-gradient(0deg, rgba(154,166,164,0.10), rgba(154,166,164,0.10)),
    var(--paper);
}

.login-card {
  width: 100%;
  max-width: 400px;
  background: var(--surface);
  border: 1px solid var(--line);
  padding: 40px 36px 32px;
}

.login-mark {
  font-size: 12px;
  letter-spacing: 0.42em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--ink);
}
.login-sub {
  margin-top: 6px;
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--sage-deep);
}
.login-rule { height: 1px; background: var(--line); margin: 26px 0; }

.field label {
  display: block;
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 8px;
  font-weight: 600;
}
.field input {
  width: 100%;
  padding: 13px 14px;
  border: 1px solid var(--line-strong);
  background: var(--paper);
  font-family: var(--mono);
  font-size: 15px;
  color: var(--ink);
  border-radius: 2px;
}
.field input:focus {
  outline: 2px solid var(--sage);
  outline-offset: 1px;
  background: #fff;
}

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border: 1px solid var(--ink);
  background: var(--ink);
  color: #fff;
  padding: 13px 18px;
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 600;
  border-radius: 2px;
  transition: background .15s ease, color .15s ease;
}
.btn:hover { background: var(--sage-deep); border-color: var(--sage-deep); }
.btn.block { width: 100%; margin-top: 22px; }
.btn.ghost { background: transparent; color: var(--ink); }
.btn.ghost:hover { background: var(--sage-wash); color: var(--sage-deep); border-color: var(--line-strong); }

.login-erro {
  margin-top: 16px;
  font-size: 12.5px;
  color: var(--amber);
  min-height: 18px;
  letter-spacing: 0.01em;
}
.login-foot {
  margin-top: 26px;
  font-size: 10.5px;
  color: var(--ink-soft);
  letter-spacing: 0.04em;
  line-height: 1.6;
}

/* =========================================================
   TITLEBLOCK (cabeçalho do app)
   ========================================================= */
.titleblock {
  border-bottom: 1px solid var(--line-strong);
  background: var(--surface);
  position: sticky;
  top: 0;
  z-index: 20;
}
.tb-inner {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: stretch;
}
.tb-cell { padding: 14px 24px; border-left: 1px solid var(--line); }
.tb-cell:first-child { border-left: 0; }
.tb-mark {
  display: flex; flex-direction: column; justify-content: center;
  min-width: 150px;
}
.tb-mark .name { font-size: 13px; letter-spacing: 0.34em; font-weight: 700; text-transform: uppercase; }
.tb-mark .role { font-size: 9.5px; letter-spacing: 0.2em; color: var(--sage-deep); text-transform: uppercase; margin-top: 3px; }

.tb-meta { display: flex; flex-direction: column; justify-content: center; overflow: hidden; }
.tb-meta .proj { font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tb-meta .cli { font-size: 11px; color: var(--ink-soft); margin-top: 2px; }

.tb-side { display: flex; align-items: center; gap: 18px; }
.tb-rev { text-align: right; }
.tb-rev .k { font-size: 9.5px; letter-spacing: 0.16em; color: var(--sage-deep); text-transform: uppercase; }
.tb-rev .v { font-family: var(--mono); font-size: 13px; margin-top: 2px; }
.tb-actions { display: flex; gap: 8px; }
.tb-actions .btn { padding: 9px 14px; font-size: 10px; }
.badge-admin {
  font-size: 9px; letter-spacing: 0.14em; text-transform: uppercase;
  background: var(--sage-wash); color: var(--sage-deep);
  border: 1px solid var(--line-strong); padding: 3px 8px; border-radius: 2px; font-weight: 700;
  align-self: center;
}
#badge-preview { background: var(--sage-deep); color: #fff; border-color: var(--sage-deep); }

/* visões: admin só painel; prévia esconde o painel e mostra o dashboard do cliente */
#app.modo-admin .crono,
#app.modo-admin .hero,
#app.modo-admin > section.section,
#app.modo-admin > .foot,
#app.modo-admin #menu-metodo { display: none !important; }
#app.modo-preview #admin-panel { display: none !important; }

/* =========================================================
   MENU LATERAL · jornada do Método (convite discreto)
   ========================================================= */
.menu-metodo {
  position: fixed; left: 12px; top: 50%; transform: translateY(-50%);
  z-index: 15; display: flex; flex-direction: column; gap: 6px;
  background: var(--surface); border: 1px solid var(--line-strong);
  border-radius: 3px; padding: 10px 8px; max-width: 62px; overflow: hidden;
  transition: max-width 0.2s ease, box-shadow 0.2s ease;
  box-shadow: 0 1px 3px rgba(44,47,46,0.06);
}
.menu-metodo:hover { max-width: 260px; box-shadow: 0 6px 20px rgba(44,47,46,0.14); }
.menu-metodo .mm-titulo {
  font-size: 8px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--sage-deep); font-weight: 700; text-align: center; padding-bottom: 4px;
  border-bottom: 1px solid var(--line); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.mm-item {
  display: flex; align-items: center; gap: 9px; width: 100%;
  background: none; border: 0; padding: 7px 5px; border-radius: 2px;
  text-align: left; color: var(--ink-soft); overflow: hidden;
  transition: background 0.15s ease, color 0.15s ease;
}
.mm-item:hover { background: var(--sage-wash); color: var(--ink); }
.mm-item .mm-no {
  font-family: var(--mono); font-size: 11px; flex: none;
  width: 22px; height: 22px; display: grid; place-items: center;
  border: 1px solid var(--line-strong); border-radius: 50%; color: var(--sage-deep);
}
.mm-item .mm-nome {
  font-size: 12px; white-space: nowrap; opacity: 0;
  transition: opacity 0.2s ease;
}
.menu-metodo:hover .mm-nome { opacity: 1; }
.mm-item.st-contratado .mm-no,
.mm-item.st-andamento .mm-no,
.mm-item.st-concluido .mm-no { background: var(--sage-wash); border-color: var(--sage); }
.mm-item.atual .mm-no { background: var(--sage-deep); color: #fff; border-color: var(--sage-deep); }
.mm-item.atual { color: var(--ink); font-weight: 600; }
@media (max-width: 1180px) { .menu-metodo { display: none !important; } }

/* =========================================================
   HERO · execução financeira (assinatura)
   ========================================================= */
.hero { background: var(--surface); border-bottom: 1px solid var(--line); }
.hero-inner { padding: 40px 24px 44px; }
.hero-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.hero-head h1 { font-size: 20px; letter-spacing: 0.02em; }

.figs {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
  margin-top: 26px;
}
.fig { background: var(--surface); padding: 22px 22px 20px; }
.fig .k { font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--sage-deep); font-weight: 600; }
.fig .v { font-family: var(--mono); font-size: clamp(24px, 4vw, 34px); font-weight: 500; letter-spacing: -0.01em; margin-top: 10px; color: var(--ink); }
.fig .s { font-size: 11.5px; color: var(--ink-soft); margin-top: 6px; }
.fig.accent { background: var(--sage-deep); }
.fig.accent .k { color: #cdd6d3; }
.fig.accent .v { color: #fff; }
.fig.accent .s { color: #d6ddda; }

/* barra de execução */
.gauge { margin-top: 30px; }
.gauge-top { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px; }
.gauge-top .lbl { font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--sage-deep); font-weight: 600; }
.gauge-top .pct { font-family: var(--mono); font-size: 18px; font-weight: 500; }
.gauge-track {
  position: relative; height: 34px; background: var(--sage-wash);
  border: 1px solid var(--line-strong); overflow: hidden;
}
.gauge-fill { position: absolute; inset: 0 auto 0 0; background: var(--sage-deep); width: 0; transition: width 1s cubic-bezier(.2,.7,.2,1); }
.gauge-fill::after {
  content: ""; position: absolute; top: 0; right: 0; bottom: 0; width: 2px; background: var(--ink);
}
.gauge-scale { display: flex; justify-content: space-between; margin-top: 6px; }
.gauge-scale span { font-family: var(--mono); font-size: 10px; color: var(--ink-soft); }

/* =========================================================
   SEÇÕES
   ========================================================= */
.section { padding: 40px 24px; }
.section + .section { border-top: 1px solid var(--line); }
.sec-head { display: flex; align-items: baseline; gap: 14px; margin-bottom: 22px; }
.sec-head .no { font-family: var(--mono); font-size: 12px; color: var(--sage); }
.sec-head h2 { font-size: 15px; letter-spacing: 0.12em; text-transform: uppercase; }
.sec-head .hint { margin-left: auto; font-size: 11px; color: var(--ink-soft); }

/* barras desembolso por etapa */
.etapas { display: flex; flex-direction: column; }
.etapa {
  display: grid;
  grid-template-columns: 34px 1fr 150px;
  align-items: center;
  gap: 16px;
  padding: 12px 0;
  border-top: 1px solid var(--line);
}
.etapa:last-child { border-bottom: 1px solid var(--line); }
.etapa .code { font-family: var(--mono); font-size: 12px; color: var(--sage-deep); }
.etapa .body { min-width: 0; }
.etapa .nome { font-size: 13px; font-weight: 500; margin-bottom: 7px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bar { position: relative; height: 14px; background: var(--sage-wash); border: 1px solid var(--line); }
.bar .prev { position: absolute; inset: 0 auto 0 0; background: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(86,100,95,0.16) 3px, rgba(86,100,95,0.16) 6px); border-right: 1px dashed var(--sage-deep); }
.bar .real { position: absolute; inset: 0 auto 0 0; background: var(--sage-deep); }
.etapa .vals { text-align: right; }
.etapa .vals .r { font-family: var(--mono); font-size: 13px; }
.etapa .vals .p { font-family: var(--mono); font-size: 10.5px; color: var(--ink-soft); }

.legend { display: flex; gap: 20px; margin-top: 16px; font-size: 11px; color: var(--ink-soft); }
.legend i { display: inline-block; width: 20px; height: 10px; margin-right: 7px; vertical-align: middle; border: 1px solid var(--line); }
.legend .li-real { background: var(--sage-deep); }
.legend .li-prev { background: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(86,100,95,0.16) 3px, rgba(86,100,95,0.16) 6px); }

/* tabela detalhada (schedule) */
.schedule { border: 1px solid var(--line-strong); background: var(--surface); }
.sch-row {
  display: grid;
  grid-template-columns: 70px 1fr 130px 130px 70px;
  align-items: center;
  border-top: 1px solid var(--line);
}
.sch-row:first-child { border-top: 0; }
.sch-head { background: var(--sage-wash); position: sticky; }
.sch-head > div { font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; padding: 11px 14px; }
.sch-row > div { padding: 11px 14px; font-size: 13px; }
.sch-row .r-code { font-family: var(--mono); color: var(--sage-deep); font-size: 12px; }
.sch-row .r-val { font-family: var(--mono); text-align: right; }
.sch-row .r-pct { font-family: var(--mono); text-align: right; font-size: 11.5px; color: var(--ink-soft); }
.sch-cat { background: #fbfbfa; cursor: pointer; }
.sch-cat:hover { background: var(--sage-wash); }
.sch-cat .r-nome { font-weight: 600; }
.sch-cat .r-code::before { content: "▸ "; color: var(--sage); }
.sch-cat.open .r-code::before { content: "▾ "; }
.sch-sub .r-nome { color: var(--ink-soft); font-weight: 500; }
.sch-sub .r-code { color: var(--sage-deep); }
.sch-item .r-nome { font-size: 12.5px; color: var(--ink-soft); }
.sch-filhos .r-nome { padding-left: calc(14px + var(--nivel, 1) * 16px); }
.text-right { text-align: right; }
.align-r { text-align: right; }

/* empty state próximos pagamentos */
.empty {
  border: 1px dashed var(--line-strong);
  background: var(--surface);
  padding: 34px 26px;
  text-align: center;
}
.empty .ic { font-family: var(--mono); font-size: 22px; color: var(--sage); }
.empty h3 { font-size: 14px; margin: 12px 0 6px; letter-spacing: 0.04em; }
.empty p { font-size: 12.5px; color: var(--ink-soft); max-width: 420px; margin: 0 auto; }

/* feedback */
.feedback { background: var(--surface); border: 1px solid var(--line); padding: 26px; display: grid; grid-template-columns: 1fr auto; gap: 20px; align-items: end; }
.feedback textarea {
  width: 100%; min-height: 84px; resize: vertical;
  border: 1px solid var(--line-strong); background: var(--paper);
  font-family: var(--sans); font-size: 14px; color: var(--ink); padding: 12px 14px; border-radius: 2px;
}
.feedback textarea:focus { outline: 2px solid var(--sage); outline-offset: 1px; background: #fff; }

/* rodapé */
.foot { padding: 30px 24px 48px; border-top: 1px solid var(--line); color: var(--ink-soft); font-size: 11px; letter-spacing: 0.04em; }
.foot .row { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.foot-contatos {
  margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line);
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px;
  font-family: var(--mono); font-size: 10.5px; letter-spacing: 0.02em;
}
.foot-contatos a { color: var(--sage-deep); text-decoration: none; }
.foot-contatos a:hover { text-decoration: underline; }
.foot-contatos .fc-sep { color: var(--line-strong); }

/* =========================================================
   RESPONSIVO
   ========================================================= */
@media (max-width: 820px) {
  .tb-inner { grid-template-columns: 1fr; }
  .tb-cell { border-left: 0; border-top: 1px solid var(--line); }
  .tb-cell:first-child { border-top: 0; }
  .tb-side { justify-content: space-between; }
  .figs { grid-template-columns: 1fr; }
  .etapa { grid-template-columns: 26px 1fr; }
  .etapa .vals { grid-column: 2; text-align: left; margin-top: 4px; }
  .sch-row { grid-template-columns: 54px 1fr 96px; }
  .sch-row .r-prev-col, .sch-head .r-prev-col { display: none; }
  .feedback { grid-template-columns: 1fr; }
}

/* =========================================================
   IMPRESSÃO / EXPORTAR
   ========================================================= */
@media print {
  .titleblock, .tb-actions, .feedback, .no-print { display: none !important; }
  body { background: #fff; font-size: 11px; }
  .section, .hero-inner { padding: 16px 0; }
  .figs { break-inside: avoid; }
  .schedule, .etapas { break-inside: auto; }
  .sch-row, .etapa { break-inside: avoid; }
  @page { margin: 16mm; }
}

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}

/* =========================================================
   LOGO
   ========================================================= */
.login-logo { width: 48px; height: 48px; object-fit: contain; margin-bottom: 18px; display: block; }
.tb-mark { flex-direction: row; align-items: center; gap: 12px; }
.tb-logo { width: 34px; height: 34px; object-fit: contain; flex: none; display: block; }
.tb-logo-btn {
  background: none; border: 0; padding: 0; margin: 0; flex: none;
  border-radius: 2px; transition: transform 0.15s ease, background 0.15s ease;
}
.tb-logo-btn:hover { background: var(--sage-wash); transform: scale(1.06); }
.tb-logo-btn:focus-visible { outline: 2px solid var(--sage); outline-offset: 2px; }
.tb-mark-txt { display: flex; flex-direction: column; }

/* =========================================================
   ORDENAÇÃO (sorter)
   ========================================================= */
.sorter { margin-left: auto; display: inline-flex; border: 1px solid var(--line-strong); border-radius: 2px; overflow: hidden; }
.sorter button {
  border: 0; background: var(--surface); color: var(--ink-soft);
  padding: 7px 12px; font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase; font-weight: 600;
  border-left: 1px solid var(--line);
}
.sorter button:first-child { border-left: 0; }
.sorter button:hover { background: var(--sage-wash); color: var(--sage-deep); }
.sorter button.on { background: var(--sage-deep); color: #fff; }

/* =========================================================
   PAINEL ADMIN
   ========================================================= */
.admin { background: #eceeed; border-bottom: 1px solid var(--line-strong); }
.admin-inner { padding: 22px 24px 26px; }
.admin-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
/* um quadro embaixo do outro (coluna única, largura cheia) — mais organizado p/ editar */
.admin-body { display: flex; flex-direction: column; gap: 20px; max-width: 1180px; margin: 0 auto; }
.admin-card {
  background: var(--surface); border: 1px solid var(--line); border-radius: 4px; padding: 22px 24px;
  scroll-margin-top: calc(var(--tb-h, 72px) + 16px); transition: box-shadow 0.2s ease, border-color 0.2s ease;
}
.admin-card:focus-within { border-color: var(--line-strong); box-shadow: 0 2px 14px rgba(44,47,46,0.07); }
/* realce breve quando a busca/atalho salta para o card */
.admin-card.realce { animation: cardRealce 1.4s ease; }
@keyframes cardRealce {
  0% { box-shadow: 0 0 0 0 rgba(154,166,164,0); border-color: var(--line); }
  18% { box-shadow: 0 0 0 3px rgba(154,166,164,0.45); border-color: var(--sage); }
  100% { box-shadow: 0 0 0 0 rgba(154,166,164,0); border-color: var(--line); }
}
.admin-card h3 { font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink); margin-bottom: 8px; }
.admin-card-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.admin-card-head h3 { margin-bottom: 0; }
.admin-hint { font-size: 11.5px; color: var(--ink-soft); line-height: 1.5; margin: 0 0 14px; max-width: 74ch; }

/* barra de ferramentas do admin (sticky): busca + atalhos de seção */
.admin-toolbar {
  position: sticky; top: var(--tb-h, 0px); z-index: 12; margin: 0 auto 20px; max-width: 1180px;
  background: rgba(236,238,237,0.92); backdrop-filter: blur(6px);
  border: 1px solid var(--line-strong); border-radius: 4px; padding: 10px 12px;
  display: flex; flex-direction: column; gap: 8px;
}
.admin-busca { position: relative; display: flex; align-items: center; }
.admin-busca .ab-ic { position: absolute; left: 11px; color: var(--sage-deep); pointer-events: none; }
.admin-busca input {
  width: 100%; padding: 10px 12px 10px 34px; border: 1px solid var(--line-strong);
  background: #fff; font-family: var(--sans); font-size: 13px; border-radius: 3px; color: var(--ink);
}
.admin-busca input:focus { outline: 2px solid var(--sage); outline-offset: 1px; }
.admin-nav { display: flex; flex-wrap: wrap; gap: 6px; }
.admin-nav button {
  font-family: var(--sans); font-size: 11px; letter-spacing: 0.02em; color: var(--sage-deep);
  background: #fff; border: 1px solid var(--line); border-radius: 999px; padding: 5px 12px; cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.admin-nav button:hover { background: var(--sage-wash); border-color: var(--line-strong); }
.admin-nav button:focus-visible { outline: 2px solid var(--sage); outline-offset: 1px; }
.admin-nav button.oculto { display: none; }
.admin-nav-vazio { font-size: 11px; color: var(--ink-soft); font-style: italic; padding: 5px 2px; }

/* abas do painel (Obra / Catálogo / Método / Admin) */
.admin-abas { display: flex; gap: 4px; flex-wrap: wrap; border-bottom: 1px solid var(--line); padding-bottom: 8px; }
.aba-btn {
  font-family: var(--sans); font-size: 12px; letter-spacing: 0.04em; font-weight: 600;
  color: var(--ink-soft); background: transparent; border: 1px solid transparent; border-radius: 3px 3px 0 0;
  padding: 7px 16px; cursor: pointer; position: relative; transition: color 0.15s ease, background 0.15s ease;
}
.aba-btn:hover { color: var(--ink); background: var(--sage-wash); }
.aba-btn:focus-visible { outline: 2px solid var(--sage); outline-offset: 1px; }
.aba-btn.is-ativa { color: var(--sage-deep); background: #fff; border-color: var(--line); border-bottom-color: #fff; }
.aba-btn.is-ativa::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -9px; height: 2px; background: var(--sage);
}
.aba-btn.hidden { display: none; }
.admin-card.aba-oculta { display: none !important; }

/* divisor entre serviços e configurações + status dos serviços */
.aba-sep { width: 1px; align-self: stretch; margin: 2px 6px; background: var(--line); }
.aba-cfg { color: var(--ink-soft); }
.aba-dot { width: 6px; height: 6px; border-radius: 50%; margin-left: 7px; display: inline-block; vertical-align: middle; background: var(--line-strong); }
.aba-dot.off { background: transparent; border: 1px solid var(--line-strong); }
.aba-dot.contratado { background: var(--sage); }
.aba-dot.andamento { background: #c98a2b; }
.aba-dot.concluido { background: var(--sage-deep); }

/* card genérico de serviço (aviso de não-contratado, vínculo de obra, home do EVF) */
.servico-card .svc-vazio, .servico-card .svc-aviso { padding: 6px 2px; }
.svc-selo {
  display: inline-block; font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 700; color: #a9631f; background: #f6ead9; border-radius: 3px; padding: 3px 9px; margin-bottom: 8px;
}
.svc-selo.ok { color: var(--sage-deep); background: var(--sage-wash); }
.servico-card h3 { margin: 4px 0 6px; }
.svc-vincular { margin-top: 14px; }
.svc-vincular > label { display: block; font-size: 11px; letter-spacing: 0.06em; color: var(--sage-deep); font-weight: 700; margin-bottom: 5px; }
.svc-linha { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.svc-linha select, .svc-linha input {
  flex: 1; min-width: 220px; padding: 9px 10px; border: 1px solid var(--line-strong);
  background: var(--surface); font-family: var(--sans); font-size: 13px; color: var(--ink); border-radius: 2px;
}
.svc-linha select:focus, .svc-linha input:focus { outline: 2px solid var(--sage); outline-offset: 1px; background: #fff; }

/* combobox de obra (busca no topo) */
.obra-sel.combo { position: relative; align-items: stretch; flex-direction: column; gap: 4px; }
.obra-sel.combo > label { align-self: flex-start; }
.combo-field { position: relative; display: flex; align-items: center; }
.combo-field input {
  flex: 1; width: 100%; padding: 9px 32px 9px 10px; border: 1px solid var(--line-strong); background: var(--surface);
  font-family: var(--sans); font-size: 13px; font-weight: 600; color: var(--ink); border-radius: 2px;
}
.combo-field input:focus { outline: 2px solid var(--sage); outline-offset: 1px; }
.combo-toggle {
  position: absolute; right: 4px; top: 50%; transform: translateY(-50%); border: none; background: transparent;
  color: var(--sage-deep); font-size: 12px; cursor: pointer; padding: 4px 6px; line-height: 1;
}
.combo-panel {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 20; margin-top: 3px; max-height: 320px; overflow-y: auto;
  background: #fff; border: 1px solid var(--line-strong); border-radius: 3px; box-shadow: 0 6px 20px rgba(44,47,46,0.12);
}
.combo-op { display: flex; flex-direction: column; gap: 1px; padding: 8px 12px; cursor: pointer; }
.combo-op b { font-size: 13px; color: var(--ink); font-weight: 600; }
.combo-op span { font-size: 11px; color: var(--ink-soft); }
.combo-op:hover { background: var(--sage-wash); }
.combo-op.is-sel { background: var(--sage-wash); }
.combo-op.is-sel b { color: var(--sage-deep); }
.combo-vazio { padding: 10px 12px; font-size: 12px; color: var(--ink-soft); font-style: italic; }

/* busca simples que filtra uma lista já renderizada */
.lista-busca {
  width: 100%; padding: 8px 12px; margin-bottom: 10px; border: 1px solid var(--line-strong);
  background: #fff; font-family: var(--sans); font-size: 12.5px; border-radius: 3px; color: var(--ink);
}
.lista-busca:focus { outline: 2px solid var(--sage); outline-offset: 1px; }
@media (prefers-reduced-motion: reduce) {
  .admin-card, .admin-nav button { transition: none; }
  .admin-card.realce { animation: none; }
  html { scroll-behavior: auto !important; }
}
.btn.sm { padding: 7px 12px; font-size: 10px; }

.admin-upload { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.admin-file { font-family: var(--mono); font-size: 12px; color: var(--ink-soft); }
.admin-preview { margin-top: 16px; border-top: 1px solid var(--line); padding-top: 14px; }
.prev-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 20px; }
.prev-grid > div { display: flex; flex-direction: column; }
.prev-grid span { font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 600; }
.prev-grid b { font-size: 13px; font-weight: 500; margin-top: 2px; }
.admin-actions { display: flex; align-items: center; gap: 12px; margin-top: 14px; }
.admin-msg { font-size: 12px; min-height: 16px; color: var(--ink-soft); }
.admin-msg.ok { color: var(--sage-deep); font-weight: 600; }
.admin-msg.erro { color: var(--amber); font-weight: 600; }

/* editor de caixas */
.caixas-editor { display: flex; flex-direction: column; gap: 12px; margin-bottom: 8px; }
.admin-vazio { font-size: 12px; color: var(--ink-soft); font-style: italic; }
.caixa-edit { border: 1px solid var(--line); background: var(--paper); padding: 12px; border-radius: 2px; }
.caixa-edit-top { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.cx-titulo { flex: 1; padding: 8px 10px; border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans); font-weight: 600; font-size: 13px; border-radius: 2px; }
.cx-toggle { font-size: 11px; color: var(--ink-soft); display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.caixa-edit-top button { border: 1px solid var(--line-strong); background: #fff; width: 30px; height: 30px; border-radius: 2px; color: var(--ink-soft); font-size: 13px; }
.caixa-edit-top button:hover { background: var(--sage-wash); color: var(--sage-deep); }
.cx-del:hover { background: #f3e6dc !important; color: var(--amber) !important; }
.cx-corpo { width: 100%; border: 1px solid var(--line-strong); background: #fff; font-family: var(--mono); font-size: 12px; line-height: 1.6; color: var(--ink); padding: 10px; border-radius: 2px; resize: vertical; }
.cx-titulo:focus, .cx-corpo:focus { outline: 2px solid var(--sage); outline-offset: 1px; }

/* =========================================================
   CAIXAS (visão do cliente)
   ========================================================= */
.caixas { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }
.caixa { background: var(--surface); border: 1px solid var(--line); border-top: 3px solid var(--sage-deep); padding: 20px 22px; }
.caixa-titulo { font-size: 14px; letter-spacing: 0.02em; color: var(--ink); margin-bottom: 14px; padding-bottom: 12px; border-bottom: 1px solid var(--line); font-weight: 600; }
.caixa-corpo { font-family: var(--mono); font-size: 12.5px; line-height: 1.7; color: var(--ink-soft); }
.cx-linha { }
.cx-vazio { height: 8px; }
.cx-total { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--line); color: var(--ink); font-weight: 500; }
.cx-val { color: var(--ink); font-weight: 500; }

@media (max-width: 820px) {
  .admin-body { grid-template-columns: 1fr; }
  .prev-grid { grid-template-columns: 1fr; }
  .sorter { margin-left: 0; }
  .sec-head { flex-wrap: wrap; }
}

/* =========================================================
   V2 — barra de obras
   ========================================================= */
.obra-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.obra-sel { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 240px; }
.obra-sel label { font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.obra-sel select {
  flex: 1; padding: 9px 10px; border: 1px solid var(--line-strong); background: var(--surface);
  font-family: var(--sans); font-size: 13px; font-weight: 600; color: var(--ink); border-radius: 2px;
}
.obra-sel select:focus { outline: 2px solid var(--sage); outline-offset: 1px; }
.btn.perigo:hover { background: #f3e6dc; color: var(--amber); border-color: var(--amber); }
.obra-form { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; padding: 12px; border: 1px dashed var(--line-strong); background: var(--surface); }
.obra-form input {
  flex: 1; min-width: 200px; padding: 9px 10px; border: 1px solid var(--line-strong);
  background: var(--paper); font-family: var(--sans); font-size: 13px; border-radius: 2px;
}
.obra-form input:focus { outline: 2px solid var(--sage); outline-offset: 1px; background: #fff; }

/* =========================================================
   V2 — versões
   ========================================================= */
.versoes { margin-top: 18px; border-top: 1px solid var(--line); padding-top: 14px; }
.versoes-lista { display: flex; flex-direction: column; gap: 6px; max-height: 220px; overflow: auto; }
.versao-row {
  display: flex; align-items: center; gap: 12px; padding: 8px 10px;
  border: 1px solid var(--line); background: var(--paper); border-radius: 2px;
}
.versao-row .v-quando { font-family: var(--mono); font-size: 11px; color: var(--ink); white-space: nowrap; }
.versao-row .v-info { flex: 1; font-size: 11.5px; color: var(--ink-soft); }

/* =========================================================
   V2 — acessos dos clientes
   ========================================================= */
.admin-card-full { grid-column: 1 / -1; }
.user-form { border: 1px dashed var(--line-strong); background: var(--paper); padding: 14px; margin-bottom: 14px; }
.user-form-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; margin-bottom: 10px; }
.user-form-grid input, .user-form-grid select {
  padding: 9px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-family: var(--sans); font-size: 13px; border-radius: 2px;
}
.user-form-mods { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 4px; }
.user-form-mods label { font-size: 12px; color: var(--ink-soft); display: inline-flex; gap: 6px; align-items: center; }

.senha-gerada { border: 1px solid var(--sage-deep); background: var(--sage-wash); padding: 14px 16px; margin-bottom: 14px; }
.senha-gerada .sg-head { font-size: 12px; color: var(--ink); margin-bottom: 10px; }
.senha-gerada .sg-body { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.senha-gerada code {
  font-family: var(--mono); font-size: 18px; letter-spacing: 0.06em; background: #fff;
  border: 1px solid var(--line-strong); padding: 8px 14px; border-radius: 2px; color: var(--ink);
}

.usuarios-lista { display: flex; flex-direction: column; gap: 8px; }
.user-row {
  display: grid; grid-template-columns: 1.2fr 2fr auto; gap: 12px; align-items: center;
  border: 1px solid var(--line); background: var(--paper); padding: 10px 14px; border-radius: 2px;
}
.user-row.inativo { opacity: 0.55; }
.user-row .u-id { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.user-row .u-id b { font-size: 13px; }
.user-row .u-user { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); }
.user-row .u-obra { font-size: 11px; color: var(--ink-soft); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.user-row .u-mods { display: flex; gap: 12px; flex-wrap: wrap; }
.user-row .u-mods label { font-size: 11.5px; color: var(--ink-soft); display: inline-flex; gap: 5px; align-items: center; white-space: nowrap; }
.user-row .u-acoes { display: flex; gap: 6px; flex-wrap: wrap; }

@media (max-width: 820px) {
  .user-row { grid-template-columns: 1fr; }
  .user-form-grid { grid-template-columns: 1fr; }
}

/* =========================================================
   V2b — botão de seção
   ========================================================= */
.sec-btn { margin-left: auto; }
.sec-head .sorter + .sec-btn, .sec-btn + .sorter { margin-left: 12px; }

/* =========================================================
   V2b — links importantes (visão do cliente)
   ========================================================= */
.links-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
}
.link-card {
  display: flex; align-items: center; gap: 14px;
  background: var(--surface);
  padding: 18px 18px;
  text-decoration: none;
  color: var(--ink);
  transition: background .15s ease;
  min-width: 0;
}
.link-card:hover { background: var(--sage-wash); }
.link-ic { width: 26px; height: 26px; flex: none; color: var(--sage-deep); display: inline-flex; }
.link-ic svg { width: 100%; height: 100%; }
.link-nome { font-size: 12.5px; font-weight: 600; letter-spacing: 0.02em; line-height: 1.35; min-width: 0; }
.link-seta { margin-left: auto; font-family: var(--mono); font-size: 12px; color: var(--sage); opacity: 0; transition: opacity .15s ease; }
.link-card:hover .link-seta { opacity: 1; }

/* =========================================================
   V2b — decisões da semana (visão do cliente)
   ========================================================= */
.decisoes-lista { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }
.decisao { background: var(--surface); border: 1px solid var(--line); border-top: 3px solid var(--ink); padding: 20px 22px; }
.dc-titulo { font-size: 14px; letter-spacing: 0.02em; color: var(--ink); margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--line); font-weight: 600; }
.dc-corpo { font-size: 13px; line-height: 1.7; color: var(--ink-soft); margin-bottom: 6px; }
.dc-corpo .cx-val { font-family: var(--mono); }
.dc-orienta {
  margin-top: 18px; padding: 14px 16px;
  border: 1px dashed var(--line-strong); background: var(--sage-wash);
  font-size: 12px; color: var(--ink-soft); line-height: 1.7;
}
.dc-orienta b { color: var(--sage-deep); text-transform: uppercase; letter-spacing: 0.08em; font-size: 10.5px; }
.dc-mini-ic { font-size: 12px; }

/* vínculo com OC (cliente) */
.dc-oc { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.oc-chip {
  display: inline-flex; align-items: center; gap: 10px;
  border: 1px solid var(--line-strong); background: var(--paper);
  padding: 10px 14px; border-radius: 2px; font-size: 12px; color: var(--ink);
  text-align: left; letter-spacing: 0.02em;
}
.oc-chip:hover { background: var(--sage-wash); border-color: var(--sage-deep); color: var(--sage-deep); }
.oc-ic { width: 20px; height: 20px; display: inline-flex; color: var(--sage-deep); flex: none; }
.oc-ic svg { width: 100%; height: 100%; }
.oc-status {
  align-self: flex-start;
  font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 700;
  padding: 4px 9px; border-radius: 2px; border: 1px solid var(--line-strong);
  color: var(--ink-soft); background: var(--paper);
}
.oc-status.ok { color: var(--sage-deep); border-color: var(--sage-deep); background: var(--sage-wash); }
.oc-status.nao { color: var(--amber); border-color: var(--amber); background: #f7efe6; }
.oc-status.pend { color: var(--ink-soft); }
/* semáforo de compras: verde = comprado, sage = aprovado, amarelo = aguardando, vermelho = recusada */
.oc-status.comprado { color: #3f6b4a; border-color: #77a181; background: rgba(79,122,90,0.14); }
.oc-status.aprovada { color: var(--sage-deep); border-color: var(--sage-deep); background: var(--sage-wash); }
.oc-status.aguardando { color: #957a2b; border-color: #cbb066; background: #faf4e2; }
.oc-status.recusada { color: #9c5252; border-color: #c08a8a; background: rgba(156,82,82,0.09); }
/* recebimento parcial: âmbar (comprado, mas ainda não entrou tudo) */
.oc-status.parcial { color: #957a2b; border-color: #cbb066; background: #faf4e2; }

/* aviso da regra de cotações (2 por item; 3 em marcenaria/marmoraria/esquadrias) */
.cot-aviso { display: inline-block; font-size: 11px; font-weight: 700; color: #957a2b;
  border: 1px solid #cbb066; background: #faf4e2; border-radius: 2px; padding: 1px 7px; white-space: nowrap; }
.cotf-regra { font-size: 11px; font-weight: 600; color: #957a2b; text-transform: none; letter-spacing: 0; }

/* prioridade pela curva ABC nas listas de compra: chip A/B/C */
.abc-chip { flex: none; }
.abc-chip.abc-vazio { visibility: hidden; }
.oc-row-info b .abc-chip { vertical-align: middle; margin-right: 6px; }

/* data de necessidade (form) + selo de prazo nas Pendências */
.ocf-necessidade { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; margin: 2px 0; }
.ocf-necessidade input[type="date"] { width: auto; }
.pend-prazo { margin-left: 8px; font-size: 10px; font-weight: 700; letter-spacing: 0.04em; text-transform: none;
  border-radius: 2px; padding: 1px 6px; white-space: nowrap; }
.pend-prazo.atras { color: #9c5252; border: 1px solid #c08a8a; background: rgba(156,82,82,0.09); }
.pend-prazo.soon { color: #957a2b; border: 1px solid #cbb066; background: #faf4e2; }
.pend-prazo.ok { color: var(--ink-soft); border: 1px solid var(--line); background: var(--paper); }

/* recebido na confirmação de compra + popup de recebimento (medições) */
.ca-rec { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin: 2px 0 4px; }
.ca-rec input, .rec-nova .rec-pct { width: 72px; }
.ca-rec .admin-hint { flex: 1 1 220px; }
.oc-receber .rec-resumo { font-size: 13px; color: var(--ink-soft); margin-bottom: 8px; }
.rec-lista { list-style: none; margin: 0 0 10px; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.rec-lista li { display: flex; align-items: center; justify-content: space-between; gap: 8px;
  font-size: 13px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 2px; background: var(--paper); }
.rec-nova { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.rec-nova .rec-obs { flex: 1 1 220px; }

/* decisão com compra confirmada: cartão verde discreto (o cliente vê sem rolar) */
.decisao.comprada { border-left: 3px solid #77a181; background: rgba(79,122,90,0.06); }
.decisao.comprada .dc-titulo::after {
  content: "Comprado"; margin-left: 10px; font-size: 9.5px; letter-spacing: 0.12em;
  text-transform: uppercase; font-weight: 700; color: #3f6b4a; vertical-align: middle;
  padding: 3px 8px; border: 1px solid #77a181; border-radius: 2px; background: rgba(79,122,90,0.12);
}
.decisao.recusada { border-left: 3px solid #c08a8a; }

/* =========================================================
   V2b — votos (dedão pra cima / pra baixo)
   ========================================================= */
.voto { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.voto-p { font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--sage-deep); font-weight: 600; margin-right: 2px; }
.voto-btn {
  width: 38px; height: 34px; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--line-strong); background: var(--surface); border-radius: 2px;
  color: var(--ink-soft); padding: 6px;
}
.voto-btn svg { width: 18px; height: 18px; }
.voto-btn.sim:hover { color: var(--sage-deep); border-color: var(--sage-deep); background: var(--sage-wash); }
.voto-btn.nao:hover, .voto-btn.nao.on { color: var(--amber); border-color: var(--amber); background: #f7efe6; }
.voto-form { width: 100%; margin-top: 8px; }
.voto-form textarea {
  width: 100%; border: 1px solid var(--line-strong); background: var(--paper);
  font-family: var(--sans); font-size: 13px; color: var(--ink); padding: 11px 13px;
  border-radius: 2px; resize: vertical; line-height: 1.6;
}
.voto-form textarea::placeholder { color: #a9b2af; font-size: 12px; }
.voto-form textarea:focus { outline: 2px solid var(--sage); background: #fff; }
.voto-form-acoes { display: flex; gap: 8px; margin-top: 8px; }
.voto-erro { width: 100%; font-size: 12px; color: var(--amber); min-height: 0; }
.voto.enviando { opacity: 0.55; pointer-events: none; }

.voto-feito {
  margin-top: 14px; padding: 10px 12px; border-radius: 2px;
  display: flex; align-items: flex-start; gap: 10px; font-size: 12px; line-height: 1.6;
}
.voto-feito.ok { background: var(--sage-wash); border: 1px solid var(--line-strong); color: var(--ink-soft); }
.voto-feito.nao { background: #f7efe6; border: 1px solid #e4cfae; color: var(--ink-soft); }
.vf-ic { width: 16px; height: 16px; flex: none; margin-top: 2px; }
.voto-feito.ok .vf-ic { color: var(--sage-deep); }
.voto-feito.nao .vf-ic { color: var(--amber); }
.vf-ic svg { width: 100%; height: 100%; }
.vf-refazer {
  margin-left: auto; border: 0; background: none; color: var(--sage-deep);
  font-size: 11px; text-decoration: underline; padding: 0; flex: none;
}

/* =========================================================
   V2b — modal (registro + ordem de compra)
   ========================================================= */
.modal-fundo {
  position: fixed; inset: 0; z-index: 60;
  background: rgba(44, 47, 46, 0.45);
  display: grid; place-items: center; padding: 20px;
}
.modal {
  width: 100%; max-width: 720px; max-height: 86vh;
  background: var(--paper); border: 1px solid var(--line-strong);
  display: flex; flex-direction: column;
  box-shadow: 0 18px 50px rgba(44,47,46,0.25);
}
.modal-head {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  padding: 16px 20px; background: var(--surface); border-bottom: 1px solid var(--line-strong);
}
.modal-head h3 { font-size: 13px; letter-spacing: 0.1em; text-transform: uppercase; }
.modal-x { border: 1px solid var(--line-strong); background: var(--surface); width: 32px; height: 32px; border-radius: 2px; color: var(--ink-soft); font-size: 14px; flex: none; }
.modal-x:hover { background: var(--sage-wash); color: var(--sage-deep); }
.modal-corpo { padding: 20px; overflow: auto; }

/* registro */
.reg-busca input {
  width: 100%; padding: 12px 14px; border: 1px solid var(--line-strong); background: var(--surface);
  font-family: var(--sans); font-size: 14px; border-radius: 2px; margin-bottom: 16px;
}
.reg-busca input:focus { outline: 2px solid var(--sage); }
.reg-lista { display: flex; flex-direction: column; gap: 18px; }
.reg-entrada { border: 1px solid var(--line); background: var(--surface); padding: 16px 18px; }
.reg-data { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink); padding-bottom: 10px; border-bottom: 1px solid var(--line); margin-bottom: 4px; }
.reg-data svg { width: 15px; height: 15px; color: var(--sage-deep); }
.reg-grupo { font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; margin: 14px 0 4px; }
.reg-item { padding: 10px 0 4px; border-top: 1px dashed var(--line); }
.reg-item:first-of-type { border-top: 0; }
.reg-item-titulo { font-size: 13px; font-weight: 600; }
.reg-item-corpo { font-family: var(--mono); font-size: 12px; line-height: 1.65; color: var(--ink-soft); margin-top: 6px; }
.reg-oc { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink-soft); margin-top: 8px; flex-wrap: wrap; }
.reg-oc .oc-ic { width: 16px; height: 16px; }

/* ordem de compra (modal) */
.oc-desc { font-size: 13px; line-height: 1.7; color: var(--ink-soft); margin-bottom: 16px; }
.oc-ops { display: flex; flex-direction: column; gap: 10px; }
.oc-op {
  display: flex; gap: 12px; align-items: flex-start;
  border: 1px solid var(--line-strong); background: var(--surface);
  padding: 14px 16px; border-radius: 2px; cursor: pointer;
}
.oc-op:hover { border-color: var(--sage-deep); }
.oc-op.escolhida { border-color: var(--sage-deep); background: var(--sage-wash); box-shadow: inset 0 0 0 1px var(--sage-deep); }
.oc-op.travada { cursor: default; opacity: 0.85; }
.oc-op input { margin-top: 3px; accent-color: var(--sage-deep); }
.oc-op-corpo { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.oc-op-forn { font-size: 13.5px; font-weight: 600; }
.oc-op-desc { font-size: 12.5px; color: var(--ink-soft); }
.oc-op-meta { font-size: 12px; color: var(--ink); display: flex; gap: 8px; flex-wrap: wrap; }
.oc-op-meta b { font-size: 13px; }
.oc-op-obs { font-size: 11.5px; color: var(--ink-soft); font-style: italic; }
.oc-acoes { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; }
.oc-nota { font-size: 11.5px; color: var(--ink-soft); margin-top: 14px; line-height: 1.6; }
.oc-respondida { margin-top: 16px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.oc-quando { font-size: 12px; color: var(--ink-soft); }
.oc-coment { width: 100%; font-size: 12.5px; color: var(--ink-soft); font-style: italic; margin-top: 6px; }

/* =========================================================
   V2b — editor rico (admin)
   ========================================================= */
.rico { border: 1px solid var(--line-strong); background: #fff; border-radius: 2px; }
.rico-bar { display: flex; gap: 2px; border-bottom: 1px solid var(--line); background: var(--paper); padding: 4px; }
.rico-bar button {
  width: 30px; height: 28px; border: 1px solid transparent; background: none;
  border-radius: 2px; font-size: 13px; color: var(--ink-soft);
}
.rico-bar button:hover { background: var(--sage-wash); color: var(--sage-deep); border-color: var(--line-strong); }
.rico-area {
  min-height: 110px; padding: 10px 12px;
  font-family: var(--mono); font-size: 12px; line-height: 1.7; color: var(--ink);
  outline: none; white-space: pre-wrap; overflow-wrap: break-word;
}
.rico-area:focus { box-shadow: inset 0 0 0 2px var(--sage); }
.rico-area:empty::before { content: attr(data-ph); color: #a9b2af; pointer-events: none; }

/* editor de decisões: vínculo com OC */
.dc-vinculo { display: flex; align-items: center; gap: 10px; margin-top: 8px; }
.dc-vinculo label { font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; white-space: nowrap; }
.dc-vinculo select {
  flex: 1; padding: 8px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-family: var(--sans); font-size: 12.5px; border-radius: 2px;
}

/* =========================================================
   V2b — admin: links e OCs
   ========================================================= */
.links-editor { display: flex; flex-direction: column; gap: 8px; margin-bottom: 8px; max-height: 380px; overflow: auto; }
.link-edit {
  display: grid; grid-template-columns: 24px 1.1fr 1.6fr auto auto; gap: 8px; align-items: center;
  border: 1px solid var(--line); background: var(--paper); padding: 8px 10px; border-radius: 2px;
}
.link-edit .link-ic { width: 20px; height: 20px; }
.link-edit input[type="text"], .link-edit input[type="url"] {
  padding: 8px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 12.5px; border-radius: 2px; min-width: 0; font-family: var(--sans);
}
.link-edit input[type="url"] { font-family: var(--mono); font-size: 11.5px; }
.link-edit input:focus { outline: 2px solid var(--sage); }
.le-del { border: 1px solid var(--line-strong); background: #fff; width: 28px; height: 28px; border-radius: 2px; color: var(--ink-soft); }
.le-del:hover { background: #f3e6dc; color: var(--amber); }

.ocs-lista { display: flex; flex-direction: column; gap: 8px; }
.oc-row {
  display: flex; gap: 12px; align-items: flex-start; justify-content: space-between;
  border: 1px solid var(--line); background: var(--paper); padding: 10px 14px; border-radius: 2px; flex-wrap: wrap;
}
.oc-row-info { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
.oc-row-info b { font-size: 13px; }
.oc-row-meta { display: flex; align-items: center; gap: 10px; font-size: 11.5px; color: var(--ink-soft); flex-wrap: wrap; }
.oc-form { border: 1px dashed var(--line-strong); background: var(--paper); padding: 14px; margin-bottom: 14px; display: flex; flex-direction: column; gap: 10px; }
.oc-form-head { font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
/* formulários em popup (E0.2): o form nasce dentro do modal, sem a moldura de card */
.modal-corpo .popup-form { border: none; background: transparent; padding: 0; margin-bottom: 0; }
.modal:has(.popup-form) { max-width: 900px; }

/* ficha do item (E0.1) */
.ficha-tot { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; }
.ficha-tot label { display: flex; flex-direction: column; gap: 4px; font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.ficha-tot input { width: 150px; padding: 9px 10px; border: 1px solid var(--line-strong); background: #fff; font-family: var(--mono); font-size: 13px; border-radius: 2px; }
.ficha-tot input:disabled { background: var(--sage-wash); color: var(--sage-deep); font-weight: 600; }
.ficha-hint { font-size: 11px; color: var(--ink-soft); font-style: italic; padding-bottom: 10px; }
.ficha-prov { display: flex; flex-direction: column; gap: 6px; }
.fi-chip {
  display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; cursor: pointer;
  background: #fff; border: 1px solid var(--line); border-radius: 2px; padding: 9px 12px;
  font-family: var(--sans); font-size: 12.5px; color: var(--ink);
}
.fi-chip:hover { background: var(--sage-wash); border-color: var(--line-strong); }
.fi-chip .oc-status { flex: none; }
.ficha-kv { display: flex; justify-content: space-between; gap: 14px; font-size: 12.5px; color: var(--ink-soft); padding: 6px 0; border-bottom: 1px dotted var(--line); }
.ficha-kv b { color: var(--ink); font-variant-numeric: tabular-nums; text-align: right; }
.ficha-kvs { margin-bottom: 14px; }
.ficha-cliente { display: flex; flex-direction: column; gap: 14px; }
.ficha-memoria { font-size: 12.5px; color: var(--ink-soft); line-height: 1.55; background: var(--surface); border: 1px solid var(--line); padding: 10px 12px; border-radius: 2px; }
.fi-doc { display: inline-flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--sage-deep); text-decoration: none; padding: 6px 0; }
.fi-doc:hover { text-decoration: underline; text-underline-offset: 3px; }
.sch-nome-lk { cursor: pointer; }
.sch-nome-lk:hover, .sch-nome-lk:focus-visible { text-decoration: underline; text-underline-offset: 3px; color: var(--sage-deep); }

/* cadastro rápido de fornecedor dentro dos popups (select + "+ Novo") */
.sel-mais { display: flex; gap: 6px; align-items: center; min-width: 0; }
.sel-mais select { flex: 1; min-width: 0; }
.sel-mais .mf-abrir { flex: none; white-space: nowrap; }
.mini-forn {
  display: flex; gap: 6px; align-items: center; flex-wrap: wrap; width: 100%;
  border: 1px dashed var(--line-strong); background: var(--surface); padding: 8px 10px; border-radius: 3px;
}
.ocf-grid .mini-forn, .ocf-grid .sel-mais + .mini-forn { grid-column: 1 / -1; }
.mini-forn input { flex: 1; min-width: 140px; padding: 8px 10px; border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans); font-size: 12.5px; border-radius: 2px; }
.mini-forn.hidden { display: none; }
.oc-form .cx-titulo { width: 100%; }
.ocf-opcoes { display: flex; flex-direction: column; gap: 10px; }
.ocf-op { border: 1px solid var(--line); background: #fff; padding: 10px; border-radius: 2px; }
.ocf-op-head { display: flex; justify-content: space-between; align-items: center; font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; margin-bottom: 8px; }
.ocf-op-del { border: 1px solid var(--line-strong); background: #fff; width: 24px; height: 24px; border-radius: 2px; color: var(--ink-soft); font-size: 11px; }
.ocf-op-del:hover { background: #f3e6dc; color: var(--amber); }
.ocf-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 8px; }
.ocf-grid input {
  padding: 8px 10px; border: 1px solid var(--line-strong); background: var(--paper);
  font-size: 12.5px; border-radius: 2px; font-family: var(--sans); min-width: 0;
}
.ocf-grid input:focus { outline: 2px solid var(--sage); background: #fff; }
.ocf-span { grid-column: 1 / -1; }

/* --- decisões: chips de vínculo (cotações/OCs) --- */
.dc-vinculo { flex-direction: column; align-items: stretch; gap: 8px; }
.dc-vinc-grupo { display: flex; flex-direction: column; gap: 5px; }
.dc-vinc-k { font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.dc-vinc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.dc-vinc-vazio { font-size: 12px; color: var(--ink-soft); font-style: italic; }
.dc-chip {
  display: inline-flex; align-items: center; gap: 6px; font-size: 12px;
  border: 1px solid var(--line-strong); border-radius: 2px; padding: 4px 9px; background: #fff; cursor: pointer;
}
.dc-chip.on { border-color: var(--sage-deep); background: var(--sage-wash); color: var(--ink); }
.dc-chip input { accent-color: var(--sage-deep); }

/* --- fornecedores (cadastro) --- */
.forn-notas { display: flex; flex-direction: column; gap: 6px; }
.forn-notas-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.forn-nota { display: flex; flex-direction: column; gap: 3px; font-size: 11.5px; color: var(--ink-soft); }
.forn-nota select {
  border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans);
  font-size: 13px; color: var(--ink); padding: 6px 8px; border-radius: 2px;
}
.forn-coment {
  width: 100%; border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans);
  font-size: 13px; color: var(--ink); padding: 10px; border-radius: 2px; resize: vertical; min-height: 60px;
}

/* --- cotação (form admin) --- */
.cotf-sec { font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; margin-top: 6px; }
.cotf-itens, .cotf-forns { display: flex; flex-direction: column; gap: 8px; }
.cotf-item { display: grid; grid-template-columns: 24px 1.6fr 0.7fr 28px; gap: 6px; align-items: center; }
.cotf-item-no { font-family: var(--mono); font-size: 12px; color: var(--sage-deep); text-align: center; }
.cotf-item input, .ocf-item input, .cotf-preco input, .cotf-forn input {
  border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans);
  font-size: 13px; color: var(--ink); padding: 7px 8px; border-radius: 2px; min-width: 0;
}
.cotf-item-del, .ocf-item-del {
  border: 1px solid var(--line-strong); background: #fff; width: 26px; height: 28px;
  border-radius: 2px; color: var(--ink-soft); font-size: 11px;
}
.cotf-item-del:hover, .ocf-item-del:hover { background: #f3e6dc; color: var(--amber); }
.cotf-forn { border: 1px solid var(--line); background: #fff; padding: 10px; border-radius: 2px; display: flex; flex-direction: column; gap: 8px; }
.cotf-forn-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cotf-forn-head .sel-mais { flex: 1; min-width: 220px; }
.cotf-forn-head .cotf-forn-sel { flex: 1; }
.cotf-forn-sel, #ocf-forn-sel {
  border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans);
  font-size: 13px; color: var(--ink); padding: 7px 8px; border-radius: 2px;
}
.cotf-ind { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--sage-deep); white-space: nowrap; }
.cotf-forn-del { border: 1px solid var(--line-strong); background: #fff; width: 26px; height: 28px; border-radius: 2px; color: var(--ink-soft); }
.cotf-forn-del:hover { background: #f3e6dc; color: var(--amber); }
.cotf-precos { display: flex; flex-direction: column; gap: 5px; }
.cotf-preco { display: grid; grid-template-columns: 1.4fr 0.6fr 0.8fr 0.6fr; gap: 6px; align-items: center; }
.cotf-preco-lbl { font-size: 11.5px; color: var(--ink-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cotf-forn-tot { text-align: right; font-size: 12.5px; color: var(--ink-soft); }
.cotf-forn-tot b { color: var(--ink); font-family: var(--mono); }

/* --- OC (form admin, itemizado) --- */
.ocf-itens { display: flex; flex-direction: column; gap: 6px; }
.ocf-item { display: grid; grid-template-columns: 22px 1.6fr 0.7fr 0.6fr 0.9fr 0.7fr 0.9fr 26px; gap: 5px; align-items: center; }
.ocf-item-tot { font-family: var(--mono); font-size: 12px; text-align: right; color: var(--ink); }
.ocf-totais { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 6px; }
.ocf-totais label { font-size: 12px; color: var(--ink-soft); display: flex; align-items: center; gap: 6px; }
.ocf-totais input { width: 100px; border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans); font-size: 13px; padding: 6px 8px; border-radius: 2px; }
.ocf-total-geral { margin-left: auto; font-size: 13px; }
.ocf-total-geral b { font-family: var(--mono); font-size: 15px; }

/* vínculo com a planilha (form OC/cotação) */
.ocf-vinculo { display: flex; flex-direction: column; gap: 6px; border: 1px solid var(--line); background: var(--sage-wash); padding: 10px; border-radius: 2px; }
.ocf-vinc-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 8px; }
.ocf-vinc-grid select { border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans); font-size: 13px; color: var(--ink); padding: 7px 8px; border-radius: 2px; }
.ocf-vinc-efeito { font-size: 12px; color: var(--ink-soft); }
.ocf-vinc-efeito b { color: var(--sage-deep); }
.ocf-vinc-heranca { font-size: 11px; color: var(--sage-deep); font-style: italic; }
.oc-vinc { font-family: var(--mono); font-size: 10.5px; color: var(--sage-deep); }

/* confirmar compra (mini-form inline no card de OCs) */
.oc-confirma-form { width: 100%; margin-top: 8px; }
.oc-confirma { border: 1px dashed var(--line-strong); background: var(--paper); padding: 10px; border-radius: 2px; display: flex; flex-direction: column; gap: 8px; }
.confirma-anexos { display: flex; flex-direction: column; gap: 6px; }
.ca-obs { width: 100%; border: 1px solid var(--line-strong); background: #fff; font-family: var(--sans); font-size: 13px; color: var(--ink); padding: 8px; border-radius: 2px; resize: vertical; min-height: 44px; }

/* pendências */
#pend-count:empty { display: none; }
.pend-row { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--line); }
.pend-row:last-child { border-bottom: 0; }
.pend-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.pend-info b { font-size: 13px; }
.pend-tipo { font-size: 9px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.pend-quem { font-size: 11.5px; color: var(--ink-soft); }

/* --- OC / cotação (modais do cliente) --- */
.oc-dados { display: flex; flex-wrap: wrap; gap: 10px 24px; margin-bottom: 14px; }
.oc-dado { display: flex; flex-direction: column; gap: 2px; }
.oc-dado .cd-k { font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.oc-dado b { font-size: 13px; }
.oc-tab-wrap { overflow-x: auto; margin-bottom: 14px; }
.oc-tab { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.oc-tab th, .oc-tab td { border-bottom: 1px solid var(--line); padding: 7px 8px; text-align: left; }
.oc-tab thead th { font-size: 9.5px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.oc-tab .oct-r { text-align: right; }
.oc-tab .oct-c { text-align: center; }
.oc-tab .num { font-family: var(--mono); }
.oc-tab tfoot td { border-bottom: 0; padding: 5px 8px; color: var(--ink-soft); }
.oc-tab tfoot .oct-total td { border-top: 1.5px solid var(--ink); color: var(--ink); font-weight: 700; padding-top: 8px; }
.oc-tab tfoot .oct-total .num { font-size: 14px; }

/* --- cotação: tabela comparativa --- */
.cot-tab-wrap { margin-bottom: 14px; }
.cot-tab .cot-item-h, .cot-tab .cot-item { text-align: left; min-width: 160px; }
.cot-tab .cot-fh { text-align: center; vertical-align: top; min-width: 130px; }
.cot-fh-lbl { display: inline-flex; align-items: center; gap: 6px; }
.cot-fh-lbl input { accent-color: var(--sage-deep); }
.cot-fh-selos { display: flex; flex-direction: column; gap: 2px; align-items: center; margin-top: 3px; }
.cot-fh-meta { font-size: 10.5px; color: var(--ink-soft); font-weight: 400; text-transform: none; letter-spacing: 0; }
.cot-fh-link { font-size: 10.5px; }
.cot-cell { text-align: right; }
.cot-cell.escolhido, .cot-fh.escolhido { background: var(--sage-wash); }
.cot-tab .cot-total td { border-top: 1.5px solid var(--ink); font-weight: 700; }
.cot-un { color: var(--ink-soft); font-weight: 400; }
.selo-indicado, .selo-barato, .selo-escolhido {
  display: inline-block; font-size: 8.5px; letter-spacing: 0.06em; text-transform: uppercase;
  font-weight: 700; padding: 2px 5px; border-radius: 2px; white-space: nowrap;
}
.selo-indicado { background: var(--sage-deep); color: #fff; }
.selo-barato { background: var(--sage-wash); color: var(--sage-deep); border: 1px solid var(--sage); }
.selo-escolhido { background: #f7efe6; color: var(--amber); border: 1px solid var(--amber); }

/* planilha viva: linhas vindas de OC + marca de orçado inicial */
.sch-row.sch-oc { background: linear-gradient(90deg, rgba(154,166,164,0.10), transparent 60%); }
.sch-oc-chip {
  border: 0; background: none; padding: 0; font: inherit; color: var(--sage-deep);
  text-align: left; cursor: pointer; text-decoration: underline dotted; text-underline-offset: 2px;
}
.sch-oc-chip:hover { color: var(--ink); }
.sch-orig { color: var(--sage-deep); font-weight: 700; cursor: help; }

/* modal da OC: bloco de compra confirmada */
.oc-compra { border: 1px solid var(--line-strong); border-left: 3px solid var(--sage-deep); background: var(--sage-wash); padding: 10px 12px; margin: 12px 0; border-radius: 2px; }
.oc-compra-top { font-size: 13px; display: flex; align-items: center; gap: 6px; }
.oc-compra-top svg { width: 15px; height: 15px; }
.oc-compra-obs { font-size: 12.5px; color: var(--ink-soft); margin: 6px 0; }
.oc-compra .docs-lista { margin-top: 8px; }

/* editor de docs: anexos vindos de OC (só leitura) */
.docs-viaoc { border: 1px dashed var(--line-strong); padding: 8px 10px; border-radius: 2px; margin-bottom: 10px; }
.docs-viaoc .cd-k { display: block; font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; margin-bottom: 5px; }
.doc-viaoc { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--ink-soft); padding: 2px 0; }
.doc-viaoc svg { width: 14px; height: 14px; }

@media (max-width: 820px) {
  .link-edit { grid-template-columns: 24px 1fr auto; }
  .link-edit .le-url { grid-column: 1 / -1; }
  .ocf-grid { grid-template-columns: 1fr; }
  .forn-notas-grid { grid-template-columns: 1fr 1fr; }
  .ocf-item { grid-template-columns: 20px 1fr 0.7fr 26px; }
  .ocf-item input[data-k="quantidade"], .ocf-item input[data-k="valorUnit"],
  .ocf-item input[data-k="desconto"] { grid-column: span 1; }
  .ocf-item .ocf-item-tot { grid-column: 2 / -1; text-align: left; }
  .cotf-preco { grid-template-columns: 1fr; }
  .modal { max-height: 92vh; }
  .decisoes-lista { grid-template-columns: 1fr; }
}

/* botão de export fica no fluxo flex dos heads (sem sobrepor os textos) */
.sec-head .sec-export { margin-left: auto; }
.crono-head .sec-export, .hero-head .sec-export, .graf-head .sec-export { flex: none; }

@media print {
  .voto, .voto-form, .oc-chip, .sec-btn, .sec-export, .dc-orienta { display: none !important; }
  .links-grid { grid-template-columns: repeat(3, 1fr); }
  .link-seta { display: none; }
}

/* =========================================================
   V3 — cronograma da obra (linha do tempo, junto do hero)
   ========================================================= */
.crono { background: var(--surface); border-bottom: 1px solid var(--line); }
.crono-inner { padding: 22px 24px 20px; }
.crono-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.crono-atual { font-size: 12px; color: var(--ink-soft); }
.crono-atual b { color: var(--ink); font-weight: 600; }
.crono-fluxo { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.crono-fluxo:empty { margin-top: 0; }

.crono-etapa {
  display: inline-flex; align-items: center; gap: 9px;
  border: 1px solid var(--line-strong); background: var(--surface);
  padding: 8px 13px; border-radius: 2px; font-family: var(--sans);
  font-size: 12px; font-weight: 500; color: var(--ink); text-align: left;
  transition: background .15s ease, border-color .15s ease;
}
.crono-etapa:hover { background: var(--sage-wash); border-color: var(--sage-deep); }
.crono-etapa .ce-idx { font-family: var(--mono); font-size: 10px; color: var(--sage); }
.crono-etapa .ce-dot { width: 10px; height: 10px; border-radius: 50%; border: 1.5px solid var(--line-strong); background: var(--surface); flex: none; }
.crono-etapa .ce-nome { white-space: nowrap; max-width: 220px; overflow: hidden; text-overflow: ellipsis; }

.crono-etapa.st-concluida { background: var(--sage-wash); color: var(--ink-soft); }
.crono-etapa.st-concluida .ce-dot { background: var(--sage-deep); border-color: var(--sage-deep); }
.crono-etapa.st-andamento { border-color: var(--sage-deep); box-shadow: inset 0 0 0 1px var(--sage-deep); }
.crono-etapa.st-andamento .ce-dot { background: var(--sage-deep); border-color: var(--sage-deep); box-shadow: 0 0 0 3px rgba(86,100,95,0.18); }
.crono-etapa.st-andamento .ce-nome { font-weight: 600; }
.crono-etapa.st-aguardando { border-color: #e4cfae; background: #faf5ec; }
.crono-etapa.st-aguardando .ce-dot { border-color: var(--amber); background: var(--amber); }
.crono-etapa.aberta { box-shadow: inset 0 0 0 1px var(--sage-deep); border-color: var(--sage-deep); }
.crono-etapa.oculta { opacity: 0.45; border-style: dashed; }

.crono-detalhe { margin-top: 12px; border: 1px solid var(--line); background: var(--paper); padding: 14px 16px; }
.cd-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px 20px; }
.cd-item { display: flex; flex-direction: column; gap: 4px; }
.cd-k { font-size: 9.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--sage-deep); font-weight: 700; }
.cd-item b { font-size: 13px; font-weight: 500; }
.cd-st {
  align-self: flex-start; font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 700;
  padding: 4px 9px; border-radius: 2px; border: 1px solid var(--line-strong); color: var(--ink-soft); background: var(--surface);
}
.cd-st.st-concluida { color: var(--sage-deep); border-color: var(--sage-deep); background: var(--sage-wash); }
.cd-st.st-andamento { color: #fff; border-color: var(--sage-deep); background: var(--sage-deep); }
.cd-st.st-aguardando { color: var(--amber); border-color: var(--amber); background: #f7efe6; }
.cd-obs { font-size: 12.5px; color: var(--ink-soft); line-height: 1.6; margin: 12px 0 0; }
.cd-decisao { margin-top: 12px; display: flex; flex-direction: column; gap: 6px; }

@media (max-width: 820px) {
  .cd-grid { grid-template-columns: 1fr 1fr; }
  .crono-etapa .ce-nome { max-width: 150px; }
}

/* admin — editor do cronograma */
.crono-editor { display: flex; flex-direction: column; gap: 10px; margin-bottom: 8px; max-height: 420px; overflow: auto; }
.etapa-edit .ee-num { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); flex: none; }
.etapa-edit .ee-status {
  padding: 8px 8px; border: 1px solid var(--line-strong); background: #fff;
  font-family: var(--sans); font-size: 12px; border-radius: 2px;
}
.ee-grid { display: grid; grid-template-columns: 1fr 1fr 1.2fr 1.4fr; gap: 8px; margin-top: 8px; }
.ee-grid input, .ee-grid select {
  padding: 8px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 12px; border-radius: 2px; font-family: var(--sans); min-width: 0;
}
.ee-grid input:focus, .ee-grid select:focus { outline: 2px solid var(--sage); }
.ee-span { grid-column: 1 / -1; }
.ee-apagado { opacity: 0.55; }

@media (max-width: 820px) {
  .ee-grid { grid-template-columns: 1fr; }
}

/* exportar ordem de compra (modal) */
.oc-export { margin-top: 16px; padding-top: 12px; border-top: 1px dashed var(--line); }

/* =========================================================
   F4.0 — Portal · Método ANAGRAMA
   ========================================================= */
.portal-hero { background: var(--surface); border-bottom: 1px solid var(--line); }
.portal-hero .wrap { padding: 48px 24px 42px; }
.portal-hero h1 { font-size: 24px; letter-spacing: 0.01em; margin-top: 10px; }
.portal-sub { font-size: 13.5px; color: var(--ink-soft); max-width: 560px; line-height: 1.7; margin: 12px 0 0; }

.portal-jornada .wrap { padding: 36px 24px 56px; }
.jornada { display: flex; flex-direction: column; gap: 10px; max-width: 760px; }

.jornada-card {
  display: flex; align-items: center; gap: 18px; text-align: left; width: 100%;
  background: var(--surface); border: 1px solid var(--line); border-left: 3px solid var(--line-strong);
  padding: 18px 20px; border-radius: 2px; font-family: var(--sans);
  transition: background .15s ease, border-color .15s ease;
}
.jornada-card:hover { background: var(--sage-wash); border-color: var(--sage-deep); }
.jc-no { font-family: var(--mono); font-size: 13px; color: var(--sage); flex: none; }
.jc-corpo { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1; }
.jc-titulo { font-size: 14px; font-weight: 600; color: var(--ink); }
.jc-resumo { font-size: 12px; color: var(--ink-soft); line-height: 1.5; }
.jc-st {
  flex: none; font-size: 9.5px; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 700;
  padding: 4px 10px; border-radius: 2px; border: 1px solid var(--line-strong);
  color: var(--ink-soft); background: var(--paper);
}
.jc-st.disp { color: var(--sage-deep); border-style: dashed; }
.jc-st.ok { color: var(--sage-deep); border-color: var(--sage-deep); background: var(--sage-wash); }
.jc-st.agora { color: #fff; border-color: var(--sage-deep); background: var(--sage-deep); }
.jc-st.done { color: var(--ink-soft); background: var(--sage-wash); }

.jornada-card.st-contratado, .jornada-card.st-andamento, .jornada-card.st-concluido { border-left-color: var(--sage-deep); }
.jornada-card.st-andamento { box-shadow: inset 0 0 0 1px var(--sage-deep); }
.jornada-card.st-disponivel .jc-titulo { color: var(--ink-soft); }

/* modal convite */
.convite-titulo { font-size: 16px; margin: 0 0 12px; letter-spacing: 0.01em; }
.convite-corpo { font-size: 13.5px; line-height: 1.75; color: var(--ink-soft); }
.convite-corpo p { margin: 0 0 12px; }
.convite-cta { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 18px; }
.convite-cta .btn { text-decoration: none; }

/* admin — projetos do método */
.projeto-row { grid-template-columns: 1.2fr 2fr auto; align-items: start; }
.pj-servicos { display: flex; flex-direction: column; gap: 6px; }
.pj-servico {
  display: grid; grid-template-columns: 24px 1.6fr 1fr 1fr; gap: 8px; align-items: center;
  border: 1px solid var(--line); background: #fff; padding: 6px 10px; border-radius: 2px;
}
.pj-servico:has(.pj-sv-obra) { grid-template-columns: 24px 1.4fr 0.9fr 1.1fr; }
.pj-sv-no { font-family: var(--mono); font-size: 10px; color: var(--sage-deep); }
.pj-sv-titulo { font-size: 12px; font-weight: 600; }
.pj-sv-status, .pj-sv-obra {
  padding: 6px 8px; border: 1px solid var(--line-strong); background: var(--paper);
  font-family: var(--sans); font-size: 11.5px; border-radius: 2px; min-width: 0;
}
.u-projeto {
  margin-top: 4px; padding: 5px 8px; border: 1px solid var(--line); background: #fff;
  font-family: var(--sans); font-size: 11px; border-radius: 2px; color: var(--ink-soft); max-width: 220px;
}
.uf-4 { grid-template-columns: 1fr 1fr 1fr 1fr !important; }

@media (max-width: 820px) {
  .jornada-card { flex-wrap: wrap; }
  .jc-st { margin-left: 34px; }
  .projeto-row { grid-template-columns: 1fr; }
  .pj-servico { grid-template-columns: 24px 1fr; }
  .pj-servico:has(.pj-sv-obra) { grid-template-columns: 24px 1fr; }
  .uf-4 { grid-template-columns: 1fr !important; }
}

/* =========================================================
   V3 — barra de atalhos (fixa junto do titleblock)
   ========================================================= */
.subnav { border-top: 1px solid var(--line); background: var(--surface); position: relative; }
.subnav-inner { display: flex; align-items: center; padding: 0 24px; }
.subnav-links { display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none; }
.subnav-links::-webkit-scrollbar { display: none; }
.subnav-links a {
  display: inline-block; padding: 9px 12px 7px; white-space: nowrap;
  font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 600;
  color: var(--ink-soft); text-decoration: none; border-bottom: 2px solid transparent;
}
.subnav-links a:hover { color: var(--sage-deep); background: var(--sage-wash); }
.subnav-links a.on { color: var(--sage-deep); border-bottom-color: var(--sage-deep); }
.subnav-toggle {
  display: none; align-items: center; gap: 8px;
  margin: 6px 0; padding: 8px 12px;
  border: 1px solid var(--line-strong); background: var(--surface); border-radius: 2px;
  font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; font-weight: 600; color: var(--ink);
}
.subnav-toggle .st-seta { color: var(--sage-deep); }

@media (max-width: 820px) {
  .subnav-toggle { display: inline-flex; }
  .subnav-links {
    display: none; position: absolute; top: 100%; left: 0; right: 0; z-index: 30;
    flex-direction: column; gap: 0;
    background: var(--surface); border-bottom: 1px solid var(--line-strong);
    box-shadow: 0 14px 30px rgba(44,47,46,0.16);
  }
  .subnav.aberto .subnav-links { display: flex; }
  .subnav-links a { padding: 12px 24px; border-bottom: 1px solid var(--line); }
  .subnav-links a.on { border-left: 3px solid var(--sage-deep); border-bottom-color: var(--line); background: var(--sage-wash); }
}

/* =========================================================
   V3 — gráfico de evolução financeira
   ========================================================= */
.grafico { margin-top: 30px; border: 1px solid var(--line); background: var(--surface); padding: 18px 18px 10px; }
.graf-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.graf-hint { font-size: 11px; color: var(--ink-soft); }
.graf-svg svg { display: block; width: 100%; height: auto; }

/* =========================================================
   V3 — documentos por lançamento (clipe na planilha)
   ========================================================= */
.doc-clip {
  display: inline-flex; align-items: center; gap: 3px; vertical-align: middle;
  margin-left: 8px; padding: 2px 6px;
  border: 1px solid var(--line); background: var(--surface); border-radius: 2px;
  color: var(--line-strong); cursor: pointer;
}
.doc-clip svg { width: 12px; height: 12px; }
.doc-clip i { font-style: normal; font-family: var(--mono); font-size: 9.5px; color: var(--sage-deep); }
.doc-clip.tem { color: var(--sage-deep); border-color: var(--line-strong); }
.doc-clip:hover { background: var(--sage-wash); color: var(--sage-deep); border-color: var(--sage-deep); }

.docs-lista { display: flex; flex-direction: column; gap: 1px; background: var(--line); border: 1px solid var(--line); }
.docs-editor { display: flex; flex-direction: column; gap: 8px; }
.doc-edit { display: grid; grid-template-columns: 1fr 1.6fr auto; gap: 8px; align-items: center; }
.doc-edit input {
  padding: 9px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 12.5px; border-radius: 2px; min-width: 0; font-family: var(--sans);
}
.doc-edit .de-url { font-family: var(--mono); font-size: 11.5px; }
.doc-edit input:focus { outline: 2px solid var(--sage); }

@media (max-width: 820px) {
  .doc-edit { grid-template-columns: 1fr auto; }
  .doc-edit .de-url { grid-column: 1 / -1; }
}

/* =========================================================
   Sistema ANAGRAMA — papéis, catálogo, backups, log, serviços
   ========================================================= */
/* cards sensíveis somem para o papel "equipe" (o servidor também bloqueia) */
.admin.papel-equipe .so-master { display: none !important; }

/* catálogo central */
.cat-busca input, .reg-busca input {
  width: 100%; padding: 10px 12px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 13px; border-radius: 2px; font-family: var(--sans); margin-bottom: 10px;
}
.cat-busca input:focus, .reg-busca input:focus { outline: 2px solid var(--sage); }
.cat-foto {
  flex: none; width: 42px; height: 42px; object-fit: cover; border-radius: 2px;
  border: 1px solid var(--line); background: var(--sage-wash); margin-right: 12px;
}
.cat-foto-vazia {
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--mono); font-size: 15px; color: var(--sage-deep);
}
.oc-row.inativo { opacity: 0.55; }

/* log de ações */
.log-row {
  display: flex; gap: 12px; align-items: baseline; padding: 7px 0;
  border-bottom: 1px dashed var(--line); font-size: 12px;
}
.log-row .v-quando { flex: none; }
#log-lista { max-height: 320px; overflow: auto; }
#backups-lista, #lixeira-lista { max-height: 280px; overflow: auto; }

/* página de serviço (cliente) */
.svc-pagina { display: flex; flex-direction: column; gap: 14px; }
.svc-bloco { border: 1px solid var(--line); background: var(--surface); padding: 16px 18px; }
.svc-bloco .docs-lista { margin-top: 10px; }
.svce-docs { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }

/* Renova — cliente */
.rn-cli-lista { display: flex; flex-direction: column; gap: 12px; }
.rn-cli-item { border: 1px solid var(--line); background: var(--surface); padding: 14px 16px; }
.rn-cli-top { display: flex; gap: 12px; align-items: center; }
.rn-cli-foto {
  flex: none; width: 56px; height: 56px; object-fit: cover; border-radius: 2px;
  border: 1px solid var(--line); background: var(--sage-wash);
}
.rn-cli-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.rn-cli-ops { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.rn-cli-op {
  display: flex; gap: 10px; align-items: center; padding: 8px 10px; cursor: pointer;
  border: 1px solid var(--line); border-radius: 2px; background: var(--paper);
}
.rn-cli-op:hover { border-color: var(--sage-deep); background: var(--sage-wash); }
.rn-cli-op.escolhida { border-color: var(--sage-deep); background: var(--sage-wash); }
.rn-cli-op input { accent-color: var(--sage-deep); }
.rn-cli-opfoto {
  flex: none; width: 36px; height: 36px; object-fit: cover; border-radius: 2px;
  border: 1px solid var(--line);
}
.rn-cli-opinfo { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; font-size: 12.5px; }
.rn-cli-total {
  display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px;
  padding: 10px 12px; border-top: 2px solid var(--ink); font-size: 14px; font-weight: 600;
}
.rn-cli-reunioes { display: flex; flex-direction: column; gap: 10px; }
.rn-cli-reuniao { border: 1px solid var(--line); background: var(--surface); padding: 12px 14px; }
.rn-cli-reuniao.st-feita { border-left: 3px solid var(--sage-deep); }
.rn-cli-re-top { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 6px; }
.rn-cli-envios, .rn-cli-ata {
  margin-top: 8px; padding: 8px 12px; background: var(--sage-wash);
  border-left: 2px solid var(--sage); font-size: 12.5px;
}
.rn-cli-envios b, .rn-cli-ata b { display: block; margin-bottom: 4px; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--sage-deep); }

/* Renova — editor (admin) */
.rn-opcoes { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.rn-opcao {
  display: grid; grid-template-columns: 1.4fr 0.9fr 0.7fr 1.2fr 1.2fr auto; gap: 6px; align-items: center;
  padding: 6px; border: 1px dashed var(--line); border-radius: 2px;
}
.rn-opcao.escolhida { border-color: var(--sage-deep); background: var(--sage-wash); }
.rn-opcao input {
  padding: 7px 8px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 11.5px; border-radius: 2px; min-width: 0; font-family: var(--sans);
}
.rn-opcao input:focus { outline: 2px solid var(--sage); }
.uf-3 { grid-template-columns: 1fr 1fr 1fr !important; }

/* ambiente da compra (parâmetro da Análise de Custos) */
.ocf-ambiente { margin-top: 10px; display: flex; flex-direction: column; gap: 4px; }
.ocf-ambiente label { font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--sage-deep); font-weight: 600; }
.ocf-ambiente input {
  padding: 8px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 12.5px; border-radius: 2px; font-family: var(--sans);
}
.ocf-ambiente input:focus { outline: 2px solid var(--sage); }

@media (max-width: 820px) {
  .rn-opcao { grid-template-columns: 1fr 1fr; }
  .uf-3 { grid-template-columns: 1fr !important; }
  .rn-cli-op { flex-wrap: wrap; }
}

/* ===== editor da estrutura da obra (planilha editável) ===== */
.es-total {
  display: flex; justify-content: space-between; align-items: baseline; gap: 8px;
  padding: 8px 10px; margin-bottom: 8px; background: var(--sage-wash);
  border: 1px solid var(--line); border-radius: 6px;
}
.es-total span { font-size: 10.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sage-deep); }
.es-total b { font-family: var(--mono); font-size: 13px; color: var(--ink); }
.es-arvore { display: flex; flex-direction: column; gap: 3px; }
.es-row {
  display: grid;
  grid-template-columns: 74px minmax(120px, 1fr) 108px 108px auto;
  gap: 6px; align-items: center;
  padding: 3px 4px 3px calc(4px + var(--nivel, 0) * 18px);
  border: 1px solid transparent; border-radius: 5px;
}
.es-row:hover { background: #fafbfa; border-color: var(--line); }
.es-row.es-etapa { background: #f0f2f1; border-color: var(--line); }
.es-row.es-etapa .es-nome { font-weight: 600; }
.es-code { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: 2px; }
.es-caret {
  flex: none; width: 15px; height: 18px; padding: 0; border: 0; background: none; cursor: pointer;
  color: var(--sage-deep); font-size: 10px; line-height: 1; display: inline-flex; align-items: center; justify-content: center;
  transition: transform 0.15s ease;
}
.es-caret.fechada { transform: rotate(-90deg); }
.es-caret:hover { color: var(--ink); }
.es-caret:focus-visible { outline: 2px solid var(--sage); outline-offset: 1px; border-radius: 3px; }
.es-caret-vazio { flex: none; width: 15px; }
.es-row.es-pai.es-etapa { background: #eaeeec; }
.es-vinc { color: var(--amber); font-style: normal; }
/* linhas só-leitura: a edição acontece na ficha do item (≡ ou clique no nome) */
.es-nome, .es-prev, .es-real { padding: 4px 6px; font-size: 13px; }
.es-nome.es-ro { cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; border-radius: 4px; }
.es-nome.es-ro:hover, .es-nome.es-ro:focus-visible { color: var(--sage-deep); text-decoration: underline; text-underline-offset: 3px; }
.es-nome.es-ro i { color: var(--ink-soft); }
.es-prev, .es-real { font-family: var(--mono); text-align: right; font-size: 12px; color: var(--ink); white-space: nowrap; font-variant-numeric: tabular-nums; }
.es-acoes { display: flex; gap: 2px; justify-content: flex-end; }
.es-btn {
  width: 24px; height: 24px; padding: 0; border: 1px solid var(--line);
  border-radius: 4px; background: #fff; color: var(--sage-deep); cursor: pointer;
  font-size: 12px; line-height: 1; display: inline-flex; align-items: center; justify-content: center;
}
.es-btn:hover { background: var(--sage-wash); border-color: var(--line-strong); }
.es-btn.perigo:hover { background: #f6e9e3; color: var(--amber); border-color: var(--amber); }
@media (max-width: 820px) {
  .es-row { grid-template-columns: 60px 1fr; grid-auto-rows: auto; row-gap: 4px; }
  .es-prev, .es-real { grid-column: span 1; }
  .es-acoes { grid-column: 1 / -1; }
}

/* ===== OC expansível na planilha detalhada ===== */
.sch-oc-seta {
  border: 0; background: none; cursor: pointer; color: var(--sage-deep);
  font-size: 11px; padding: 0 4px 0 0; margin-right: 1px; line-height: 1;
  transition: transform 0.15s ease; display: inline-block;
}
.sch-oc-seta.aberta { transform: rotate(90deg); }
.sch-oc-itens {
  background: #fbfcfb; border-left: 2px solid var(--sage);
  margin: 0 0 2px calc(12px + var(--nivel, 0) * 14px); border-radius: 0 4px 4px 0;
}
.sch-oc-item {
  display: grid; grid-template-columns: 1fr auto auto; gap: 10px; align-items: baseline;
  padding: 4px 10px; font-size: 12px; color: var(--ink-soft);
  border-top: 1px solid var(--line);
}
.sch-oc-item:first-child { border-top: 0; }
.sch-oc-item .oi-qtd { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); white-space: nowrap; }
.sch-oc-item .oi-val { font-size: 12px; min-width: 84px; text-align: right; }

/* ===== desembolso por etapa: expandir para os itens ===== */
.etapa.tem-itens { cursor: pointer; }
.etapa .etapa-seta { display: inline-block; color: var(--sage-deep); font-size: 10px; transition: transform 0.15s ease; }
.etapa.aberta .etapa-seta { transform: rotate(90deg); }
.etapa-itens { grid-column: 1 / -1; margin: 2px 0 2px 50px; border-left: 2px solid var(--sage); }
.etapa-item {
  display: grid; grid-template-columns: 54px 1fr auto auto; gap: 10px; align-items: baseline;
  padding: 4px 12px; font-size: 12px; color: var(--ink-soft); border-top: 1px solid var(--line);
}
.etapa-item:first-child { border-top: 0; }
.etapa-item .ei-code { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); }
.etapa-item .ei-real { font-size: 12px; text-align: right; }
.etapa-item .ei-prev { font-size: 10.5px; color: var(--ink-soft); text-align: right; min-width: 88px; }
@media (max-width: 820px) {
  .etapa-itens { margin-left: 26px; }
  .etapa-item { grid-template-columns: 40px 1fr; }
  .etapa-item .ei-real, .etapa-item .ei-prev { grid-column: 2; text-align: left; }
}

/* ===== filtros do catálogo (busca + categoria + ambiente) ===== */
.cat-busca { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.cat-busca input { width: auto; flex: 1 1 220px; margin-bottom: 0; }
.cat-busca select {
  padding: 9px 10px; border: 1px solid var(--line-strong); background: #fff;
  font-size: 13px; border-radius: 2px; font-family: var(--sans); color: var(--ink); flex: 0 1 auto;
}
.cat-busca select:focus { outline: 2px solid var(--sage); }

/* ===== EVF: gerenciador (popup) + tela do editor na aba Método ===== */
.evf-head-acoes { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.evf-meta { display: flex; gap: 10px; align-items: center; margin: 10px 0 8px; }
.evf-meta .cx-titulo { flex: 1; }

/* segunda linha do EVF: teto do cliente + conferência */
.evf-meta2 { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; margin: 0 0 8px; }
.evf-teto-campo, .evf-conf-campo {
  display: inline-flex; align-items: center; gap: 6px; font-size: 10px; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--sage-deep); font-weight: 700;
}
.evf-teto-campo input, .evf-conf-campo input {
  font-family: var(--sans); font-weight: 600; font-size: 13px; text-transform: none; letter-spacing: 0;
  color: var(--ink); padding: 7px 9px; border: 1px solid var(--line-strong); background: #fff; border-radius: 2px;
}
.evf-teto-campo input { width: 130px; }
.evf-conf-campo input { width: 190px; }
.evf-teto-campo input:focus, .evf-conf-campo input:focus { outline: 2px solid var(--sage); outline-offset: 1px; }
.evf-teto-badge { font-size: 11px; font-weight: 600; padding: 4px 10px; border-radius: 999px; }
.evf-teto-badge.ok { color: var(--sage-deep); background: var(--sage-wash); }
.evf-teto-badge.estouro { color: #a9631f; background: #f6ead9; }
.evf-metodo-hint { margin: 0 0 12px; }

/* badges na 4ª coluna da árvore (no lugar do "realizado" da obra) */
.es-extra { display: flex; gap: 4px; justify-content: flex-end; flex-wrap: wrap; align-items: center; }
.evf-bdg {
  font-style: normal; font-size: 9.5px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--sage-deep); background: var(--sage-wash); border: 1px solid var(--line);
  border-radius: 999px; padding: 1px 7px; white-space: nowrap;
}
.evf-bdg.cub { color: var(--amber); border-color: var(--amber); background: #fdf4ec; }

/* pendências de rastreabilidade/valor antes de apresentar */
.evf-pendencias { display: flex; flex-direction: column; gap: 4px; margin-top: 10px; }
.evf-pend {
  font-size: 12px; color: var(--ink); background: #fdf6ef; border: 1px solid var(--amber);
  border-left-width: 3px; border-radius: 4px; padding: 5px 9px;
}

/* lista de EVFs no gerenciador */
.evf-lista { display: flex; flex-direction: column; gap: 6px; margin: 10px 0 14px; }
.evf-item {
  display: flex; gap: 8px; align-items: center; justify-content: space-between; flex-wrap: wrap;
  border: 1px solid var(--line); border-radius: 6px; padding: 8px 10px; background: #fff;
}
.evf-item-info { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; min-width: 0; }
.evf-item-info > b { font-family: var(--mono); font-size: 12px; color: var(--sage-deep); white-space: nowrap; }
.evf-item-titulo { font-size: 13px; }
.evf-item-tot { font-family: var(--mono); font-size: 12px; color: var(--ink); white-space: nowrap; }
.evf-item-quando { font-size: 11px; color: var(--ink-soft); white-space: nowrap; }
.evf-novo { border-top: 1px dashed var(--line-strong); padding-top: 12px; }
.evf-novo .ocf-grid { margin-top: 8px; }

/* EVF aprovado: consulta travada (some tudo que edita; a ficha abre só-leitura) */
#card-evf.evf-travado .es-btn:not(.es-ficha) { display: none; }
#card-evf.evf-travado .es-nome.es-ro:hover { text-decoration: underline; }

/* ===== EVF: ficha do item (opções de escolha, busca no catálogo, CUB) ===== */
.efi-opcional { margin: 6px 0 2px; font-size: 12.5px; color: var(--ink); }
.efi-sec-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 12px; }
.efi-sec-row select { padding: 6px 8px; border: 1px solid var(--line-strong); border-radius: 2px; font-size: 12px; }
.efi-escolha, .efi-cub { border-top: 1px dashed var(--line-strong); margin-top: 12px; padding-top: 4px; }
.efi-cub { padding-bottom: 4px; }
.efi-cub .cotf-sec { display: block; margin-top: 8px; }
.efi-cub-grid { display: grid; grid-template-columns: 1fr 130px; gap: 6px; margin-top: 6px; }
.efi-cub-grid select, .efi-cub-grid input { padding: 8px 9px; border: 1px solid var(--line-strong); border-radius: 2px; font-size: 12.5px; }
.efi-op { border: 1px solid var(--line); border-radius: 6px; padding: 8px; margin-top: 6px; background: #fbfcfb; }
.efi-op-head { display: flex; gap: 6px; align-items: center; }
.efi-op-head input[type="text"] { flex: 1; padding: 7px 9px; border: 1px solid var(--line-strong); border-radius: 2px; font-size: 13px; }
.efi-op-sel { display: inline-flex; gap: 4px; align-items: center; font-size: 11px; color: var(--sage-deep); white-space: nowrap; }
.efi-op-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-top: 6px; }
.efi-op-grid input { padding: 7px 9px; border: 1px solid var(--line-strong); border-radius: 2px; font-size: 12px; }
.efi-op-grid .efi-span { grid-column: 1 / -1; }
.efi-cat-busca { margin-top: 8px; }
.efi-cat-busca input[type="search"] { width: 100%; padding: 8px 10px; border: 1px dashed var(--line-strong); border-radius: 2px; font-size: 12.5px; }
#efi-cat-res { display: flex; flex-direction: column; gap: 4px; margin-top: 4px; }
.efi-cat-op {
  display: flex; gap: 8px; align-items: baseline; justify-content: space-between; text-align: left;
  border: 1px solid var(--line); border-radius: 4px; background: #fff; padding: 6px 9px; cursor: pointer; font-size: 12.5px;
}
.efi-cat-op:hover { background: var(--sage-wash); border-color: var(--line-strong); }
.efi-cat-op span { color: var(--ink-soft); font-size: 11.5px; white-space: nowrap; }

/* taxas por fase */
.evf-taxas-lista { display: flex; flex-direction: column; gap: 4px; margin: 8px 0 10px; }
.evf-taxa-row {
  display: grid; grid-template-columns: 42px minmax(120px, 1fr) 110px 64px 110px;
  gap: 8px; align-items: center; font-size: 12.5px;
}
.evf-taxa-head { font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--sage-deep); }
.evf-taxa-row .tx-code { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); }
.evf-taxa-row .tx-direto, .evf-taxa-row .tx-taxa { font-family: var(--mono); font-size: 12px; text-align: right; white-space: nowrap; }
.evf-taxa-row .tx-pct { padding: 6px 8px; border: 1px solid var(--line-strong); border-radius: 2px; font-size: 12.5px; text-align: right; }
.evf-taxa-row .tx-pct-h { text-align: right; }

/* mobiliário à parte */
.evf-mob-lista { display: flex; flex-direction: column; gap: 6px; margin: 8px 0; }
.evf-mob-item { border: 1px solid var(--line); border-radius: 6px; padding: 8px; background: #fbfcfb; }
@media (max-width: 700px) {
  .efi-op-grid { grid-template-columns: 1fr 1fr; }
  .evf-taxa-row { grid-template-columns: 34px 1fr 64px 96px; }
  .evf-taxa-row .tx-direto { display: none; }
}

/* EVF: novo por Excel + lista de modelos no gerenciador */
.evf-novo-excel { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 8px; }
.evf-novo-excel input[type="file"] { font-size: 12px; }
.evf-modelos { border-top: 1px dashed var(--line-strong); margin-top: 14px; padding-top: 10px; }
.evf-modelos .evf-item { margin-top: 6px; }
.evf-modelos #btn-evf-semente { margin-top: 8px; }

/* Taxas ANAGRAMA: linha de fase destacada na visão item a item */
.evf-taxa-row.tx-fase { background: var(--sage-wash); border-radius: 4px; padding: 3px 4px; }
.evf-taxa-row.tx-fase .tx-nome { font-weight: 600; }
.evf-taxa-row .tx-pct::placeholder { color: #9aa39d; font-size: 11px; }

/* ===== EVF: Valores em lote + Curva ABC ===== */
.evf-val-lista { display: flex; flex-direction: column; gap: 3px; margin: 8px 0 10px; max-height: 60vh; overflow-y: auto; }
.evf-val-row {
  display: grid; grid-template-columns: 42px minmax(140px, 1fr) 62px 68px 86px 86px 100px 58px;
  gap: 6px; align-items: center; font-size: 12.5px;
}
.evf-val-head { font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--sage-deep); position: sticky; top: 0; background: #fff; padding: 2px 0; }
.evf-val-row .vl-code { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); }
.evf-val-row .vl-nome { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.evf-val-row input { padding: 6px 7px; border: 1px solid var(--line-strong); border-radius: 2px; font-size: 12px; min-width: 0; }
.evf-val-row input:disabled { background: var(--sage-wash); color: var(--ink-soft); }
.evf-val-row.vl-fase { background: var(--sage-wash); border-radius: 4px; padding: 4px; grid-template-columns: 42px 1fr 120px; }
.evf-val-row.vl-fase .vl-nome { font-weight: 600; }
.evf-val-row.vl-fase .vl-prev { font-family: var(--mono); font-size: 12px; text-align: right; }
.evf-val-row .vl-org { display: flex; justify-content: flex-start; }

.evf-abc-lista { display: flex; flex-direction: column; gap: 3px; margin: 8px 0 10px; max-height: 60vh; overflow-y: auto; }
.evf-abc-row {
  display: grid; grid-template-columns: 26px 46px minmax(140px, 1fr) 120px 64px 72px;
  gap: 8px; align-items: center; font-size: 12.5px;
}
.evf-abc-head { font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--sage-deep); position: sticky; top: 0; background: #fff; padding: 2px 0; }
.evf-abc-row .ab-code { font-family: var(--mono); font-size: 11px; color: var(--sage-deep); }
.evf-abc-row .ab-nome { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.evf-abc-row .ab-val, .evf-abc-row .ab-pct { font-family: var(--mono); font-size: 12px; text-align: right; white-space: nowrap; }
.abc-chip {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; border-radius: 50%; font-size: 10.5px; font-weight: 700;
}
.abc-a { background: #f6e3dc; color: #a04e2c; border: 1px solid #d9a189; }
.abc-b { background: #f7efdd; color: #8a6d1f; border: 1px solid #d9c489; }
.abc-c { background: var(--sage-wash); color: var(--sage-deep); border: 1px solid var(--line); }
@media (max-width: 760px) {
  .evf-val-row { grid-template-columns: 34px 1fr 56px 60px 76px 76px 90px; }
  .evf-val-row .vl-org { display: none; }
}

/* =========================================================
   EVF · página do cliente (escolhas + total ao vivo)
   ========================================================= */
.evfc-topo { font-size: 13px; color: var(--ink-soft); margin-bottom: 6px; }
.evfc-topo b { color: var(--ink); }
.evfc-fases { display: flex; flex-direction: column; gap: 14px; margin-top: 12px; }
.evfc-fase { border: 1px solid var(--line); border-radius: 6px; overflow: hidden; }
.evfc-fase-head { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: var(--sage-wash); }
.evfc-fase-nome { flex: 1; font-weight: 700; font-size: 13px; color: var(--sage-deep); letter-spacing: 0.02em; }
.evfc-fase-corpo { padding: 6px 12px 12px; display: flex; flex-direction: column; gap: 8px; }
.evfc-item { border-top: 1px solid var(--line); padding-top: 8px; }
.evfc-item:first-child { border-top: none; }
.evfc-item-head { display: flex; align-items: center; gap: 10px; }
.evfc-item-nome { flex: 1; font-size: 13px; color: var(--ink); }
.evfc-val { white-space: nowrap; font-size: 13px; }
.evfc-fase.removido, .evfc-item.removido { opacity: 0.55; }
.evfc-item.removido .evfc-item-nome { text-decoration: line-through; }
.evfc-opc { font-size: 11px; color: var(--sage-deep); display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; cursor: pointer; }
.evfc-ops { display: flex; flex-direction: column; gap: 6px; margin: 8px 0 2px; }
.evfc-op { display: flex; align-items: flex-start; gap: 10px; padding: 8px 10px; border: 1px solid var(--line-strong); border-radius: 4px; cursor: pointer; background: #fff; }
.evfc-op:hover { border-color: var(--sage); }
.evfc-op.sel { border-color: var(--sage); background: var(--sage-wash); }
.evfc-op input { margin-top: 3px; }
.evfc-op-foto { width: 52px; height: 52px; object-fit: cover; border-radius: 4px; flex-shrink: 0; }
.evfc-op-info { display: flex; flex-direction: column; gap: 2px; }
.evfc-op-rot { font-weight: 600; font-size: 13px; color: var(--ink); }
.evfc-op-desc { font-size: 11px; color: var(--ink-soft); }
.evfc-mob { display: flex; flex-direction: column; gap: 6px; }
.evfc-mob-item { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; padding: 6px 0; border-bottom: 1px solid var(--line); }
.evfc-mob-total { display: flex; justify-content: space-between; font-weight: 700; padding-top: 6px; color: var(--sage-deep); }
.evfc-barra { position: sticky; bottom: 0; margin-top: 16px; padding: 12px; background: #fff; border-top: 2px solid var(--sage); display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.evfc-total { flex: 1; font-size: 14px; color: var(--ink); }
.evfc-total b { font-size: 18px; color: var(--sage-deep); }
.evfc-teto { font-size: 11px; font-weight: 600; padding: 3px 9px; border-radius: 999px; margin-left: 8px; }
.evfc-teto.ok { color: var(--sage-deep); background: var(--sage-wash); }
.evfc-teto.estouro { color: #a9631f; background: #f6ead9; }
.evfc-picks { display: flex; flex-direction: column; gap: 8px; }
.evfc-pick { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px; border: 1px solid var(--line-strong); border-radius: 6px; background: #fff; cursor: pointer; text-align: left; }
.evfc-pick:hover { border-color: var(--sage); background: var(--sage-wash); }
.evfc-pick-info { display: flex; flex-direction: column; gap: 2px; }
.evfc-pick-meta { display: flex; align-items: center; gap: 10px; }

/* aditivos: item fora do EVF aprovado (vermelho no previsto × realizado) */
.sch-aditivo-tag { display: inline-block; font-size: 9px; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 700; color: #a9631f; background: #f6ead9; border-radius: 3px; padding: 1px 6px; margin-left: 6px; vertical-align: middle; }
.sch-aditivo .r-val:not(.r-prev-col) { color: #b0402a; font-weight: 600; }
.fi-aditivo { display: flex; gap: 8px; align-items: flex-start; font-size: 12px; color: var(--ink-soft); margin: 8px 0 4px; cursor: pointer; }
.fi-aditivo input { margin-top: 2px; }
.fi-aditivo b { color: #a9631f; }
.ficha-kv.saldo-neg { color: #a9631f; }

/* saldo do EVF e aviso de vínculo nos forms de OC/cotação (Rodada 4) */
.ocf-vinc-aviso { color: #a9631f; font-size: 12px; }
.ocf-vinc-saldo { margin-top: 6px; font-size: 12px; color: var(--sage-deep); background: var(--sage-wash); border-radius: 4px; padding: 5px 9px; }
.ocf-vinc-saldo.neg { color: #b0402a; background: #f6ead9; }
