/* Cheek to Cheek · tema da plataforma de gestão
   Azul ctc #009ee5, dourado #c5ac3a, Poppins, cantos retos, sombras discretas. */

:root {
  --ctc-blue: #009ee5;
  --ctc-blue-light: #3eb4e9;
  --ctc-blue-text: #0079b0;
  --ctc-gold: #c5ac3a;
  --ctc-gold-text: #857020;
  --ctc-navy: #003266;
  --ctc-black: #191919;
  --ctc-dark: #282828;
  --ctc-bg: #f6f7f8;
  --ctc-bg-alt: #eef3f6;
  --ctc-line: #ececec;
  --ctc-text: #4a4a4a;
  --ctc-muted: #8a8a8a;
  --ctc-head: #111;
  --sidebar-w: 248px;
  --topbar-h: 60px;
  --radius: 0;
  --shadow: 0 10px 15px rgba(0, 0, 0, .05);
  --ease: .3s ease;

  --bs-font-sans-serif: "Poppins", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --bs-body-font-size: .875rem;
  --bs-body-color: var(--ctc-text);
  --bs-body-bg: var(--ctc-bg);
  --bs-primary: #009ee5;
  --bs-primary-rgb: 0, 158, 229;
  --bs-link-color: var(--ctc-blue-text);
  --bs-link-color-rgb: 0, 121, 176;
  --bs-link-hover-color: var(--ctc-blue);
  --bs-border-color: var(--ctc-line);
  --bs-border-radius: 0;
  --bs-border-radius-sm: 0;
  --bs-border-radius-lg: 0;
  --bs-border-radius-xl: 0;
  --bs-border-radius-pill: 50rem;
  --bs-emphasis-color: var(--ctc-head);
  --bs-secondary-color: var(--ctc-muted);
}

html, body { height: 100%; }
body { font-family: var(--bs-font-sans-serif); -webkit-font-smoothing: antialiased; }
h1, h2, h3, h4, h5, h6 { color: var(--ctc-head); font-weight: 600; letter-spacing: .1px; }
a { text-decoration: none; transition: color var(--ease); }
::selection { background: rgba(0, 158, 229, .18); }
.boot { display: flex; align-items: center; justify-content: center; height: 100vh; }

/* ---------- Botões ---------- */
.btn { --bs-btn-font-weight: 500; --bs-btn-padding-x: 1.1rem; --bs-btn-padding-y: .5rem; --bs-btn-font-size: .85rem; border-radius: 0; transition: all var(--ease); letter-spacing: .2px; }
.btn-sm { --bs-btn-padding-x: .7rem; --bs-btn-padding-y: .3rem; --bs-btn-font-size: .8rem; }
.btn-primary { --bs-btn-bg: var(--ctc-blue); --bs-btn-border-color: var(--ctc-blue); --bs-btn-hover-bg: var(--ctc-blue-text); --bs-btn-hover-border-color: var(--ctc-blue-text); --bs-btn-active-bg: var(--ctc-navy); --bs-btn-active-border-color: var(--ctc-navy); --bs-btn-disabled-bg: var(--ctc-blue-light); --bs-btn-disabled-border-color: var(--ctc-blue-light); }
.btn-accent { --bs-btn-color: #000; --bs-btn-bg: var(--ctc-gold); --bs-btn-border-color: var(--ctc-gold); --bs-btn-hover-color: #fff; --bs-btn-hover-bg: var(--ctc-blue); --bs-btn-hover-border-color: var(--ctc-blue); --bs-btn-active-color: #fff; --bs-btn-active-bg: var(--ctc-blue-text); --bs-btn-active-border-color: var(--ctc-blue-text); }
.btn-dark { --bs-btn-bg: var(--ctc-black); --bs-btn-border-color: var(--ctc-black); }
.btn-light { --bs-btn-bg: #fff; --bs-btn-border-color: var(--ctc-line); --bs-btn-hover-bg: var(--ctc-bg-alt); --bs-btn-hover-border-color: #dfe5e9; }
.btn-outline-secondary { --bs-btn-color: var(--ctc-text); --bs-btn-border-color: #d9d9d9; --bs-btn-hover-bg: var(--ctc-black); --bs-btn-hover-border-color: var(--ctc-black); }
.btn-icon { width: 34px; height: 34px; padding: 0; display: inline-flex; align-items: center; justify-content: center; }
.btn-link { color: var(--ctc-blue-text); }

/* ---------- Formulários ---------- */
.form-control, .form-select { border-radius: 0; border-color: #dcdcdc; font-size: .875rem; padding: .5rem .75rem; transition: border-color var(--ease), box-shadow var(--ease); }
.form-control:focus, .form-select:focus { border-color: var(--ctc-blue); box-shadow: 0 0 0 3px rgba(0, 158, 229, .12); }
.form-control-sm, .form-select-sm { padding: .3rem .6rem; font-size: .8rem; }
.form-select-sm { padding-right: 2rem; min-width: 5.5rem; }
.form-label { font-size: .75rem; font-weight: 500; color: #6a6a6a; text-transform: uppercase; letter-spacing: .5px; margin-bottom: .3rem; }
.form-text { font-size: .75rem; }
.form-check-input:checked { background-color: var(--ctc-blue); border-color: var(--ctc-blue); }
.form-check-input { border-radius: 0; }
.form-switch .form-check-input { border-radius: 2em; }
.form-section { font-size: .7rem; text-transform: uppercase; letter-spacing: 1.2px; color: var(--ctc-gold-text); font-weight: 600; border-bottom: 1px solid var(--ctc-line); padding-bottom: .4rem; margin: 1.4rem 0 1rem; }
.form-section:first-child { margin-top: 0; }
.input-group-text { border-radius: 0; background: var(--ctc-bg-alt); border-color: #dcdcdc; }
.is-invalid ~ .invalid-feedback { display: block; }

/* ---------- Layout ---------- */
.layout { display: flex; min-height: 100vh; }
.sidebar { width: var(--sidebar-w); background: var(--ctc-black); color: #bdbdbd; position: fixed; inset: 0 auto 0 0; display: flex; flex-direction: column; z-index: 1040; transition: transform var(--ease); }
.sidebar .brand { height: 76px; display: flex; align-items: center; padding: 0 1.4rem; border-bottom: 1px solid rgba(255, 255, 255, .06); }
.sidebar .brand img { height: 34px; }
.sidebar .brand .plat { margin-left: .75rem; font-size: .65rem; text-transform: uppercase; letter-spacing: 1.6px; color: var(--ctc-gold); line-height: 1.2; }
.sidebar nav { flex: 1; overflow-y: auto; padding: .8rem 0 1.5rem; scrollbar-width: thin; scrollbar-color: #333 transparent; }
.sidebar .sec { font-size: .62rem; text-transform: uppercase; letter-spacing: 1.5px; color: #6c6c6c; padding: 1.1rem 1.4rem .4rem; }
.sidebar a.item { display: flex; align-items: center; gap: .75rem; padding: .52rem 1.4rem; color: #c4c4c4; font-size: .83rem; border-left: 3px solid transparent; transition: all var(--ease); }
.sidebar a.item i { font-size: 1rem; width: 1.1rem; text-align: center; color: #8f8f8f; transition: color var(--ease); }
.sidebar a.item:hover { color: #fff; background: rgba(255, 255, 255, .03); }
.sidebar a.item:hover i { color: var(--ctc-blue-light); }
.sidebar a.item.active { color: #fff; border-left-color: var(--ctc-blue); background: rgba(0, 158, 229, .08); }
.sidebar a.item.active i { color: var(--ctc-blue); }
.sidebar .foot { padding: .9rem 1.4rem; border-top: 1px solid rgba(255, 255, 255, .06); font-size: .68rem; color: #777; display: flex; align-items: center; gap: .4rem; }
.sidebar .foot img { height: 15px; filter: invert(1) grayscale(1) brightness(1.6); opacity: .75; transition: opacity var(--ease); }
.sidebar .foot a:hover img { opacity: 1; }

.main { flex: 1; margin-left: var(--sidebar-w); min-width: 0; display: flex; flex-direction: column; }
.topbar { height: var(--topbar-h); background: #fff; border-bottom: 1px solid var(--ctc-line); display: flex; align-items: center; gap: .75rem; padding: 0 1.5rem; position: sticky; top: 0; z-index: 1030; }
.topbar .search { position: relative; max-width: 420px; flex: 1; }
.topbar .search input { padding-left: 2.2rem; background: var(--ctc-bg); border-color: transparent; }
.topbar .search input:focus { background: #fff; }
.topbar .search > i { position: absolute; left: .8rem; top: 50%; transform: translateY(-50%); color: var(--ctc-muted); }
.topbar .search .results { position: absolute; top: calc(100% + 4px); left: 0; right: 0; background: #fff; box-shadow: 0 12px 30px rgba(0, 0, 0, .12); max-height: 420px; overflow: auto; z-index: 10; }
.topbar .search .results a { display: flex; gap: .7rem; padding: .55rem .9rem; color: var(--ctc-text); border-bottom: 1px solid #f3f3f3; }
.topbar .search .results a:hover, .topbar .search .results a.active { background: var(--ctc-bg-alt); }
.topbar .tb-btn { position: relative; width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; color: #555; border: 0; background: transparent; font-size: 1.15rem; transition: color var(--ease); }
.topbar .tb-btn:hover { color: var(--ctc-blue); }
.topbar .tb-btn .dot { position: absolute; top: 5px; right: 4px; min-width: 16px; height: 16px; border-radius: 8px; background: var(--ctc-gold); color: #000; font-size: .6rem; font-weight: 600; display: flex; align-items: center; justify-content: center; padding: 0 4px; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: var(--ctc-bg-alt); color: var(--ctc-blue-text); display: inline-flex; align-items: center; justify-content: center; font-weight: 600; font-size: .8rem; object-fit: cover; flex-shrink: 0; }
.avatar-sm { width: 26px; height: 26px; font-size: .65rem; }
.avatar-lg { width: 72px; height: 72px; font-size: 1.4rem; }

.content { padding: 1.75rem 1.75rem 2rem; flex: 1; }
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem; flex-wrap: wrap; margin-bottom: 1.4rem; }
.page-head h1 { font-size: 1.45rem; margin: 0; }
.page-head .crumbs { font-size: .72rem; color: var(--ctc-muted); text-transform: uppercase; letter-spacing: 1px; margin-bottom: .25rem; }
.page-head .crumbs a { color: var(--ctc-muted); }
.page-head .crumbs a:hover { color: var(--ctc-blue); }
.page-head h1::after { content: ""; display: block; width: 34px; height: 3px; background: var(--ctc-blue); margin-top: .45rem; }
.page-head .actions { display: flex; gap: .5rem; flex-wrap: wrap; }

.app-footer { padding: 1rem 5.5rem 1rem 1.75rem; font-size: .72rem; color: var(--ctc-muted); display: flex; justify-content: space-between; align-items: center; border-top: 1px solid var(--ctc-line); background: #fff; }
.app-footer .oi { display: inline-flex; align-items: center; gap: .4rem; color: var(--ctc-muted); }
.app-footer .oi img { height: 16px; opacity: .85; transition: opacity var(--ease); }
.app-footer .oi:hover img { opacity: 1; }

/* ---------- Cartões ---------- */
.card { border: 1px solid var(--ctc-line); border-radius: 0; box-shadow: none; --bs-card-cap-bg: #fff; }
.card-header { background: #fff; border-bottom: 1px solid var(--ctc-line); padding: .9rem 1.2rem; display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.card-header h2, .card-header h3, .card-header .title { font-size: .8rem; text-transform: uppercase; letter-spacing: 1px; margin: 0; font-weight: 600; color: var(--ctc-head); }
.card-body { padding: 1.2rem; }
.card-hover { transition: box-shadow var(--ease), transform var(--ease); }
.card-hover:hover { box-shadow: var(--shadow); transform: translateY(-1px); }

.kpi { background: #fff; border: 1px solid var(--ctc-line); padding: 1.1rem 1.2rem; position: relative; height: 100%; }
.kpi::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--kpi-color, var(--ctc-blue)); }
.kpi .lbl { font-size: .68rem; text-transform: uppercase; letter-spacing: 1px; color: var(--ctc-muted); }
.kpi .val { font-size: 1.65rem; font-weight: 600; color: var(--ctc-head); line-height: 1.2; margin-top: .3rem; }
.kpi .sub { font-size: .75rem; color: var(--ctc-muted); margin-top: .2rem; }
.kpi .ico { position: absolute; right: 1rem; top: 1rem; font-size: 1.4rem; color: #d9dde0; }
.kpi.gold { --kpi-color: var(--ctc-gold); }
.kpi.dark { --kpi-color: var(--ctc-black); }
.kpi.navy { --kpi-color: var(--ctc-navy); }
.kpi.green { --kpi-color: #2e9d6a; }
.kpi.red { --kpi-color: #d0453b; }

/* ---------- Tabelas ---------- */
.table { --bs-table-hover-bg: #f6fafc; margin: 0; font-size: .84rem; }
.table > thead th { font-size: .68rem; text-transform: uppercase; letter-spacing: .8px; color: #777; font-weight: 600; background: #fafafa; border-bottom: 1px solid var(--ctc-line); padding: .7rem .8rem; white-space: nowrap; }
.table > tbody td { padding: .65rem .8rem; vertical-align: middle; border-color: #f1f1f1; }
.table th.sortable { cursor: pointer; user-select: none; }
.table th.sortable:hover { color: var(--ctc-blue); }
.table th .sort { font-size: .65rem; margin-left: .25rem; color: var(--ctc-blue); }
.table tr.clickable { cursor: pointer; }
.table td.actions { white-space: nowrap; text-align: right; width: 1%; }
.table-wrap { overflow-x: auto; }
.list-toolbar { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; padding: .8rem 1rem; border-bottom: 1px solid var(--ctc-line); background: #fff; }
.list-toolbar .grow { flex: 1; min-width: 180px; }
.list-foot { display: flex; justify-content: space-between; align-items: center; padding: .7rem 1rem; border-top: 1px solid var(--ctc-line); font-size: .78rem; color: var(--ctc-muted); flex-wrap: wrap; gap: .5rem; }
.pagination { --bs-pagination-border-radius: 0; --bs-pagination-font-size: .8rem; --bs-pagination-active-bg: var(--ctc-blue); --bs-pagination-active-border-color: var(--ctc-blue); --bs-pagination-color: var(--ctc-text); margin: 0; }
.empty { text-align: center; padding: 3rem 1rem; color: var(--ctc-muted); }
.empty i { font-size: 2.2rem; display: block; margin-bottom: .6rem; color: #d5d5d5; }

/* ---------- Badges, estados ---------- */
.badge { font-weight: 500; letter-spacing: .3px; border-radius: 0; padding: .35em .6em; }
.badge-soft { background: var(--ctc-bg-alt); color: var(--ctc-blue-text); }
.badge-gold { background: #f6f0d8; color: var(--ctc-gold-text); }
.badge-ok { background: #e3f4ea; color: #1f7a4f; }
.badge-warn { background: #fdf2dc; color: #93620b; }
.badge-bad { background: #fbe5e3; color: #a8332b; }
.badge-grey { background: #efefef; color: #666; }
.dot-color { display: inline-block; width: 10px; height: 10px; border-radius: 50%; vertical-align: middle; margin-right: .35rem; }

/* ---------- Detalhe ---------- */
.dl-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem 1.5rem; }
.dl-grid .k { font-size: .68rem; text-transform: uppercase; letter-spacing: .8px; color: var(--ctc-muted); }
.dl-grid .v { color: var(--ctc-head); word-break: break-word; }
.nav-tabs { --bs-nav-tabs-border-radius: 0; --bs-nav-link-color: var(--ctc-text); --bs-nav-link-hover-color: var(--ctc-blue); --bs-nav-tabs-link-active-color: var(--ctc-head); border-bottom-color: var(--ctc-line); }
.nav-tabs .nav-link { font-size: .8rem; font-weight: 500; border: 0; border-bottom: 2px solid transparent; padding: .7rem 1rem; }
.nav-tabs .nav-link.active { border-bottom-color: var(--ctc-blue); background: transparent; }
.timeline { list-style: none; padding: 0; margin: 0; }
.timeline li { position: relative; padding: 0 0 1rem 1.4rem; border-left: 1px solid var(--ctc-line); margin-left: .4rem; }
.timeline li::before { content: ""; position: absolute; left: -5px; top: .3rem; width: 9px; height: 9px; background: var(--ctc-blue); border-radius: 50%; }
.timeline .when { font-size: .72rem; color: var(--ctc-muted); }
.files { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: .6rem; }
.files .f { border: 1px solid var(--ctc-line); padding: .6rem .7rem; display: flex; gap: .6rem; align-items: center; background: #fff; font-size: .8rem; }
.files .f i { font-size: 1.4rem; color: var(--ctc-blue); }
.dropzone { border: 1px dashed #cfd6db; padding: 1.2rem; text-align: center; color: var(--ctc-muted); cursor: pointer; transition: all var(--ease); background: #fbfcfd; }
.dropzone.over, .dropzone:hover { border-color: var(--ctc-blue); color: var(--ctc-blue-text); background: var(--ctc-bg-alt); }

/* ---------- Modais, toasts, dropdowns ---------- */
.modal-content { border-radius: 0; border: 0; box-shadow: 0 20px 50px rgba(0, 0, 0, .18); }
.modal-header { border-bottom: 1px solid var(--ctc-line); padding: 1rem 1.4rem; }
.modal-title { font-size: 1rem; font-weight: 600; }
.modal-body { padding: 1.4rem; }
.modal-footer { border-top: 1px solid var(--ctc-line); padding: .8rem 1.4rem; }
.dropdown-menu { border-radius: 0; border-color: var(--ctc-line); box-shadow: 0 12px 30px rgba(0, 0, 0, .1); font-size: .84rem; padding: .35rem 0; }
.dropdown-item { padding: .45rem 1rem; }
.dropdown-item:active { background: var(--ctc-blue); }
.toast-stack { position: fixed; right: 1.2rem; bottom: 1.2rem; z-index: 2000; display: flex; flex-direction: column; gap: .5rem; }
.toast-x { background: var(--ctc-black); color: #fff; padding: .75rem 1rem; min-width: 260px; max-width: 380px; font-size: .84rem; box-shadow: 0 10px 30px rgba(0, 0, 0, .25); display: flex; gap: .6rem; align-items: flex-start; border-left: 3px solid var(--ctc-blue); animation: tin .25s ease; }
.toast-x.ok { border-left-color: #3cb87c; }
.toast-x.err { border-left-color: #e0574d; }
.toast-x.warn { border-left-color: var(--ctc-gold); }
@keyframes tin { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.notif-list { width: 360px; max-height: 460px; overflow: auto; }
.notif-list .n { display: block; padding: .7rem 1rem; border-bottom: 1px solid #f2f2f2; color: var(--ctc-text); }
.notif-list .n.unread { background: #f5fafd; }
.notif-list .n .t { font-weight: 500; color: var(--ctc-head); font-size: .83rem; }
.notif-list .n .w { font-size: .7rem; color: var(--ctc-muted); }

/* ---------- Multi-select simples ---------- */
.ms { position: relative; }
.ms .chips { display: flex; flex-wrap: wrap; gap: .3rem; min-height: 38px; padding: .3rem .4rem; border: 1px solid #dcdcdc; background: #fff; cursor: text; }
.ms .chip { background: var(--ctc-bg-alt); color: var(--ctc-blue-text); padding: .15rem .5rem; font-size: .78rem; display: inline-flex; gap: .3rem; align-items: center; }
.ms .chip button { border: 0; background: none; padding: 0; color: inherit; line-height: 1; }
.ms input { border: 0; outline: 0; flex: 1; min-width: 80px; font-size: .85rem; }
.ms .opts { position: absolute; left: 0; right: 0; top: 100%; background: #fff; border: 1px solid var(--ctc-line); max-height: 240px; overflow: auto; z-index: 20; box-shadow: var(--shadow); }
.ms .opts div { padding: .4rem .7rem; cursor: pointer; font-size: .84rem; }
.ms .opts div:hover { background: var(--ctc-bg-alt); }

/* ---------- Matriz de permissões ---------- */
.perm-mod { border: 1px solid var(--ctc-line); background: #fff; margin-bottom: .6rem; }
.perm-mod .h { display: flex; justify-content: space-between; align-items: center; padding: .6rem .9rem; background: #fafafa; border-bottom: 1px solid var(--ctc-line); font-weight: 500; }
.perm-mod .b { padding: .6rem .9rem; display: flex; flex-wrap: wrap; gap: .4rem 1.4rem; }

/* ---------- Login ---------- */
.auth { min-height: 100vh; display: grid; grid-template-columns: 1.1fr 1fr; }
.auth .art { background: linear-gradient(rgba(0, 50, 102, .82), rgba(25, 25, 25, .92)), var(--ctc-black); color: #fff; padding: 3rem; display: flex; flex-direction: column; justify-content: space-between; position: relative; overflow: hidden; }
.auth .art::after { content: ""; position: absolute; right: -120px; bottom: -120px; width: 420px; height: 420px; border: 1px solid rgba(197, 172, 58, .35); transform: rotate(45deg); }
.auth .art img { height: 52px; align-self: flex-start; }
.auth .art h2 { color: #fff; font-weight: 300; font-size: 2.1rem; line-height: 1.25; max-width: 420px; }
.auth .art h2 b { font-weight: 600; color: var(--ctc-blue-light); }
.auth .art .tag { color: var(--ctc-gold); text-transform: uppercase; letter-spacing: 3px; font-size: .7rem; }
.auth .panel { display: flex; align-items: center; justify-content: center; padding: 2rem; background: #fff; }
.auth form { width: 100%; max-width: 360px; }
.auth h1 { font-size: 1.5rem; margin-bottom: .3rem; }
.auth .lead { color: var(--ctc-muted); font-size: .9rem; margin-bottom: 1.8rem; }
.auth .oi { margin-top: 2.5rem; font-size: .72rem; color: var(--ctc-muted); display: flex; align-items: center; gap: .4rem; }
.auth .oi img { height: 16px; }

/* ---------- Assistente IA ---------- */
.ai-fab { position: fixed; right: 1.4rem; bottom: 1.4rem; width: 52px; height: 52px; border-radius: 50%; background: var(--ctc-black); color: var(--ctc-gold); border: 0; box-shadow: 0 10px 25px rgba(0, 0, 0, .25); z-index: 1050; font-size: 1.35rem; transition: transform var(--ease), background var(--ease); }
.ai-fab:hover { transform: scale(1.06); background: var(--ctc-blue); color: #fff; }
.ai-panel { position: fixed; right: 1.4rem; bottom: 5.2rem; width: 420px; max-width: calc(100vw - 2rem); height: 600px; max-height: calc(100vh - 7rem); background: #fff; box-shadow: 0 25px 60px rgba(0, 0, 0, .22); z-index: 1050; display: flex; flex-direction: column; animation: tin .25s ease; }
.ai-panel .h { background: var(--ctc-black); color: #fff; padding: .85rem 1rem; display: flex; align-items: center; gap: .6rem; border-bottom: 2px solid var(--ctc-gold); }
.ai-panel .h .t { font-weight: 500; font-size: .9rem; flex: 1; }
.ai-panel .h button { color: #bbb; background: none; border: 0; }
.ai-panel .h button:hover { color: #fff; }
.ai-msgs { flex: 1; overflow-y: auto; padding: 1rem; background: var(--ctc-bg); display: flex; flex-direction: column; gap: .7rem; }
.ai-msg { max-width: 88%; padding: .65rem .85rem; font-size: .84rem; line-height: 1.55; word-wrap: break-word; }
.ai-msg.user { align-self: flex-end; background: var(--ctc-blue); color: #fff; }
.ai-msg.assistant { align-self: flex-start; background: #fff; border: 1px solid var(--ctc-line); }
.ai-msg.assistant p:last-child { margin-bottom: 0; }
.ai-msg.assistant table { font-size: .78rem; margin: .4rem 0; }
.ai-msg.assistant table td, .ai-msg.assistant table th { border: 1px solid #eee; padding: .2rem .4rem; }
.ai-msg .tools { font-size: .68rem; color: var(--ctc-muted); margin-top: .4rem; }
.ai-input { display: flex; gap: .5rem; padding: .7rem; border-top: 1px solid var(--ctc-line); }
.ai-input textarea { resize: none; height: 42px; max-height: 120px; }
.ai-panel { transition: width .25s ease, height .25s ease; }
.ai-panel.wide { width: 640px; height: 760px; }
.ai-quote { border-left: 3px solid var(--ctc-gold); background: #faf8f0; margin: .4rem 0; padding: .45rem .7rem; color: #444; font-size: .8rem; }
.ai-files { align-self: stretch; display: flex; flex-direction: column; gap: .5rem; margin-top: -.25rem; }
.ai-file { display: flex; flex-wrap: wrap; gap: .7rem; align-items: flex-start; background: #fff; border: 1px solid var(--ctc-line); border-left: 3px solid var(--ctc-blue); padding: .7rem .8rem; box-shadow: 0 4px 14px rgba(0, 0, 0, .05); }
.ai-file .ic { width: 38px; height: 38px; flex: 0 0 38px; display: flex; align-items: center; justify-content: center; background: #eaf6fd; color: var(--ctc-blue); font-size: 1.2rem; }
.ai-file .tx { flex: 1 1 200px; min-width: 0; }
.ai-file .t { font-weight: 600; font-size: .85rem; color: var(--ctc-text); }
.ai-file .s { font-size: .72rem; color: var(--ctc-muted); overflow: hidden; text-overflow: ellipsis; }
.ai-file .bt { flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: .35rem; }
.ai-file .bt .btn { font-size: .72rem; padding: .25rem .55rem; }
.ai-suggest { display: flex; flex-wrap: wrap; gap: .35rem; }
.ai-suggest button { font-size: .74rem; border: 1px solid var(--ctc-line); background: #fff; padding: .3rem .6rem; color: var(--ctc-text); }
.ai-suggest button:hover { border-color: var(--ctc-blue); color: var(--ctc-blue-text); }
.typing span { display: inline-block; width: 6px; height: 6px; background: #bbb; border-radius: 50%; margin-right: 3px; animation: blink 1.2s infinite; }
.typing span:nth-child(2) { animation-delay: .2s; } .typing span:nth-child(3) { animation-delay: .4s; }
@keyframes blink { 0%, 80%, 100% { opacity: .2; } 40% { opacity: 1; } }

/* ---------- Agenda (FullCalendar) ---------- */
.fc { --fc-border-color: var(--ctc-line); --fc-button-bg-color: #fff; --fc-button-border-color: #dcdcdc; --fc-button-text-color: var(--ctc-text); --fc-button-hover-bg-color: var(--ctc-bg-alt); --fc-button-hover-border-color: #cfd6db; --fc-button-active-bg-color: var(--ctc-black); --fc-button-active-border-color: var(--ctc-black); --fc-today-bg-color: rgba(0, 158, 229, .06); --fc-event-bg-color: var(--ctc-blue); --fc-event-border-color: var(--ctc-blue); font-size: .8rem; }
.fc .fc-button { border-radius: 0 !important; text-transform: capitalize; font-size: .8rem; padding: .35rem .75rem; }
.fc .fc-button-primary:not(:disabled).fc-button-active { color: #fff; }
.fc .fc-toolbar-title { font-size: 1.1rem; font-weight: 600; text-transform: capitalize; }
.fc .fc-col-header-cell-cushion { text-transform: uppercase; font-size: .68rem; letter-spacing: .8px; color: #777; font-weight: 600; }
.fc-event { border-radius: 0; padding: 1px 3px; cursor: pointer; }

/* ---------- Assinatura ---------- */
.sign-pad { border: 1px dashed #bbb; background: #fff; touch-action: none; width: 100%; height: 180px; cursor: crosshair; }

/* ---------- Utilitários ---------- */
.text-blue { color: var(--ctc-blue-text) !important; }
.text-gold { color: var(--ctc-gold-text) !important; }
.bg-ctc-dark { background: var(--ctc-black) !important; color: #fff; }
.fw-500 { font-weight: 500; }
.small-caps { font-size: .68rem; text-transform: uppercase; letter-spacing: 1px; color: var(--ctc-muted); }
.chart-box { position: relative; height: 280px; }
.chart-box.tall { height: 360px; }
.progress { border-radius: 0; height: 6px; background: #eee; }
.progress-bar { background: var(--ctc-blue); }
.cursor-pointer { cursor: pointer; }
.min-w-0 { min-width: 0; }
.backdrop { position: fixed; inset: 0; background: rgba(0, 0, 0, .4); z-index: 1035; display: none; }

/* ---------- Responsivo ---------- */
@media (max-width: 991.98px) {
  .sidebar { transform: translateX(-100%); }
  .sidebar.open { transform: none; }
  .sidebar.open ~ .backdrop { display: block; }
  .main { margin-left: 0; }
  .content { padding: 1.1rem 1rem 1.5rem; }
  .topbar { padding: 0 1rem; }
  .auth { grid-template-columns: 1fr; }
  .auth .art { display: none; }
  .app-footer { padding: .8rem 1rem; flex-direction: column; gap: .3rem; }
}

/* ---------- TV / ecrã de parede ---------- */
body.tv { background: var(--ctc-black); color: #ddd; }
body.tv .kpi { background: var(--ctc-dark); border-color: #333; }
body.tv .kpi .val { color: #fff; }

@media print {
  .sidebar, .topbar, .app-footer, .ai-fab, .ai-panel, .page-head .actions, .list-toolbar, .list-foot { display: none !important; }
  .main { margin: 0; }
  .content { padding: 0; }
  body { background: #fff; }
}

/* ==========================================================================
   Estilos dos módulos (antes injetados por JavaScript)
   ========================================================================== */

/* ---------- Agenda ---------- */
.ag-wrap{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:1.5rem}
  @media(max-width:1199px){.ag-wrap{grid-template-columns:minmax(0,1fr)}}
  .ag-cal{padding:1.1rem 1.2rem}
  .ag-side .card+.card{margin-top:1.25rem}
  .ag-user{display:flex;align-items:center;gap:.55rem;padding:.32rem 0;font-size:.82rem;cursor:pointer;user-select:none}
  .ag-user input{margin:0}
  .ag-sw{width:10px;height:10px;display:inline-block;flex:0 0 10px}
  .ag-next{display:flex;gap:.7rem;padding:.6rem 0;border-bottom:1px solid var(--ctc-line);text-decoration:none;color:inherit}
  .ag-next:last-child{border-bottom:0}
  .ag-next .d{width:42px;flex:0 0 42px;text-align:center;line-height:1.1}
  .ag-next .d b{display:block;font-size:1.05rem;color:var(--ctc-head)}
  .ag-next .d span{font-size:.62rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ctc-muted)}
  .ag-next .t{min-width:0;border-left:3px solid var(--c,#009ee5);padding-left:.6rem}
  .ag-next .t div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ag-legend{display:flex;flex-wrap:wrap;gap:.4rem 1rem;font-size:.72rem;color:var(--ctc-muted)}
  .ag-legend span{display:inline-flex;align-items:center;gap:.35rem}
  .fc .fc-toolbar-title{text-transform:none}.fc .fc-toolbar-title::first-letter{text-transform:uppercase}
  .fc .fc-daygrid-event{font-size:.74rem}
  .fc .fc-event.ag-ev{border-width:0 0 0 3px;background:color-mix(in srgb,var(--c) 14%,#fff);color:#222}
  .fc .fc-event.ag-ev .fc-event-main{color:#222}
  .fc .fc-daygrid-dot-event.ag-ev{background:transparent}
  .fc .fc-event.ag-ro{opacity:.92}
  .fc .fc-event.ag-ferias{background:#f6f1dc;border-color:#c5ac3a;color:#6b5a14}
  .fc .fc-event.ag-ferias .fc-event-main{color:#6b5a14}
  .fc .fc-bg-event.ag-feriado{background:#eceae0;opacity:1}
  .fc .fc-bg-event.ag-feriado .fc-event-title{font-size:.66rem;color:#857020;font-style:normal;margin:.15rem .3rem;text-transform:uppercase;letter-spacing:.4px}
  .fc .fc-list-event.ag-ev td{background:#fff}
  .fc .fc-timegrid-event.ag-ev{border-left-width:3px}
  .ag-swatches{display:flex;gap:.35rem;flex-wrap:wrap}
  .ag-swatches button{width:24px;height:24px;border:2px solid #fff;outline:1px solid var(--ctc-line);padding:0}
  .ag-swatches button.on{outline:2px solid var(--ctc-black)}
  .ag-detail .row-i{display:flex;gap:.75rem;padding:.45rem 0;font-size:.86rem}
  .ag-detail .row-i i{color:var(--ctc-muted);width:18px}
  .ag-pp{display:flex;flex-wrap:wrap;gap:.35rem}
  .ag-pp span{display:inline-flex;align-items:center;gap:.35rem;font-size:.78rem;background:var(--ctc-bg-alt);padding:.15rem .5rem .15rem .2rem}

/* ---------- Férias ---------- */
.fe-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1rem}
  @media(max-width:991px){.fe-kpis{grid-template-columns:repeat(2,1fr)}}
  .fe-kpis .kpi.hl{border-top:3px solid var(--ctc-gold)}
  .fe-st{display:inline-flex;align-items:center;gap:.35rem}
  .fe-map-wrap{overflow:auto;max-width:100%}
  table.fe-map{border-collapse:separate;border-spacing:0;font-size:.74rem;width:100%}
  .fe-map th,.fe-map td{border-bottom:1px solid #eee;border-right:1px solid #f2f2f2;padding:0;text-align:center;height:34px;min-width:28px}
  .fe-map thead th{position:sticky;top:0;background:#fff;z-index:2;font-weight:500;color:var(--ctc-muted);height:auto;padding:.35rem 0;line-height:1.15}
  .fe-map thead th b{display:block;color:var(--ctc-head);font-size:.8rem;font-weight:600}
  .fe-map thead th.we b,.fe-map thead th.hol b{color:#aaa}
  .fe-map thead th.today{background:var(--ctc-black);color:#fff}.fe-map thead th.today b{color:#fff}
  .fe-map th.u,.fe-map td.u{position:sticky;left:0;background:#fff;z-index:1;text-align:left;padding:0 .75rem;min-width:210px;max-width:210px;border-right:1px solid var(--ctc-line)}
  .fe-map thead th.u{z-index:3}
  .fe-map td.u .n{display:flex;align-items:center;gap:.5rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .fe-map td.u small{color:var(--ctc-muted);margin-left:auto;font-size:.68rem;white-space:nowrap}
  .fe-map td.d{cursor:pointer;position:relative}
  .fe-map td.d:hover{outline:1px solid var(--ctc-blue);outline-offset:-1px}
  .fe-map td.we{background:#f1f1f1;cursor:default}
  .fe-map td.hol{background:#efece0;cursor:default}
  .fe-map td.blk{background:repeating-linear-gradient(45deg,#fbe9e7,#fbe9e7 4px,#fff 4px,#fff 8px);cursor:not-allowed}
  .fe-map td.enc{background:#e6e6e6}
  .fe-map td.sel{background:rgba(0,158,229,.18)!important}
  .fe-map td .c{position:absolute;inset:5px 3px;display:flex;align-items:center;justify-content:center;font-size:.66rem;font-weight:600;color:#fff}
  .fe-map td .c.a{background:var(--uc,#2e9d6a)}
  .fe-map td .c.p{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--uc,#e8873a) 70%,#fff),color-mix(in srgb,var(--uc,#e8873a) 70%,#fff) 3px,#fff 3px,#fff 6px);border:1px dashed var(--uc,#e8873a);color:#444}
  .fe-map td .c.r{background:transparent;color:#d0453b;font-size:.8rem}
  .fe-map td .c.manha{inset:5px 50% 5px 3px}.fe-map td .c.tarde{inset:5px 3px 5px 50%}
  .fe-map tr.me td.u{font-weight:600}
  .fe-map tr:hover td.u{background:#fafcfd}
  .fe-legend{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;font-size:.74rem;color:var(--ctc-muted)}
  .fe-legend span{display:inline-flex;align-items:center;gap:.4rem}
  .fe-legend i.sw{width:14px;height:14px;display:inline-block}
  .fe-month-title{font-weight:600;color:var(--ctc-head);margin:1.4rem 0 .5rem;text-transform:capitalize}
  .fe-days{max-height:220px;overflow:auto}
  .fe-sim{background:var(--ctc-bg-alt);padding:.75rem 1rem;font-size:.84rem}
  .fe-sim.err{background:#fdecea;color:#a3271d}

/* ---------- Notas ---------- */
.nt-grid{columns:4 260px;column-gap:1.1rem}
  .nt-card{break-inside:avoid;margin:0 0 1.1rem;padding:1rem 1.1rem .8rem;background:var(--bg,#fff4c2);position:relative;box-shadow:0 1px 2px rgba(0,0,0,.05);cursor:pointer;transition:box-shadow .2s,transform .2s}
  .nt-card:hover{box-shadow:0 8px 18px rgba(0,0,0,.08);transform:translateY(-1px)}
  .nt-card .tt{font-weight:600;color:#111;margin-bottom:.35rem;padding-right:1.6rem}
  .nt-card .tx{white-space:pre-line;font-size:.84rem;color:#333;max-height:260px;overflow:hidden}
  .nt-card .ft{display:flex;align-items:center;gap:.5rem;margin-top:.8rem;font-size:.7rem;color:rgba(0,0,0,.5)}
  .nt-card .pin{position:absolute;top:.6rem;right:.6rem;border:0;background:transparent;color:rgba(0,0,0,.35);padding:.1rem .25rem}
  .nt-card .pin.on{color:#111}
  .nt-pills .btn.active{background:var(--ctc-black);color:#fff;border-color:var(--ctc-black)}
  .nt-colors{display:flex;gap:.4rem}
  .nt-colors button{width:28px;height:28px;border:1px solid rgba(0,0,0,.08);padding:0}
  .nt-colors button.on{outline:2px solid var(--ctc-black);outline-offset:1px}
  .nt-sec{font-size:.68rem;letter-spacing:1px;text-transform:uppercase;color:var(--ctc-muted);margin:0 0 .7rem}

/* ---------- Email ---------- */
.em-wrap{display:grid;grid-template-columns:220px minmax(0,1fr);gap:1rem}
  @media(max-width:991px){.em-wrap{grid-template-columns:1fr}}
  .em-nav a{display:flex;align-items:center;gap:.55rem;padding:.5rem .8rem;color:var(--ctc-text,#444);text-decoration:none;font-size:.88rem;border-left:3px solid transparent}
  .em-nav a:hover{background:var(--ctc-bg-alt)}
  .em-nav a.on{border-left-color:var(--ctc-blue);background:var(--ctc-bg-alt);font-weight:500}
  .em-nav a .n{margin-left:auto;font-size:.72rem;color:var(--ctc-muted)}
  .em-nav a .n.b{color:#fff;background:var(--ctc-blue);padding:0 .4rem}
  .em-nav .sec{font-size:.65rem;text-transform:uppercase;letter-spacing:1px;color:var(--ctc-muted);padding:.9rem .8rem .3rem}
  .em-list .it{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:.6rem;padding:.7rem 1rem;border-bottom:1px solid var(--ctc-line);cursor:pointer;align-items:start}
  .em-list .it:hover{background:#fafafa}
  .em-list .it.unread{background:#f3f9fd}
  .em-list .it.unread .s{font-weight:600;color:var(--ctc-head)}
  .em-list .who{font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .em-list .s{font-size:.88rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .em-list .ex{font-size:.78rem;color:var(--ctc-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .em-list .d{font-size:.75rem;color:var(--ctc-muted);white-space:nowrap;text-align:right}
  .em-head h2{font-size:1.15rem;font-weight:600;margin:0 0 .6rem;color:var(--ctc-head)}
  .em-meta{display:grid;grid-template-columns:70px minmax(0,1fr);gap:.2rem .6rem;font-size:.82rem}
  .em-meta .k{color:var(--ctc-muted)}
  .em-frame{width:100%;border:0;min-height:240px;display:block;background:#fff}
  .em-imgbar{background:#fff8e1;border:1px solid #f1e3b3;padding:.45rem .8rem;font-size:.8rem;display:flex;align-items:center;gap:.6rem;margin-bottom:.8rem}
  .em-att{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--ctc-line);padding:.35rem .6rem;font-size:.8rem;margin:0 .4rem .4rem 0;text-decoration:none;color:inherit}
  .em-att:hover{background:var(--ctc-bg-alt)}
  .em-quote{border-left:3px solid var(--ctc-line);padding-left:.8rem;color:var(--ctc-muted);font-size:.8rem;max-height:120px;overflow:auto}

/* ---------- Ponto ---------- */
.pt-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:0}
  @media(max-width:991px){.pt-hero{grid-template-columns:1fr}}
  .pt-clock{background:var(--ctc-black);color:#fff;padding:1.8rem 2rem;display:flex;flex-direction:column;justify-content:space-between;min-height:220px}
  .pt-clock .h{font-size:3rem;font-weight:300;letter-spacing:1px;line-height:1}
  .pt-clock .d{color:#aaa;font-size:.85rem;margin-top:.4rem}
  .pt-clock .d::first-letter{text-transform:uppercase}
  .pt-wk{display:flex;justify-content:space-between;font-size:.8rem;padding:.12rem 0}
  .pt-clock .st{display:inline-flex;align-items:center;gap:.5rem;font-size:.75rem;text-transform:uppercase;letter-spacing:1px;color:#ccc}
  .pt-clock .st i{width:9px;height:9px;display:inline-block;background:#777}
  .pt-clock .st.dentro i{background:#2e9d6a;box-shadow:0 0 0 4px rgba(46,157,106,.25)}
  .pt-clock .st.pausa i{background:#c5ac3a}
  .pt-acts{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1.2rem}
  .pt-acts .btn{padding:.65rem 1.2rem}
  .pt-today{padding:1.5rem 1.8rem;background:#fff}
  .pt-big{font-size:2rem;font-weight:600;color:var(--ctc-head);line-height:1}
  .pt-bar{height:6px;background:var(--ctc-bg-alt);margin:.8rem 0 1.2rem}
  .pt-bar span{display:block;height:100%;background:var(--ctc-blue)}
  .pt-tl{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:.4rem}
  .pt-tl li{font-size:.78rem;padding:.25rem .6rem;background:var(--ctc-bg-alt)}
  .pt-tl li b{font-weight:600;margin-right:.3rem}
  .pt-dbar{display:inline-block;height:6px;background:var(--ctc-blue);vertical-align:middle;min-width:2px}
  .pt-neg{color:#d0453b}.pt-pos{color:#2e9d6a}

/* ---------- Lembretes ---------- */
.lb-quick{display:flex;gap:.5rem;flex-wrap:wrap}
  .lb-quick .grow{flex:1 1 260px}
  .lb-item{display:flex;gap:.9rem;align-items:flex-start;padding:.9rem 1.1rem;border-bottom:1px solid var(--ctc-line);background:#fff}
  .lb-item:last-child{border-bottom:0}
  .lb-item .chk{width:22px;height:22px;border:1.5px solid #c9c9c9;background:#fff;flex:0 0 22px;display:flex;align-items:center;justify-content:center;margin-top:.1rem;color:#fff;padding:0}
  .lb-item .chk:hover{border-color:var(--ctc-gold)}
  .lb-item.done .chk{background:var(--ctc-gold);border-color:var(--ctc-gold)}
  .lb-item.done .tt{text-decoration:line-through;color:var(--ctc-muted)}
  .lb-item .when{font-size:.75rem;color:var(--ctc-muted)}
  .lb-item .when.late{color:#d0453b;font-weight:500}
  .lb-item .when.soon{color:var(--ctc-gold-text);font-weight:500}
  .lb-item .acts{margin-left:auto;display:flex;gap:.25rem;opacity:.55;transition:opacity .2s}
  .lb-item:hover .acts{opacity:1}
  .lb-group{font-size:.68rem;text-transform:uppercase;letter-spacing:1px;color:var(--ctc-muted);padding:.9rem 1.1rem .4rem;background:#fafafa;border-bottom:1px solid var(--ctc-line)}
  .lb-chips{display:flex;gap:.35rem;flex-wrap:wrap;margin-top:.5rem}
  .lb-chips button{font-size:.75rem}

/* ---------- Newsletters ---------- */
.nl-ed{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1rem;align-items:start}
  @media(max-width:1199px){.nl-ed{grid-template-columns:1fr}}
  .nl-prev{position:sticky;top:1rem}
  .nl-prev iframe{width:100%;height:72vh;border:1px solid var(--ctc-line);background:#f1f1f1;display:block}
  .nl-b{border:1px solid var(--ctc-line);background:#fff;margin-bottom:.6rem}
  .nl-b>.h{display:flex;align-items:center;gap:.4rem;padding:.4rem .6rem;border-bottom:1px solid var(--ctc-line);background:#fafafa;font-size:.72rem;text-transform:uppercase;letter-spacing:1px;color:var(--ctc-muted)}
  .nl-b>.h .btn{padding:.1rem .4rem}
  .nl-b>.c{padding:.7rem}
  .nl-b>.c .form-label{display:none}
  .nl-add{display:flex;flex-wrap:wrap;gap:.4rem}
  .nl-img{max-height:90px;max-width:100%;display:block;margin-top:.4rem;border:1px solid var(--ctc-line)}
  .nl-bar{height:8px;background:var(--ctc-bg-alt);display:flex}
  .nl-bar span{display:block;height:100%}

/* ---------- Mensagens ---------- */
.mg{display:grid;grid-template-columns:330px minmax(0,1fr);height:calc(100vh - 210px);min-height:480px;background:#fff;border:1px solid var(--ctc-line)}
  @media(max-width:991px){.mg{grid-template-columns:1fr;height:auto}.mg.open .mg-list{display:none}.mg:not(.open) .mg-thread{display:none}}
  .mg-list{border-right:1px solid var(--ctc-line);display:flex;flex-direction:column;min-height:0}
  .mg-list .top{padding:.8rem;border-bottom:1px solid var(--ctc-line);display:flex;gap:.5rem}
  .mg-convs{overflow:auto;flex:1}
  .mg-c{display:flex;gap:.7rem;padding:.8rem 1rem;border-bottom:1px solid #f3f3f3;cursor:pointer;text-decoration:none;color:inherit}
  .mg-c:hover{background:#fafcfd}.mg-c.on{background:var(--ctc-bg-alt)}
  .mg-c .min-w-0{flex:1}
  .mg-c .nm{display:flex;justify-content:space-between;gap:.5rem;font-size:.85rem}
  .mg-c .nm b{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mg-c .nm small{color:var(--ctc-muted);white-space:nowrap;font-size:.7rem}
  .mg-c .pv{font-size:.78rem;color:var(--ctc-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mg-c.unread .nm b{font-weight:700;color:#111}.mg-c.unread .pv{color:#333}
  .mg-c .ct{background:var(--ctc-blue);color:#fff;font-size:.65rem;min-width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;padding:0 .3rem;font-weight:600}
  .mg-gav{width:34px;height:34px;flex:0 0 34px;display:flex;align-items:center;justify-content:center;background:var(--ctc-black);color:#fff;font-size:.95rem}
  .mg-thread{display:flex;flex-direction:column;min-height:0}
  .mg-head{padding:.8rem 1.2rem;border-bottom:1px solid var(--ctc-line);display:flex;align-items:center;gap:.8rem}
  .mg-msgs{flex:1;overflow:auto;padding:1.2rem 1.4rem;background:#fbfbfc}
  .mg-day{text-align:center;font-size:.68rem;letter-spacing:1px;text-transform:uppercase;color:var(--ctc-muted);margin:1rem 0 .8rem}
  .mg-m{display:flex;gap:.6rem;margin-bottom:.55rem;max-width:78%}
  .mg-m.me{margin-left:auto;flex-direction:row-reverse}
  .mg-b{background:#fff;border:1px solid var(--ctc-line);padding:.55rem .8rem;font-size:.86rem;word-wrap:break-word;position:relative;min-width:90px}
  .mg-b .tx{white-space:pre-wrap}
  .mg-m.me .mg-b{background:#e6f5fc;border-color:#cde9f6}
  .mg-b .who{font-size:.7rem;font-weight:600;color:var(--ctc-blue-text);margin-bottom:.15rem}
  .mg-b .tm{font-size:.65rem;color:var(--ctc-muted);margin-top:.25rem;text-align:right}
  .mg-b .del{position:absolute;top:2px;left:-24px;border:0;background:transparent;color:#bbb;opacity:0;padding:0 .2rem}
  .mg-m:hover .del{opacity:1}
  .mg-files{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.4rem}
  .mg-files a{display:inline-flex;align-items:center;gap:.35rem;font-size:.75rem;background:rgba(0,0,0,.04);padding:.25rem .5rem;text-decoration:none}
  .mg-files img{max-width:220px;max-height:160px;display:block;border:1px solid var(--ctc-line)}
  .mg-comp{border-top:1px solid var(--ctc-line);padding:.8rem;display:flex;gap:.5rem;align-items:flex-end;background:#fff}
  .mg-comp textarea{resize:none;max-height:160px}
  .mg-att{font-size:.74rem;color:var(--ctc-muted);padding:0 .8rem .5rem;background:#fff}
  .mg-empty{flex:1;display:flex;align-items:center;justify-content:center;flex-direction:column;color:var(--ctc-muted)}
  .mg-empty i{font-size:2.4rem;margin-bottom:.6rem;color:#ccc}
  .mg-badge{margin-left:auto;background:var(--ctc-blue);color:#fff;font-size:.62rem;padding:.05rem .4rem;font-weight:600}

/* ---------- Viaturas ---------- */
.vt-hero{background:var(--ctc-black);color:#fff;padding:1.5rem 1.6rem;display:flex;flex-wrap:wrap;gap:1.2rem;align-items:center;justify-content:space-between}
  .vt-plate{display:inline-block;border:2px solid #fff;padding:.25rem .8rem;font-weight:600;letter-spacing:2px;font-size:1.35rem}
  .vt-hero .sub{color:#aaa;font-size:.85rem;margin-top:.35rem}
  .vt-hero .km{font-size:2rem;font-weight:300;line-height:1}
  .vt-hero .km small{font-size:.75rem;color:#aaa;letter-spacing:1px;text-transform:uppercase;display:block;margin-top:.3rem}
  .vt-ponto{display:flex;flex-wrap:wrap;gap:1rem;align-items:center;justify-content:space-between}
  .vt-st{display:inline-flex;align-items:center;gap:.5rem;font-size:.75rem;text-transform:uppercase;letter-spacing:1px;color:var(--ctc-muted)}
  .vt-st i{width:9px;height:9px;display:inline-block;background:#bbb}
  .vt-st.on i{background:#2e9d6a;box-shadow:0 0 0 4px rgba(46,157,106,.2)}
  .vt-km{max-width:180px}
  .vt-acts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.5rem}
  .vt-acts .btn{text-align:left;padding:.7rem .9rem}
  .vt-acts .btn i{margin-right:.4rem;color:var(--ctc-blue)}
  .vt-al{display:flex;align-items:center;gap:.6rem;padding:.55rem 0;border-bottom:1px solid var(--ctc-line);font-size:.88rem}
  .vt-al:last-child{border-bottom:0}
  .vt-al i{font-size:1.1rem}
  .vt-al .w{color:#c5ac3a}.vt-al .x{color:#d0453b}
  .vt-code{font-size:2.6rem;letter-spacing:.5rem;font-weight:600;text-align:center;padding:1rem;background:var(--ctc-bg-alt);font-family:ui-monospace,monospace}
  .vt-codein{font-size:1.6rem;letter-spacing:.4rem;text-transform:uppercase;text-align:center;font-family:ui-monospace,monospace}
  .vt-chips{display:flex;flex-wrap:wrap;gap:.25rem}
  .vt-map{width:100%;height:340px;background:#f6f8f9;border:1px solid var(--ctc-line)}
  .vt-pos{display:flex;gap:.9rem;align-items:flex-start}
  .vt-pos .dot{width:10px;height:10px;margin-top:.45rem;flex:none}
  .vt-steps li{margin-bottom:.35rem}
  .vt-files .f{display:flex;align-items:center;gap:.6rem;padding:.4rem 0;border-bottom:1px solid var(--ctc-line)}

/* ---------- Comercial (clientes, visitas, contratos, eventos, portal) ---------- */
.cm-opts{position:absolute;left:0;right:0;top:100%;background:#fff;border:1px solid var(--ctc-line);max-height:260px;overflow:auto;z-index:30;box-shadow:var(--shadow)}
.cm-opts div{padding:.45rem .75rem;cursor:pointer;font-size:.84rem}.cm-opts div:hover{background:var(--ctc-bg-alt)}
.cm-head{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:1.25rem}
.cm-note{border:1px solid var(--ctc-line);border-left:4px solid var(--cm-note,#e9d36c);background:#fff;padding:.8rem 1rem;margin-bottom:.7rem}
.cm-note .meta{font-size:.72rem;color:var(--ctc-muted)}.cm-note .txt{white-space:pre-line;margin:.35rem 0 .2rem;color:var(--ctc-head)}
.cm-note .reply{border-top:1px dashed var(--ctc-line);margin-top:.6rem;padding-top:.5rem;padding-left:1rem}
.cm-swatch{width:22px;height:22px;border:2px solid #fff;outline:1px solid var(--ctc-line);display:inline-block;cursor:pointer}
.cm-swatch.on{outline:2px solid var(--ctc-head)}
.cm-visit{border:1px solid var(--ctc-line);border-top:3px solid var(--ctc-gold);background:#fff;padding:1.1rem 1.2rem;margin-bottom:1.25rem}
.cm-clock{font-size:2rem;font-weight:600;color:var(--ctc-head);font-variant-numeric:tabular-nums;letter-spacing:.5px;line-height:1}
.cm-live{display:inline-block;width:8px;height:8px;border-radius:50%;background:#d0453b;margin-right:.4rem;animation:blink 1.4s infinite}
.cm-pill{display:inline-flex;align-items:center;gap:.4rem;font-size:.75rem;padding:.3rem .7rem;background:#fdf6e0;color:var(--ctc-gold-text);border:1px solid #efe2b0;white-space:nowrap}
.cm-pill:hover{color:var(--ctc-head)}
.cm-map{background:linear-gradient(135deg,#eef3f6 25%,#f6f7f8 25%,#f6f7f8 50%,#eef3f6 50%,#eef3f6 75%,#f6f7f8 75%);background-size:28px 28px;height:150px;display:flex;align-items:center;justify-content:center;flex-direction:column;color:var(--ctc-blue-text);border:1px solid var(--ctc-line)}
.cm-map i{font-size:2rem;color:var(--ctc-blue)}
.cm-years{display:flex;flex-wrap:wrap;gap:.5rem}.cm-years .y{border:1px solid var(--ctc-line);padding:.45rem .8rem;background:#fff;font-size:.8rem;cursor:pointer}
.cm-years .y b{display:block;font-size:.95rem;color:var(--ctc-head)}.cm-years .y.on,.cm-years .y:hover{border-color:var(--ctc-blue)}
.cm-big-btn{min-width:200px}
.cm-portal-hero{background:var(--ctc-black);color:#ddd;padding:1.6rem 1.8rem;margin-bottom:1.5rem;border-bottom:3px solid var(--ctc-gold)}
.cm-portal-hero h2{color:#fff;font-weight:300;font-size:1.5rem;margin:0}.cm-portal-hero h2 b{font-weight:600;color:var(--ctc-blue-light)}
@media (max-width:575.98px){.cm-clock{font-size:1.6rem}}

/* ---------- Ficheiros (nuvem) ---------- */
.nv-tree{max-height:calc(100vh - 230px);overflow:auto;padding:.5rem 0}
.nv-tree a{display:flex;align-items:center;gap:.45rem;padding:.32rem .9rem;color:var(--ctc-text);font-size:.84rem;white-space:nowrap;border-left:2px solid transparent}
.nv-tree a:hover{background:var(--ctc-bg-alt)}
.nv-tree a.on{background:#f0f8fd;border-left-color:var(--ctc-blue);color:var(--ctc-head);font-weight:500}
.nv-tree a i{color:#e0b84c}.nv-tree a .bi-lock-fill{color:#aaa;font-size:.7rem}
.nv-tree .tg{width:14px;color:#aaa;font-size:.7rem;cursor:pointer;flex-shrink:0;text-align:center}
.nv-bar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding:.75rem 1rem;border-bottom:1px solid var(--ctc-line)}
.nv-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;font-size:.85rem;flex:1;min-width:200px}
.nv-crumbs a{color:var(--ctc-muted)}.nv-crumbs a:hover{color:var(--ctc-blue)}.nv-crumbs b{color:var(--ctc-head);font-weight:600}
.nv-zone{position:relative;min-height:340px;padding:1rem}
.nv-zone.over::after{content:"Largue os ficheiros para os carregar nesta pasta";position:absolute;inset:.5rem;border:2px dashed var(--ctc-blue);background:rgba(0,158,229,.06);display:flex;align-items:center;justify-content:center;color:var(--ctc-blue-text);font-weight:500;z-index:5}
.nv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.8rem}
.nv-it{position:relative;border:1px solid var(--ctc-line);background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s;user-select:none}
.nv-it:hover{border-color:#cfe3ee;box-shadow:0 4px 14px rgba(0,0,0,.05)}
.nv-it.sel{border-color:var(--ctc-blue);box-shadow:0 0 0 2px rgba(0,158,229,.18)}
.nv-it .pv{height:104px;display:flex;align-items:center;justify-content:center;background:#fafafa;overflow:hidden;border-bottom:1px solid var(--ctc-line)}
.nv-it .pv img{width:100%;height:100%;object-fit:cover}
.nv-it .pv i{font-size:2.6rem;color:#b9c3c9}
.nv-it.dir .pv i{color:#e0b84c;font-size:3rem}
.nv-it .nm{padding:.45rem .6rem;font-size:.8rem;color:var(--ctc-head);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nv-it .mt{padding:0 .6rem .45rem;font-size:.7rem;color:var(--ctc-muted)}
.nv-it .ck{position:absolute;top:.4rem;left:.4rem;z-index:2;opacity:0;transition:opacity .15s}
.nv-it:hover .ck,.nv-it.sel .ck,.nv-sel-on .nv-it .ck{opacity:1}
.nv-it .mn{position:absolute;top:.25rem;right:.25rem;z-index:2;opacity:0}
.nv-it:hover .mn{opacity:1}
.nv-it .mn .btn{padding:.1rem .35rem;background:#fff;border:1px solid var(--ctc-line)}
.nv-it .lk{position:absolute;top:.45rem;right:.5rem;color:#9aa;font-size:.75rem}
.nv-list td{vertical-align:middle}.nv-list .mn{position:static;opacity:1}.nv-list .mn .btn{border:0;background:transparent}
.nv-up{position:fixed;right:1.5rem;bottom:6rem;width:320px;background:#fff;border:1px solid var(--ctc-line);box-shadow:0 12px 40px rgba(0,0,0,.15);z-index:1060}
.nv-up .h{padding:.6rem .9rem;border-bottom:1px solid var(--ctc-line);font-size:.8rem;font-weight:600;display:flex;justify-content:space-between}
.nv-up .b{padding:.7rem .9rem}.nv-up .progress{height:6px;border-radius:0}
.nv-pv-img{max-width:100%;max-height:75vh;display:block;margin:0 auto}
.nv-pv-pdf{width:100%;height:75vh;border:0}

/* ---------- Produtos ---------- */
.prod-thumb{width:42px;height:42px;object-fit:contain;background:#fafafa;border:1px solid var(--ctc-line);display:inline-flex;align-items:center;justify-content:center;color:#c9c9c9}
.prod-img{border:1px solid var(--ctc-line);background:#fafafa;aspect-ratio:4/3;display:flex;align-items:center;justify-content:center;overflow:hidden}
.prod-img img{max-width:100%;max-height:100%;object-fit:contain}
.prod-img .ph{color:#cfcfcf;font-size:3rem}
.prod-price{font-size:1.9rem;font-weight:600;color:var(--ctc-head);line-height:1.1}
.prod-dot{display:inline-block;width:9px;height:9px;margin-right:.4rem;vertical-align:middle}

/* ---------- Orçamentos ---------- */
.orc-state{display:inline-flex;align-items:center;gap:.35rem;font-size:.72rem;font-weight:500;padding:.2rem .55rem;background:color-mix(in srgb,var(--c,#8a8a8a) 13%,#fff);color:color-mix(in srgb,var(--c,#8a8a8a) 75%,#000);white-space:nowrap}
.orc-state::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--c,#8a8a8a)}
.orc-ref{font-weight:600;color:var(--ctc-head);font-variant-numeric:tabular-nums}
.orc-lines{width:100%;border-collapse:collapse}
.orc-lines th{font-size:.66rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ctc-muted);font-weight:500;padding:.5rem .4rem;border-bottom:1px solid var(--ctc-line);white-space:nowrap}
.orc-lines td{padding:.45rem .25rem;border-bottom:1px solid #f2f2f2;vertical-align:top}
.orc-lines .form-control,.orc-lines .form-select{font-size:.82rem;padding:.3rem .45rem}
.orc-lines tr.sec td{background:var(--ctc-bg-alt)}
.orc-lines tr.sec input{font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:var(--ctc-blue-text);background:transparent;border-color:transparent}
.orc-lines tr.txt textarea{font-style:italic;background:#fcfcfc}
.orc-lines .num{width:80px;min-width:72px}.orc-lines .num-s{width:58px;min-width:54px}.orc-lines .ref input{width:90px;min-width:80px}.orc-lines .des{min-width:190px}
.orc-lines .tot{white-space:nowrap;font-weight:600;color:var(--ctc-head);text-align:right;padding-top:.75rem;min-width:96px}
.orc-lines .act{white-space:nowrap;width:1%}
.orc-lines .act .btn{padding:.1rem .2rem;color:#9a9a9a}.orc-lines .act .btn:hover{color:var(--ctc-head)}
.orc-lines .drag{color:#c4c4c4;font-size:.75rem;padding-top:.6rem;width:1%}
.orc-lines .det{font-size:.76rem;color:#666;margin-top:.3rem}
.orc-thumb{width:34px;height:34px;object-fit:contain;background:#fafafa;border:1px solid var(--ctc-line)}
.orc-add{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding:.9rem 1.2rem;border-top:1px solid var(--ctc-line);background:#fcfcfc}
.orc-search{position:relative;flex:1;min-width:260px;max-width:460px}
.orc-search .opts{position:absolute;left:0;right:0;top:100%;background:#fff;border:1px solid var(--ctc-line);box-shadow:0 12px 30px rgba(0,0,0,.08);z-index:40;max-height:340px;overflow:auto}
.orc-search .opt{display:flex;gap:.6rem;align-items:center;padding:.5rem .7rem;cursor:pointer;border-bottom:1px solid #f4f4f4}
.orc-search .opt:hover,.orc-search .opt.on{background:var(--ctc-bg-alt)}
.orc-search .opt .p{margin-left:auto;font-weight:600;color:var(--ctc-head);white-space:nowrap;font-size:.82rem}
.orc-sum{background:#fff;border:1px solid var(--ctc-line)}
.orc-sum .row-s{display:flex;justify-content:space-between;padding:.45rem 1.2rem;font-size:.84rem}
.orc-sum .row-s .k{color:var(--ctc-muted)}
.orc-sum .big{background:var(--ctc-black);color:#fff;padding:1rem 1.2rem;display:flex;justify-content:space-between;align-items:center;border-top:3px solid var(--ctc-gold)}
.orc-sum .big .k{font-size:.68rem;letter-spacing:1.2px;text-transform:uppercase;color:var(--ctc-gold)}
.orc-sum .big .v{font-size:1.5rem;font-weight:600}
.orc-sticky{position:sticky;top:calc(var(--topbar-h,64px) + 1rem)}
.orc-banner{display:flex;gap:.8rem;align-items:center;padding:.8rem 1.1rem;border:1px solid var(--ctc-line);border-left:3px solid var(--c,var(--ctc-blue));background:#fff;margin-bottom:1rem;font-size:.86rem}
.orc-banner i{font-size:1.2rem;color:var(--c,var(--ctc-blue))}
.orc-view td,.orc-view th{font-size:.84rem}
.orc-view .pn{font-weight:500;color:var(--ctc-head)}.orc-view .pr{font-size:.7rem;color:var(--ctc-blue-text);letter-spacing:.3px}
.orc-view .pd{font-size:.76rem;color:var(--ctc-muted);white-space:pre-line}
.orc-view tr.sec td{background:var(--ctc-bg-alt);font-size:.7rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ctc-blue-text);font-weight:600}
.orc-steps{list-style:none;margin:0;padding:0}
.orc-steps li{display:flex;gap:.7rem;padding:.55rem 0;border-bottom:1px dashed var(--ctc-line);font-size:.83rem}
.orc-steps li:last-child{border-bottom:0}
.orc-steps i{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;background:var(--ctc-bg-alt);color:var(--ctc-blue-text);flex-shrink:0;font-size:.8rem}
.orc-steps li.off{color:#b5b5b5}.orc-steps li.off i{background:#f6f6f6;color:#c9c9c9}
.orc-pub{min-height:100vh;background:linear-gradient(rgba(0,50,102,.88),rgba(25,25,25,.96)),#191919;padding:2.5rem 1rem}
.orc-pub-card{background:#fff;max-width:880px;margin:0 auto;box-shadow:0 25px 60px rgba(0,0,0,.35)}
.orc-pub-head{background:#191919;padding:1.1rem 1.6rem;display:flex;align-items:center;gap:.9rem;border-bottom:3px solid var(--ctc-gold)}
.orc-pub-head img{height:30px}.orc-pub-head span{color:#bbb;font-size:.72rem;text-transform:uppercase;letter-spacing:1.4px}
.orc-pub-body{padding:1.8rem 1.8rem 2rem}
.orc-pub-foot{text-align:center;color:#8aa;font-size:.72rem;margin-top:1.2rem;letter-spacing:.5px}
.orc-choice{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.orc-choice label{border:1px solid var(--ctc-line);padding:.8rem 1rem;cursor:pointer;display:flex;gap:.6rem;align-items:center;font-weight:500}
.orc-choice input{accent-color:var(--ctc-blue)}
.orc-choice label:has(input:checked){border-color:var(--ctc-blue);background:#f4fbff}
@media (max-width:767.98px){.orc-lines thead{display:none}.orc-lines tr{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.3rem;padding:.6rem 0;border-bottom:1px solid var(--ctc-line)}
.orc-lines td{border:0;padding:.1rem}.orc-lines td.wide{grid-column:1/-1}.orc-lines .drag{display:none}.orc-pub-body{padding:1.2rem}.orc-choice{grid-template-columns:1fr}}

/* ---------- Assistência técnica (at_comum) ---------- */
.at-cat{background:color-mix(in srgb,var(--c) 14%,#fff);color:color-mix(in srgb,var(--c) 80%,#000);border-left:3px solid var(--c)}
.at-chips{display:flex;flex-wrap:wrap;gap:.4rem}
.at-chip{position:relative;cursor:pointer;margin:0}
.at-chip input{position:absolute;opacity:0;pointer-events:none}
.at-chip span{display:inline-block;padding:.45rem .8rem;border:1px solid #dcdcdc;background:#fff;font-size:.82rem;border-left:3px solid var(--c);transition:all .2s}
.at-chip input:checked+span{background:color-mix(in srgb,var(--c) 14%,#fff);border-color:var(--c);color:#111;font-weight:500}
.at-chip input:focus-visible+span{outline:2px solid var(--ctc-blue)}
.at-picker .at-pk-ico{position:absolute;left:.75rem;top:50%;transform:translateY(-50%);color:#999;pointer-events:none}
.at-picker .at-pk-in{padding-left:2.1rem}
.at-pk-list{position:absolute;left:0;right:0;top:100%;z-index:1060;background:#fff;border:1px solid var(--ctc-line);box-shadow:0 12px 30px rgba(0,0,0,.12);max-height:300px;overflow:auto}
.at-pk-it{padding:.55rem .8rem;cursor:pointer;border-bottom:1px solid #f4f4f4;font-size:.85rem}
.at-pk-it small{display:block;color:#999}
.at-pk-it:hover,.at-pk-it.act{background:var(--ctc-bg-alt)}
.at-pk-none{padding:.6rem .8rem;color:#999;font-size:.82rem}
.at-date{width:54px;flex:0 0 54px;text-align:center;border:1px solid var(--ctc-line);background:#fff;padding:.25rem 0;line-height:1.15}
.at-date span{display:block;font-size:.62rem;text-transform:uppercase;letter-spacing:.6px;color:#888}
.at-date b{display:block;font-size:1.25rem;color:var(--ctc-head)}
.at-date.past{border-color:#f0c9c5}.at-date.past b{color:#a8332b}
.at-date.none b{color:#bbb}
.at-row{display:flex;gap:1rem;align-items:flex-start;padding:.9rem 1.1rem;border-bottom:1px solid #f1f1f1;transition:background .2s}
.at-row:last-child{border-bottom:0}
.at-row.link{cursor:pointer}.at-row.link:hover{background:#f8fbfd}
.at-row .main{flex:1;min-width:0;margin-left:0;display:block}
.at-row .t{font-weight:500;color:var(--ctc-head)}
.at-row .meta{font-size:.78rem;color:var(--ctc-muted);display:flex;flex-wrap:wrap;gap:.25rem .9rem;margin-top:.15rem}
.at-row .side{text-align:right;white-space:nowrap;font-size:.8rem}
.at-row.alerta{box-shadow:inset 3px 0 0 #d0453b}
.at-tabs{display:flex;gap:.25rem;flex-wrap:wrap;border-bottom:1px solid var(--ctc-line);margin-bottom:1rem}
.at-tabs a{padding:.6rem .9rem;font-size:.8rem;font-weight:500;color:var(--ctc-text);border-bottom:2px solid transparent;margin-bottom:-1px}
.at-tabs a.active{border-bottom-color:var(--ctc-blue);color:var(--ctc-head)}
.at-tabs a .n{display:inline-block;min-width:20px;padding:0 .35rem;margin-left:.35rem;background:var(--ctc-bg-alt);color:var(--ctc-blue-text);font-size:.7rem;text-align:center}
.at-timer{font-variant-numeric:tabular-nums;font-weight:600;letter-spacing:.5px}
.at-big{display:flex;align-items:center;justify-content:center;gap:.6rem;min-height:56px;font-size:1rem;font-weight:600;width:100%}
.at-live{background:var(--ctc-black);color:#fff;padding:1.2rem;position:relative;overflow:hidden}
.at-live::after{content:"";position:absolute;right:-60px;top:-60px;width:180px;height:180px;border:1px solid rgba(197,172,58,.3);transform:rotate(45deg)}
.at-live .at-timer{font-size:2.6rem;line-height:1;color:#fff}
.at-live .lbl{font-size:.68rem;text-transform:uppercase;letter-spacing:1.2px;color:var(--ctc-gold)}
.at-live .cli{font-size:1.05rem;font-weight:500;color:#fff}
.at-live.paused .at-timer{color:#e6c35c}
.at-live .muted{color:#a9a9a9;font-size:.8rem}
.at-live .btn-light{--bs-btn-bg:#2a2a2a;--bs-btn-border-color:#3a3a3a;--bs-btn-color:#fff;--bs-btn-hover-bg:#3a3a3a;--bs-btn-hover-color:#fff}
.at-maq{border:1px solid var(--ctc-line);background:#fff;padding:.9rem 1rem;margin-bottom:.6rem;border-left:3px solid var(--ctc-blue)}
.at-maq.nok{border-left-color:#d0453b}
.at-maq .h{display:flex;justify-content:space-between;gap:.5rem;align-items:flex-start}
.at-maq .tx{font-size:.82rem;color:#555;margin-top:.35rem;white-space:pre-line}
.at-thumbs{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem}
.at-thumbs img{width:72px;height:72px;object-fit:cover;border:1px solid var(--ctc-line);cursor:pointer}
.at-kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.8rem 1.2rem}
.at-kv .k{font-size:.66rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ctc-muted)}
.at-kv .v{color:var(--ctc-head);font-weight:500}
.at-kv .v.big{font-size:1.3rem;font-weight:600}
.at-sign{max-width:320px;max-height:140px;border-bottom:1px solid #ccc}
.at-stars{display:flex;gap:.3rem;justify-content:center;margin:.6rem 0 1rem}
.at-stars label{cursor:pointer;font-size:2.3rem;color:#d9d9d9;transition:color .15s,transform .15s}
.at-stars input{position:absolute;opacity:0;pointer-events:none}
.at-stars label.on{color:var(--ctc-gold)}
.at-stars label:hover{transform:scale(1.08)}
.at-star-s{color:var(--ctc-gold);letter-spacing:1px}.at-star-s .off{color:#ddd}
.at-pub{min-height:100vh;background:linear-gradient(rgba(0,50,102,.85),rgba(25,25,25,.95)),#191919;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 1rem}
.at-pub-card{background:#fff;width:100%;max-width:560px;box-shadow:0 25px 60px rgba(0,0,0,.35)}
.at-pub-head{background:#191919;padding:1.1rem 1.4rem;display:flex;align-items:center;gap:.8rem;border-bottom:3px solid var(--ctc-gold)}
.at-pub-head img{height:30px}.at-pub-head span{color:#bbb;font-size:.75rem;text-transform:uppercase;letter-spacing:1.4px}
.at-pub-body{padding:1.6rem 1.6rem 1.8rem}
.at-pub-body h1{font-size:1.35rem;margin-bottom:.3rem}
.at-pub-foot{color:#8a96a3;font-size:.72rem;margin-top:1.2rem;letter-spacing:.5px}
.fc .fc-pendente{opacity:.65;border-style:dashed!important}
.fc .fc-concluida{opacity:.5}
.at-eff{height:8px;background:#eee;position:relative}
.at-eff i{position:absolute;left:0;top:0;bottom:0;background:var(--ctc-blue)}
.at-eff.ok i{background:#2e9d6a}.at-eff.low i{background:#e0a33b}
@media (max-width: 575.98px){
  .at-row{padding:.8rem .8rem;gap:.7rem}
  .at-row .side{display:none}
  .at-live .at-timer{font-size:2.2rem}
  .page-head h1{font-size:1.2rem}
}

/* ===================== Cartrack e mapa da frota (Viaturas) ===================== */
.btn-xs{padding:.12rem .45rem;font-size:.72rem;line-height:1.4}
.ct-wrap{display:grid;grid-template-columns:minmax(0,1fr) 360px;height:calc(100vh - 175px);min-height:480px;border:1px solid var(--ctc-line);background:#fff}
.ct-map{height:100%;min-height:300px;background:#eef1f3}
.ct-side{display:flex;flex-direction:column;min-height:0;border-left:1px solid var(--ctc-line);background:#fff}
.ct-side-head{padding:.8rem .9rem;border-bottom:1px solid var(--ctc-line);background:#fafbfc}
.ct-list{flex:1 1 auto;overflow-y:auto;min-height:0}
.ct-item{padding:.7rem .9rem;border-bottom:1px solid var(--ctc-line);border-left:3px solid transparent;cursor:pointer;transition:background .15s}
.ct-item:hover{background:#f6f9fb}
.ct-item.on{border-left-color:#2e9d6a}
.ct-item.sel{background:#eaf6fd;border-left-color:var(--ctc-blue)}
.ct-plate{display:inline-block;font-weight:600;letter-spacing:.6px;color:var(--ctc-head);border:1px solid #cfd6db;padding:0 .4rem;background:#fff;font-size:.8rem;white-space:nowrap}
.ct-st{color:var(--ctc-muted)}.ct-st.on{color:#2e9d6a;font-weight:500}.ct-st.idle{color:var(--ctc-gold-text);font-weight:500}
.ct-empty{padding:1.6rem 1rem;text-align:center;color:var(--ctc-muted)}
.ct-empty>i{display:block;font-size:1.8rem;color:#c9d1d6;margin-bottom:.3rem}
.ct-nomap{height:100%;min-height:160px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--ctc-muted);font-size:.8rem;background:#f6f8f9}
.ct-nomap i{font-size:1.5rem;margin-bottom:.2rem}
.ct-mini{height:100%;min-height:230px}
.ct-modal-map{height:430px;border:1px solid var(--ctc-line)}
.ct-team-map{height:380px}
.ct-kv{display:grid;grid-template-columns:1fr 1fr;gap:.6rem 1rem}
.ct-kv .k{font-size:.66rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ctc-muted)}
.ct-kv .v{color:var(--ctc-head);font-weight:600}
.ct-tl{list-style:none;margin:0;padding:0 0 0 1rem;border-left:2px solid #dbe3e8}
.ct-tl li{position:relative;padding:.1rem 0 .7rem .4rem}
.ct-tl li::before{content:"";position:absolute;left:-1.42rem;top:.3rem;width:11px;height:11px;background:var(--ctc-blue);border:2px solid #fff;box-shadow:0 0 0 1px var(--ctc-blue)}
.ct-tl li.stop::before{background:var(--ctc-gold);box-shadow:0 0 0 1px var(--ctc-gold)}
.ct-tl .h{font-size:.74rem;font-weight:600;color:var(--ctc-head)}
/* marcadores (divIcon do Leaflet) */
.ct-mk-w{background:none;border:0}
.ct-mk{display:flex;align-items:center;white-space:nowrap;filter:drop-shadow(0 2px 3px rgba(0,0,0,.25))}
.ct-mk .dot{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#8a8a8a;color:#fff;border:2px solid #fff;font-size:.95rem}
.ct-mk b{margin-left:3px;background:#191919;color:#fff;font-size:.68rem;font-weight:600;letter-spacing:.5px;padding:.12rem .38rem}
.ct-mk.on .dot{background:#2e9d6a}
.ct-mk.idle .dot{background:var(--ctc-gold)}
.ct-mk.sel .dot{outline:3px solid var(--ctc-blue)}
.ct-mk.sel b{background:var(--ctc-blue)}
.ct-mk .dot i{display:block;line-height:1}
.ct-tec{width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:var(--ctc-blue);color:#fff;border:2px solid #fff;border-radius:50%;font-size:.62rem;font-weight:600;box-shadow:0 2px 4px rgba(0,0,0,.3)}
.ct-pt{width:22px;height:22px;display:flex;align-items:center;justify-content:center;color:#fff;border:2px solid #fff;font-size:.64rem;font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.35)}
.ct-pt.start{background:#2e9d6a}.ct-pt.end{background:#d0453b}.ct-pt.stop{background:var(--ctc-gold)}
.ct-pop{font-family:var(--bs-font-sans-serif);font-size:.78rem;line-height:1.45;min-width:170px}
.leaflet-container{font-family:var(--bs-font-sans-serif)}
.leaflet-popup-content-wrapper,.leaflet-popup-tip{border-radius:0;box-shadow:0 6px 18px rgba(0,0,0,.15)}
.leaflet-bar,.leaflet-bar a,.leaflet-bar a:first-child,.leaflet-bar a:last-child{border-radius:0}
@media (max-width: 991.98px){
  .ct-wrap{display:block;height:auto;min-height:0}
  .ct-map{height:58vh}
  .ct-side{border-left:0;border-top:1px solid var(--ctc-line)}
  .ct-list{max-height:none;overflow:visible}
  .ct-modal-map{height:320px}
  .ct-team-map{height:300px}
}

/* Calendários em telemóvel: a barra (setas, título e vistas) passa para várias linhas em vez de alargar a página. */
@media (max-width: 575.98px) {
  .fc .fc-header-toolbar { flex-wrap: wrap; gap: .5rem; }
  .fc .fc-header-toolbar .fc-toolbar-chunk { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem; }
  .fc .fc-toolbar-title { font-size: 1rem; }
  .fc .fc-button { padding: .3rem .55rem; }
  .fc .fc-daygrid-day-frame, .fc .fc-scrollgrid { min-width: 0; }
  .fc { max-width: 100%; }
}
@media (max-width: 575.98px) { .ag-cal { padding: .6rem .5rem; } }

/* ---------- Pesquisa global no telemóvel: ícone que abre o campo sobre a barra de topo ---------- */
.topbar .search-toggle, .topbar .search-close { display: none; }
@media (max-width: 575.98px) {
  .topbar .search-toggle { display: inline-flex; }
  .topbar .search { display: none; }
  .topbar.search-open .search { display: flex; align-items: center; gap: .4rem; position: absolute; inset: 0; max-width: none; padding: 0 .6rem 0 1rem; background: #fff; z-index: 20; }
  .topbar.search-open .search > i { left: 1.8rem; }
  .topbar.search-open .search .search-close { display: inline-flex; flex: none; order: 2; }
  .topbar.search-open .search .results { position: fixed; top: var(--topbar-h); left: 0; right: 0; max-height: calc(100vh - var(--topbar-h)); }
}
/* Espaço no fim das páginas para o botão flutuante do assistente não tapar a última linha das tabelas. */
@media screen { .content { padding-bottom: 5rem; } }
/* Números (alinhados à direita) não partem em duas linhas. */
.table td.text-end, .table th.text-end { white-space: nowrap; }

/* ---------- Pacote F (feedback 28/10): equipas de férias, combustível e envio de newsletters ---------- */
.fe-eq { padding: .45rem .7rem; font-size: .82rem; margin-top: .35rem; border-left: 3px solid #e8873a; background: #fdf3ea; color: #7a4a14; }
.fe-eq.bad { border-left-color: #d0453b; background: #fdecea; color: #a3271d; }
.fe-eq-mini { font-size: .72rem; margin-top: .15rem; color: #b5671d; }
.fe-eq-mini.bad { color: #c2362c; }
.fe-map tr.fe-team td { background: var(--ctc-bg-alt); font-size: .75rem; font-weight: 600; color: var(--ctc-head); }
.fe-map tr.fe-team td.u { background: var(--ctc-bg-alt); }
.fe-map tr.fe-team:first-of-type td, .fe-map tr:not(.fe-team) + tr.fe-team td { border-top: 2px solid var(--ctc-line); }
.fe-map td.fe-cnt small { font-weight: 400; color: var(--ctc-muted); margin-left: 1px; }
.fe-map td.fe-cnt.lim { background: #fdf0dc; color: #8a5a12; }
.fe-map td.fe-cnt.over { background: #f9d6d2; color: #a3271d; }
.fe-legend .fe-sw-lim { background: #fdf0dc; outline: 1px solid #e8b56a; }
.fe-legend .fe-sw-over { background: #f9d6d2; outline: 1px solid #d0453b; }
.cb-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: .75rem; }
.cb-sem { color: #b5671d; font-weight: 500; }
.cb-quinzena td input { max-width: 120px; margin-left: auto; }
.nl-ritmo .bar { height: 6px; background: var(--ctc-bg-alt); position: relative; overflow: hidden; }
.nl-ritmo .bar span { position: absolute; inset: 0 auto 0 0; background: var(--ctc-blue, #009ee5); }

/* ===================== Feedback 28/10 (pacote A): cores de estado da assistência e pendentes ===================== */
:root { --at-st-agendado: #8a96a3; --at-st-curso: #009ee5; --at-st-terminado: #2e9d6a; --at-st-pendente: #e8833a; --at-st-base: #fff; }
.at-st-dot { display: inline-block; width: 10px; height: 10px; margin-right: .35rem; vertical-align: -1px; background: var(--st, var(--at-st-agendado)); }
.st-agendado { --st: var(--at-st-agendado); } .st-em_curso { --st: var(--at-st-curso); }
.st-terminado { --st: var(--at-st-terminado); } .st-pendente { --st: var(--at-st-pendente); }
.at-legenda { display: flex; flex-wrap: wrap; gap: .35rem 1rem; font-size: .74rem; color: var(--ctc-muted); align-items: center; }
.at-legenda .cat { display: inline-block; width: 3px; height: 12px; margin-right: .35rem; vertical-align: -2px; background: var(--ctc-muted); }
.badge-pend { background: #fde9d9; color: #a4501a; white-space: normal; text-align: left; max-width: 100%; line-height: 1.35; }
.text-pend { color: #a4501a; }
.at-row.pendente { box-shadow: inset 3px 0 0 var(--at-st-pendente); }
.at-maq.pend { border-left-color: var(--at-st-pendente); }
.at-pend-box { border: 1px solid color-mix(in srgb, var(--at-st-pendente) 45%, transparent); border-left: 4px solid var(--at-st-pendente); background: color-mix(in srgb, var(--at-st-pendente) 9%, var(--at-st-base)); padding: .65rem .85rem; font-size: .84rem; color: var(--ctc-head); }
.at-pend-box + .at-pend-box { margin-top: .4rem; }
.at-pend-box .t { font-weight: 600; color: #a4501a; }
.at-pend-box .m { color: var(--ctc-muted); font-size: .76rem; }
/* Coordenação: fundo pela cor do estado, barra lateral pela cor da categoria. */
.pd-plan a.ch.st { background: color-mix(in srgb, var(--st) 16%, var(--at-st-base)); border-left: 4px solid var(--c, var(--st)); box-shadow: inset 0 -2px 0 var(--st); opacity: 1; }
.pd-plan a.ch.st.st-agendado { background: var(--at-st-base); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--st) 45%, transparent); }
/* Calendário técnico e agenda: evento com a cor do estado e barra lateral com a cor da categoria
   (só nos blocos da semana/dia/mês; na lista e nos pontos fica a cor do estado no marcador). */
.fc :is(.fc-timegrid-event, .fc-daygrid-block-event).at-ev-st { background: var(--st) !important; border-color: var(--st) !important; border-left: 4px solid var(--cat, var(--st)) !important; }
.fc :is(.fc-timegrid-event, .fc-daygrid-block-event).at-ev-st :is(.fc-event-main, .fc-event-time, .fc-event-title) { color: #fff; }
.fc :is(.fc-timegrid-event, .fc-daygrid-block-event).at-ev-st.st-agendado { background: var(--at-st-base) !important; }
.fc :is(.fc-timegrid-event, .fc-daygrid-block-event).at-ev-st.st-agendado :is(.fc-event-main, .fc-event-time, .fc-event-title) { color: var(--ctc-head); }
.fc .fc-list-event.at-ev-st .fc-list-event-dot { border-color: var(--st) !important; }
.fc .fc-daygrid-dot-event.at-ev-st .fc-daygrid-event-dot { border-color: var(--st) !important; }
/* Filtros do gráfico de horas faturadas e em garantia no telemóvel: datas lado a lado, seletores a toda a largura. */
@media (max-width: 575.98px) { .db-tools.hg-f { display: grid; grid-template-columns: 1fr auto 1fr; gap: .4rem; width: 100%; align-items: center; } .db-tools.hg-f > select { grid-column: 1 / -1; width: 100%; } .db-tools.hg-f > input { width: 100%; min-width: 0; } }

/* ---------- Orçamentos (feedback 28/10, pacote B): modelos, seguimento e confirmações ---------- */
.orc-precos label { align-items: flex-start; font-weight: 400; }
.orc-precos label:has(input:checked) { background: var(--ctc-bg-alt); }
.orc-precos label i { margin-top: .15rem; }
.orc-canais { display: flex; flex-wrap: wrap; gap: .4rem; }
.orc-canais label { cursor: pointer; margin: 0; }
.orc-canais input { position: absolute; opacity: 0; pointer-events: none; }
.orc-canais span { display: inline-flex; align-items: center; gap: .35rem; border: 1px solid var(--ctc-line); padding: .45rem .8rem; font-size: .85rem; min-height: 40px; }
.orc-canais input:checked + span { border-color: var(--ctc-blue); color: var(--ctc-blue-text); background: var(--ctc-bg-alt); }
.orc-canais input:focus-visible + span { outline: 2px solid var(--ctc-blue); }
.orc-chip { display: inline-flex; align-items: center; gap: .3rem; border: 1px solid var(--ctc-line); padding: .3rem .6rem; font-size: .8rem; color: var(--ctc-text); text-decoration: none; }
.orc-chip.on, .orc-chip:hover { border-color: var(--ctc-blue); color: var(--ctc-blue-text); }
.orc-modelo { border-top: 2px solid var(--ctc-blue); }
.orc-conf-linhas td { vertical-align: middle; }
.orc-mod-prev th { white-space: normal; }
@media (max-width: 575.98px) { .orc-mod-prev th, .orc-mod-prev td { padding-left: .35rem; padding-right: .35rem; } .orc-mod-prev th { font-size: .62rem; letter-spacing: .5px; } }

/* Pacote E (feedback 28/10): voz nas visitas e parque de máquinas */
.ctc-voz-rec{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}
.ctc-voz-tempo{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--mono, monospace);font-size:1.15rem}
.ctc-voz-lista{display:flex;flex-direction:column;gap:.6rem}
.ctc-voz-item{border:1px solid var(--ctc-line);padding:.55rem .7rem;background:var(--ctc-bg-alt)}
.ctc-voz-item audio{width:100%;height:36px;margin-top:.35rem}
.ctc-parque-lista{display:flex;flex-direction:column}
.ctc-parque-item{display:flex;gap:.75rem;align-items:flex-start;padding:.65rem 1rem;border-top:1px solid var(--ctc-line)}
.ctc-parque-item:first-child{border-top:0}
.ctc-parque-qtd{font-family:var(--mono, monospace);font-weight:600;min-width:2.2rem;padding-top:.1rem}
@media (max-width:575.98px){.ctc-voz-rec .cm-big-btn{width:100%}.ctc-voz-rec label.ms-auto{margin-left:0!important}}
