@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap');

/* PRIMELINE — camada visual final e transversal. Carregada depois de todos os estilos legados. */
:root,
:root[data-theme="light"] {
  color-scheme: light;
  font-family: "IBM Plex Sans", Arial, sans-serif;
  color: #3B3830;
  background: #FAF8F3;
  --bg: #FAF8F3;
  --bg-soft: #EFEBE1;
  --sidebar-bg: #20242B;
  --card: #FFFDF9;
  --paper: #FFFDF9;
  --card-border: #DDD8CC;
  --line: #DDD8CC;
  --border-strong: #CFC9BB;
  --text-primary: #3B3830;
  --text-secondary: #6B685F;
  --text-muted: #8A8578;
  --text-hint: #A8A398;
  --ink: #3B3830;
  --muted: #6B685F;
  --charcoal: #20242B;
  --charcoal-2: #20242B;
  --brand-amber: #4A5568;
  --accent: #4A5568;
  --action: #4A5568;
  --state-progress: #B9791E;
  --pos-bg: #E6EDE4;
  --pos-text: #3F6248;
  --pos-border: #E6EDE4;
  --neg-bg: #F2E3E0;
  --neg-text: #8C4A40;
  --neg-border: #F2E3E0;
  --warn-bg: #F7EDD6;
  --warn-text: #7A581D;
  --warn-border: #F7EDD6;
  --info-bg: #F1EFE8;
  --info-text: #5F5E5A;
  --info-border: #F1EFE8;
}

:root[data-theme="dark"] {
  color-scheme: dark;
  color: #F1EFE8;
  background: #1A1D23;
  --bg: #1A1D23;
  --bg-soft: #202329;
  --sidebar-bg: #20242B;
  --card: #23262D;
  --paper: #23262D;
  --card-border: #3A3D45;
  --line: #3A3D45;
  --border-strong: #4A4D55;
  --text-primary: #F1EFE8;
  --text-secondary: #B4B2A9;
  --text-muted: #8A8578;
  --text-hint: #8A8578;
  --ink: #F1EFE8;
  --muted: #B4B2A9;
  --charcoal: #20242B;
  --charcoal-2: #20242B;
  --brand-amber: #4A5568;
  --accent: #4A5568;
  --action: #F1EFE8;
  --state-progress: #E0BD78;
  --pos-bg: #1F2E22;
  --pos-text: #A8C4AE;
  --pos-border: #1F2E22;
  --neg-bg: #352321;
  --neg-text: #E0A49B;
  --neg-border: #352321;
  --warn-bg: #342B1D;
  --warn-text: #E0BD78;
  --warn-border: #342B1D;
  --info-bg: #2C2D30;
  --info-text: #C2BFB6;
  --info-border: #2C2D30;
}

html, body, main, .page { font-family: "IBM Plex Sans", Arial, sans-serif; }
:root body, :root main { background: var(--bg); color: var(--text-primary); }
h1, h2, h3, h4, h5, h6, .brand strong { font-family: "IBM Plex Sans", Arial, sans-serif; color: var(--text-primary); }
p, small, .eyebrow, label, dt { color: var(--text-secondary); }
.eyebrow, [class*="hint"], [class*="meta"] small { color: var(--text-muted); }

/* A sidebar conserva a identidade escura em qualquer tema. */
.sidebar { background: #20242B; color: #F1EFE8; }
.sidebar .brand strong { color: #F1EFE8; }
.sidebar .brand-go, .auth-brand .brand-go, .reset-brand .brand-go { color: #F1EFE8; }
.mobile-brand .brand-go { color: #20242B; }
.sidebar .brand small, .sidebar nav p, .sidebar-user small { color: #B4B2A9; }
.sidebar nav button { color: #B4B2A9; border-radius: 4px; }
.sidebar nav button.active { background: rgba(255,255,255,.10); border-left-color: #4A5568; }
.sidebar nav button.active,
.sidebar nav button:hover { color: #F1EFE8; }

/* Superfícies e cards partilhados. */
:is(.panel, .work-detail, .works-list, .finance-column, .finance-card, .dialog-card,
  .work-dialog-card, .workflow-dialog-card, .invoice-card, .paid-history,
  .overview-panel, .meeting-card, .subcontract-card, .measurement-card,
  .supplier-directory-panel, .supplier-detail, .documents-center-panel,
  .planning-panel, .team-board-panel, .team-directory-panel,
  .cash-month-details article) {
  background: var(--card);
  color: var(--text-primary);
  border-color: var(--card-border);
  border-radius: 6px;
}

/* KPI normal; apenas elementos explicitamente assinalados podem ser principais. */
:is(.overview-kpis, .meeting-kpis, .rsp-kpis, .team-kpis, .tee-kpis,
  .subcontractors-kpis, .planning-summary-kpis) > article,
:is(.work-kpis, .measurement-kpis, .supplier-detail-kpis) > div {
  position: relative;
  background: var(--card);
  color: var(--text-primary);
  border-color: var(--card-border);
  border-radius: 6px;
}
:is(.overview-kpis, .meeting-kpis, .rsp-kpis, .team-kpis, .tee-kpis,
  .subcontractors-kpis, .planning-summary-kpis) > article > span,
:is(.work-kpis, .measurement-kpis, .supplier-detail-kpis) > div > span {
  color: var(--text-secondary);
  font: 600 11px "IBM Plex Sans", Arial, sans-serif;
  text-transform: uppercase;
}
:is(.overview-kpis, .meeting-kpis, .rsp-kpis, .team-kpis, .tee-kpis,
  .subcontractors-kpis, .planning-summary-kpis) > article > strong,
:is(.work-kpis, .measurement-kpis, .supplier-detail-kpis) > div > strong,
.heading-stat strong {
  color: var(--text-primary);
  font-family: "IBM Plex Mono", Consolas, monospace;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
:is([data-kpi-principal="true"], .kpi-principal, .kpi-primary) {
  background: #20242B !important;
  color: #F1EFE8 !important;
  border: 1px solid #4A5568 !important;
}
:is([data-kpi-principal="true"], .kpi-principal, .kpi-primary) > :is(span, strong) { color: #F1EFE8 !important; }
:is([data-kpi-principal="true"], .kpi-principal, .kpi-primary)::after {
  content: "PRINCIPAL";
  position: absolute;
  top: 10px;
  right: 12px;
  padding: 3px 7px;
  border-radius: 999px;
  background: #4A5568;
  color: #F1EFE8;
  font: 600 9px "IBM Plex Sans", Arial, sans-serif;
  letter-spacing: .6px;
}

/* Tabelas: sem zebra, hierarquia consistente e números alinhados. */
table { width: 100%; border-collapse: collapse; border-radius: 6px; background: var(--card); color: var(--text-primary); }
table thead, table thead tr, table th { background: var(--card) !important; }
table th {
  padding: 10px 12px;
  border-bottom: 1px solid var(--border-strong);
  color: var(--text-secondary) !important;
  font: 600 10px "IBM Plex Sans", Arial, sans-serif !important;
  letter-spacing: .65px;
  text-transform: uppercase;
}
table tbody tr, table tr { background: transparent !important; }
table td { padding: 10px 12px; border-bottom: .5px solid var(--card-border); color: var(--text-primary); font-family: "IBM Plex Sans", Arial, sans-serif; }
table tr:last-child td { border-bottom: 0; }
table a, table button:not(.primary-button), .document-link, a:not(.primary-button) { color: var(--action); }
table .ui-identifier-cell { color: var(--text-primary); font-weight: 500; }
table .ui-number-cell,
[data-number], [data-numeric], .numeric, .number, .amount, .currency, .percentage,
.invoice-value, dd, .meeting-dl dd, .cash-month-details dd {
  font-family: "IBM Plex Mono", Consolas, monospace !important;
  font-variant-numeric: tabular-nums;
}
table .ui-number-cell { text-align: right !important; }

/* Estados semânticos partilhados. */
.ui-state-badge,
:is(span, em, b, strong):is([class*="status"], [class*="badge"], [class*="pill"]) {
  display: inline-flex;
  align-items: center;
  width: max-content;
  border: 0 !important;
  border-radius: 999px !important;
  padding: 5px 9px;
  font: 600 9px "IBM Plex Sans", Arial, sans-serif !important;
  letter-spacing: .55px;
  text-transform: uppercase;
}
.ui-state-positive, :is(.approved, .aprovado, .adjudicado, .concluido, .pago, .positive)[class*="status"] { background: var(--pos-bg) !important; color: var(--pos-text) !important; }
.ui-state-negative, :is(.rejected, .recusado, .cancelado, .atrasado, .urgent, .negative)[class*="status"] { background: var(--neg-bg) !important; color: var(--neg-text) !important; }
.ui-state-progress, :is(.pending, .pendente, .em_curso, .em_execucao)[class*="status"] { background: var(--warn-bg) !important; color: var(--warn-text) !important; }
.ui-state-waiting { background: var(--info-bg) !important; color: var(--info-text) !important; }
.ui-state-decision { background: #4A5568 !important; color: #F1EFE8 !important; }

/* Formulários e controlos. */
button, input, select, textarea, .select-wrap, .search-box, .display-toggle,
.outline-action, .primary-button, .secondary-button { border-radius: 4px !important; }
input, select, textarea, .search-box {
  border: 1px solid var(--card-border);
  background: var(--card);
  color: var(--text-primary);
  font-family: "IBM Plex Sans", Arial, sans-serif;
}
input::placeholder, textarea::placeholder { color: var(--text-hint); }
input:focus, select:focus, textarea:focus, .search-box:focus-within {
  border-color: #4A5568 !important;
  outline: 0;
  box-shadow: 0 0 0 2px rgba(74,85,104,.18) !important;
}
.primary-button, button[type="submit"], .card-actions .approve, .invoice-primary-actions > .approve {
  background: #20242B !important;
  border-color: #20242B !important;
  color: #F1EFE8 !important;
}
.primary-button:hover, button[type="submit"]:hover { background: #30353D !important; }
.outline-action, .secondary-button, .upload-button {
  background: transparent !important;
  border: 1px solid var(--border-strong) !important;
  color: var(--text-primary) !important;
}

/* O topo acompanha o fundo final; o login continua claro por definição. */
.topbar { background: rgba(250,248,243,.94); border-color: var(--card-border); }
:root[data-theme="dark"] .topbar { background: rgba(26,29,35,.94); }
.auth-screen { background: #FAF8F3; }
.auth-card { background: #FFFDF9; color: #3B3830; border-radius: 6px; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; }
}
/* Planeamento: especialidade e executor são campos operacionais por tarefa. */
.planning-editor-head,
.planning-editor-row {
  min-width: 1440px;
  grid-template-columns: var(--planning-grid-columns);
}

.procurement-pending { margin-bottom: 20px; border: 1px solid var(--card-border); background: var(--card); }
.procurement-pending > header { display: flex; align-items: center; justify-content: space-between; padding: 16px 18px; border-bottom: 1px solid var(--card-border); }
.procurement-pending > header h3 { margin: 2px 0 0; }.procurement-pending > header > b { font-size: 20px; }
.procurement-pending > div { display: grid; }
.procurement-pending > div > button { display: flex; justify-content: space-between; gap: 20px; padding: 13px 18px; border: 0; border-bottom: 1px solid var(--card-border); background: transparent; color: var(--text-primary); text-align: left; }
.procurement-pending > div > button:hover { background: var(--bg); }.procurement-pending > div > button span { font-variant-numeric: tabular-nums; }
.document-index-table-wrap .tee-index-row.aprovado > td { background: rgba(63, 98, 72, .15); }
.document-index-table-wrap .tee-index-row.pendente > td { background: rgba(138, 100, 32, .15); }
.document-index-table-wrap .tee-index-row.recusado > td { background: rgba(140, 74, 64, .15); }
.document-index-table-wrap .tee-index-row.aprovado:hover > td { background: rgba(63, 98, 72, .2); }
.document-index-table-wrap .tee-index-row.pendente:hover > td { background: rgba(138, 100, 32, .2); }
.document-index-table-wrap .tee-index-row.recusado:hover > td { background: rgba(140, 74, 64, .2); }
.index-filename-warning { grid-column: 1 / -1; display: flex; gap: 10px; align-items: baseline; margin: 0; padding: 10px 12px; border: 1px solid var(--warn-border); background: var(--warn-bg); color: var(--warn-text); font-size: 12px; }
.index-filename-warning[hidden] { display: none; }.index-filename-warning strong { flex: 0 0 auto; font-size: 10px; letter-spacing: .5px; }.index-filename-warning b { font-family: "IBM Plex Mono", monospace; }
.absence-edit-form {
  grid-column: 2 / -1;
  padding: 14px;
  border: 1px solid var(--card-border);
  border-radius: 10px;
  background: var(--bg-soft);
  display: grid;
  grid-template-columns: 1.2fr 1fr .8fr 1.4fr auto;
  gap: 10px;
  align-items: end;
}
.absence-edit-form label { display: grid; gap: 7px; color: var(--text-secondary); font-size: 9px; font-weight: 800; letter-spacing: .8px; }
.absence-edit-form input, .absence-edit-form select { width: 100%; min-height: 42px; border: 1px solid var(--card-border); border-radius: 8px; background: var(--card); color: var(--text-primary); padding: 9px 11px; font: 600 12px "Manrope"; }
.absence-edit-form > button { min-height: 42px; border: 1px solid var(--charcoal); border-radius: 8px; background: var(--charcoal); color: white; padding: 0 14px; font: 800 9px "Manrope"; cursor: pointer; }
.absence-edit-form .form-error { grid-column: 1 / -1; margin: 0; color: var(--neg-text); font-size: 11px; }
@media (max-width: 1100px) { .absence-edit-form { grid-template-columns: 1fr 1fr; } .absence-edit-form > button { grid-column: 1 / -1; } }
@media (max-width: 700px) { .absence-edit-form { grid-column: 1; grid-template-columns: 1fr; } }
/* Decisões e pedidos de informação substituem prompt/confirm nativos. */
.platform-decision-dialog { width:min(560px,calc(100vw - 32px)); max-height:calc(100vh - 32px); border:1px solid var(--border,#d8d8d4); border-radius:4px; padding:0; color:var(--ink,#20242b); background:var(--surface,#fff); box-shadow:0 24px 70px rgba(32,36,43,.28); }
.platform-decision-dialog::backdrop { background:rgba(32,36,43,.58); }
.platform-decision-dialog form { display:grid; gap:18px; padding:26px; }
.platform-decision-dialog header h2 { margin:4px 0 0; }
.platform-decision-dialog form > p { margin:0; line-height:1.55; }
.platform-decision-dialog label { display:grid; gap:8px; font-size:12px; font-weight:700; letter-spacing:.05em; }
.platform-decision-dialog textarea { width:100%; min-height:96px; resize:vertical; }
.platform-decision-dialog footer { display:flex; justify-content:flex-end; gap:10px; }
.invoice-file-action { display: inline-flex; align-items: stretch; gap: 2px; margin: 2px; }
.invoice-file-action > button { margin: 0 !important; }
.invoice-file-delete { min-width: 34px; padding: 0 10px !important; color: #8c4a40 !important; border-color: color-mix(in srgb, #8c4a40 35%, transparent) !important; }
.invoice-flow-steps { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 4px; margin: 14px 0; padding: 0; list-style: none; }
.invoice-flow-steps li { padding: 7px 5px; border-radius: 4px; background: rgba(74, 85, 104, .08); color: #687180; font-size: 10px; font-weight: 700; text-align: center; }
.invoice-flow-steps li.complete { background: rgba(63, 98, 72, .15); color: #3f6248; }
.invoice-flow-steps li.current { background: rgba(138, 100, 32, .15); color: #765519; outline: 1px solid rgba(138, 100, 32, .25); }

/* Obras: o detalhe usa toda a largura; o portfólio abre apenas quando solicitado. */
.works-toolbar { grid-template-columns: minmax(0, 1fr) auto; }
.work-picker-toggle { min-height: 48px; padding: 7px 14px; border: 1px solid var(--card-border); border-radius: 9px; background: var(--card); color: var(--text-primary); display: grid; grid-template-columns: 20px minmax(0,1fr) auto; align-items: center; gap: 11px; text-align: left; cursor: pointer; }
.work-picker-toggle svg { width: 17px; height: 17px; color: var(--text-secondary); }
.work-picker-toggle span { min-width: 0; display: grid; gap: 2px; }
.work-picker-toggle small { color: var(--text-muted); font: 800 8px "Manrope"; letter-spacing: .8px; }
.work-picker-toggle strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 750 12px "Manrope"; }
.work-picker-toggle > b { color: var(--text-muted); transition: transform .18s ease; }
.work-picker-toggle[aria-expanded="true"] > b { transform: rotate(180deg); }
.works-list-panel[hidden] { display: none !important; }
.works-list-panel { margin: -8px 0 18px; padding: 14px; overflow: visible; }
.works-picker-controls { display: grid; grid-template-columns: minmax(280px,1fr) 210px; gap: 10px; margin-bottom: 12px; }
.works-picker-controls .search-box, .works-picker-controls .select-wrap { margin: 0; }
.works-list-head { height: 36px; margin: 0 -14px; padding: 0 14px; }
.works-list { max-height: 310px; display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); align-content: start; overflow-y: auto; }
.work-list-item { min-width: 0; }
.works-layout { display: block; }
.work-detail { width: 100%; min-width: 0; }

/* Alertas: primeiro por tema, depois pela prioridade/data já calculadas. */
.overview-alerts { display: grid; gap: 14px; padding-top: 12px; }
.overview-alert-group { overflow: hidden; border: 1px solid var(--card-border); border-radius: 9px; background: var(--card); }
.overview-alert-group > header, .notification-group > header { min-height: 34px; padding: 0 11px; display: flex; align-items: center; justify-content: space-between; gap: 12px; background: var(--bg-soft); border-bottom: 1px solid var(--card-border); }
.overview-alert-group > header strong, .notification-group > header strong { color: var(--text-primary); font: 850 9px "Manrope"; letter-spacing: .8px; }
.overview-alert-group > header span, .notification-group > header span { min-width: 21px; height: 21px; display: grid; place-items: center; border-radius: 999px; background: var(--charcoal); color: #fff; font: 800 9px "Manrope"; }
.overview-alert-item { min-height: 66px; padding: 8px 11px; display: grid; grid-template-columns: 76px minmax(0,1fr) auto; gap: 11px; align-items: center; border-bottom: 1px solid var(--card-border); border-left: 3px solid transparent; }
.overview-alert-item:last-child { border-bottom: 0; }
.overview-alert-item time { color: var(--text-muted); font: 750 9px "Manrope"; text-transform: uppercase; }
.overview-alert-item > span > strong { display: block; font-size: 12px; }
.overview-alert-item > span > small { display: block; margin-top: 3px; color: var(--text-secondary); font-size: 10px; line-height: 1.4; }
.overview-alert-item.alert-urgent { border-left-color: var(--neg-text); background: var(--neg-bg); }
.overview-alert-item.alert-attention { border-left-color: var(--warn-text); background: var(--warn-bg); }
.overview-alert-item.alert-pending { border-left-color: var(--info-text); background: var(--info-bg); }
.notification-group { margin-top: 14px; border: 1px solid var(--card-border); border-radius: 9px; overflow: hidden; }
.notification-group .notification-drawer-item { padding: 16px 12px; }

/* Comparativo: matriz com leitura de folha de cálculo e contexto fixo. */
.comparison-table-wrap { max-height: min(66vh,720px); overflow: auto; }
.comparison-table { table-layout: auto; }
.comparison-table thead th { position: sticky; top: 0; z-index: 4; border-right: 1px solid rgba(255,255,255,.16); }
.comparison-table tbody tr:nth-child(even):not(.comparison-total) td { background: color-mix(in srgb,var(--bg-soft) 55%,var(--card)); }
.comparison-table .comparison-col-number { width: 62px; min-width: 62px; position: sticky; left: 0; z-index: 3; }
.comparison-table .comparison-col-description { width: 300px; min-width: 260px; position: sticky; left: 62px; z-index: 3; }
.comparison-table thead .comparison-col-number, .comparison-table thead .comparison-col-description { z-index: 6; background: var(--sidebar-bg); }
.comparison-table tbody .comparison-col-number, .comparison-table tbody .comparison-col-description { background: var(--card); box-shadow: 1px 0 var(--card-border); }
.comparison-table .comparison-supplier-heading { min-width: 190px; max-width: 230px; white-space: normal; vertical-align: bottom; }
.comparison-table td.comparison-price-best { background: color-mix(in srgb,var(--pos-bg) 82%,var(--card)) !important; box-shadow: inset 0 3px var(--pos-text); }
.comparison-table td.comparison-price-best output { color: var(--pos-text); }
.comparison-table .comparison-col-actions { width: 128px; min-width: 128px; }
.comparison-total td { position: sticky; bottom: 0; z-index: 2; box-shadow: 0 -1px var(--card-border); }

/* MGO: repõe a ordem e proporções do ficheiro Excel sem perder os filtros atuais. */
.management-map-scroll table { min-width: 1570px; table-layout: fixed; }
.management-map-scroll th:nth-child(1), .management-map-scroll td:nth-child(1) { width: 112px; }
.management-map-scroll th:nth-child(2), .management-map-scroll td:nth-child(2) { width: 160px; }
.management-map-scroll th:nth-child(3), .management-map-scroll td:nth-child(3) { width: 245px; }
.management-map-scroll th:nth-child(4), .management-map-scroll td:nth-child(4) { width: 280px; }
.management-map-scroll th:nth-child(5), .management-map-scroll td:nth-child(5) { width: 86px; }
.management-map-scroll th:nth-child(6), .management-map-scroll td:nth-child(6) { width: 96px; }
.management-map-scroll th:nth-child(7), .management-map-scroll td:nth-child(7),
.management-map-scroll th:nth-child(8), .management-map-scroll td:nth-child(8) { width: 128px; }
.management-map-scroll th:nth-child(9), .management-map-scroll td:nth-child(9) { width: 142px; }
.management-map-scroll th:nth-child(10), .management-map-scroll td:nth-child(10) { width: 150px; }
.management-map-scroll th:nth-child(11), .management-map-scroll td:nth-child(11) { width: 140px; }
.management-map-scroll td:nth-child(3), .management-map-scroll td:nth-child(4) { white-space: normal; overflow-wrap: anywhere; line-height: 1.4; }

@media (max-width: 1180px) {
  .works-list { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .overview-alert-item { grid-template-columns: 66px minmax(0,1fr); }
  .overview-alert-actions { grid-column: 2; justify-items: start; }
}
@media (max-width: 700px) {
  .works-toolbar, .works-picker-controls, .works-list { grid-template-columns: 1fr; }
  .works-toolbar > button { width: 100%; }
  .comparison-table .comparison-col-description { min-width: 210px; width: 230px; }
}
