:root{--tf-dark:#111827;--tf-dark2:#0b1220;--tf-orange:#f59e0b;--tf-blue:#0d6efd;--tf-bg:#f6f7f9}
html,body{min-height:100%;background:var(--tf-bg)}body{font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;color:#111827}.sidebar{width:238px;min-width:238px;background:linear-gradient(180deg,var(--tf-dark2),var(--tf-dark));color:#fff;position:sticky;top:0;height:100vh}.brand{font-size:1.42rem;font-weight:900;letter-spacing:.08em;color:#fff}.brand span{color:var(--tf-orange)}.brand-dark{color:#111827;font-size:1.8rem}.nav-section{color:#64748b;font-size:.72rem;letter-spacing:.08em}.sidebar .nav-link,.tf-offcanvas .nav-link{color:#cbd5e1;border-radius:.65rem;padding:.66rem .8rem;display:flex;gap:.65rem;align-items:center}.sidebar .nav-link:hover,.tf-offcanvas .nav-link:hover{background:#1f2937;color:white}.sidebar .nav-link.active,.tf-offcanvas .nav-link.active{background:#243047;color:white;box-shadow:inset 3px 0 0 var(--tf-orange)}.main-area{background:var(--tf-bg);min-width:0}.topbar{position:sticky;top:0;z-index:20}.page-title{font-size:2rem;font-weight:750;margin-bottom:.25rem}.metric{border:0;box-shadow:0 .3rem 1.2rem rgba(15,23,42,.06);border-radius:.7rem}.metric .label{text-transform:uppercase;font-size:.7rem;letter-spacing:.06em;color:#6b7280}.metric .value{font-size:1.9rem;font-weight:800;margin-top:.35rem}.panel-card{border:0;box-shadow:0 .25rem 1.15rem rgba(15,23,42,.06);border-radius:.7rem;overflow:hidden}.table thead th{font-size:.72rem;text-transform:uppercase;color:#64748b;white-space:nowrap;background:#fbfbfc}.table td{vertical-align:middle}.badge{font-weight:650}.tf-mobile-nav,.tf-offcanvas{background:var(--tf-dark2)!important}.tf-offcanvas{color:white;width:270px}.login-bg{background:radial-gradient(circle at 20% 20%,#1e293b 0,#111827 45%,#070b13 100%)}.login-card{width:min(430px,94vw);border:0;border-radius:1rem}.form-control,.form-select{border-color:#d7dce3}.form-control:focus,.form-select:focus{border-color:#86b7fe;box-shadow:0 0 0 .2rem rgba(13,110,253,.12)}@media(max-width:575px){.page-title{font-size:1.6rem}.table{font-size:.88rem}}
.oscam-card{border-top:3px solid var(--tf-orange)}.status-pill{display:inline-flex;align-items:center;padding:.28rem .55rem;border-radius:999px;background:#eef2f7;color:#475569;font-size:.73rem;font-weight:700}.status-pill.ok{background:#dcfce7;color:#166534}.status-pill.warn{background:#fff7ed;color:#9a3412}.oscam-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.65rem}.oscam-metrics>div{background:#f8fafc;border:1px solid #edf1f5;border-radius:.65rem;padding:.65rem .7rem}.oscam-metrics span{display:block;color:#64748b;font-size:.69rem;text-transform:uppercase;letter-spacing:.04em}.oscam-metrics strong{display:block;font-size:1.05rem;margin-top:.15rem}@media(max-width:575px){.oscam-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}

.detail-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace;font-size:.82rem;white-space:nowrap}.card-header{border-bottom-color:#e5e7eb}
.tf-tabs .nav-link{border:1px solid #dbe2ea;background:#fff;color:#334155;padding:.45rem .8rem}.tf-tabs .nav-link.active{background:#0d6efd;color:#fff;border-color:#0d6efd}.tf-code-editor{min-height:58vh;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace;font-size:.86rem;line-height:1.5;resize:vertical;background:#0b1220;color:#e5e7eb;padding:1rem}.tf-code-editor:focus{background:#0b1220;color:#fff;box-shadow:none}.tf-log{min-height:55vh;max-height:68vh;overflow:auto;background:#0b1220;color:#d1fae5;padding:1rem;font-size:.8rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}

/* v4.1.2 - renewal dropdown must escape the client table container */
.clients-list-card{overflow:visible}
.clients-list-card .clients-table-responsive{overflow:visible}
.clients-list-card .dropdown-menu{z-index:1085;min-width:10rem}
.clients-list-card td.text-end{white-space:nowrap}
@media(max-width:991.98px){
  .clients-list-card{overflow:visible}
  .clients-list-card .clients-table-responsive{overflow-x:auto;overflow-y:visible;padding-bottom:12rem;margin-bottom:-12rem}
}

/* v4.2 - renewal history */
.renew-summary{height:100%;border:1px solid #e5e7eb;border-radius:.75rem;padding:1rem;background:#f8fafc}.renew-summary span{display:block;text-transform:uppercase;font-size:.7rem;letter-spacing:.05em;color:#64748b}.renew-summary strong{display:block;font-size:1.2rem;margin-top:.35rem}.renew-summary-new{background:#ecfdf5;border-color:#bbf7d0}.renew-summary-new strong{color:#047857}.history-notes{min-width:220px;max-width:420px;white-space:normal}.clients-list-card .btn{white-space:nowrap}

/* v4.3 - payments */
.payment-overdue{background:#fef2f2}.payment-paid{background:#f0fdf4}.payment-pending{background:#fffbeb}.metric a{color:inherit}

/* v4.7 - client connection / line info */
.line-label{display:block;text-transform:uppercase;font-size:.7rem;letter-spacing:.05em;color:#64748b;margin-bottom:.25rem}.line-value{font-size:1rem;font-weight:600}.line-accordion .accordion-item{border-color:#dbe2ea}.line-accordion .accordion-button{font-weight:650}.line-block{background:#f8fafc;border:1px solid #e5e7eb;border-radius:.65rem;padding:.85rem}.line-block pre{margin:0;background:#0b1220;color:#d1fae5;padding:1rem;border-radius:.55rem;white-space:pre-wrap;word-break:break-word;font-size:.82rem}

/* v4.8 - live client status */
.live-line-cell{min-width:150px}.live-channel-cell{min-width:190px;max-width:300px}.live-channel{white-space:normal;line-height:1.2}.live-request{white-space:nowrap}.live-state{min-width:76px}.live-uptime{color:#4b5563}.clients-table-responsive table{min-width:1540px}

/* v5.7.18 - Mobile overhaul */
.tf-mobile-nav{position:sticky;top:0;z-index:1035;min-height:58px;box-shadow:0 4px 16px rgba(2,6,23,.18)}
.tf-mobile-user{max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#cbd5e1;font-size:.78rem;font-weight:650}
.tf-menu-button{padding:.25rem .45rem;border-color:rgba(255,255,255,.18)}
.tf-mobile-account-card{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.8rem .9rem;border:1px solid rgba(255,255,255,.10);background:rgba(255,255,255,.05);border-radius:.8rem}
.tf-logout-link{color:#fca5a5!important}
.tf-mobile-bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:1030;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));background:rgba(11,18,32,.98);border-top:1px solid rgba(255,255,255,.08);box-shadow:0 -6px 18px rgba(15,23,42,.18);padding:4px 4px calc(4px + env(safe-area-inset-bottom))}
.tf-mobile-bottom-link{appearance:none;border:0;background:transparent;color:#94a3b8;text-decoration:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-height:54px;font-size:.64rem;font-weight:700;border-radius:.65rem;padding:.2rem .1rem}
.tf-mobile-bottom-link:hover,.tf-mobile-bottom-link:focus{color:#fff}
.tf-mobile-bottom-link.active{color:#fff;background:rgba(255,255,255,.07)}
.tf-mobile-bottom-link.active .tf-mobile-bottom-icon{color:var(--tf-orange)}
.tf-mobile-bottom-icon{font-size:1.12rem;line-height:1.2}
.tf-mobile-bottom-button{width:100%}
.tf-client-mobile-card,.tf-reseller-mobile-card{border:0;border-radius:.85rem;box-shadow:0 .2rem .85rem rgba(15,23,42,.07);overflow:hidden}
.tf-mobile-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;margin-top:.8rem}
.tf-mobile-meta>div{background:#f8fafc;border:1px solid #eef2f7;border-radius:.65rem;padding:.55rem .65rem;min-width:0}
.tf-mobile-meta .label{display:block;color:#64748b;font-size:.66rem;text-transform:uppercase;letter-spacing:.04em;margin-bottom:.18rem}
.tf-mobile-meta .value{display:block;font-size:.88rem;font-weight:650;overflow-wrap:anywhere}
.tf-mobile-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin-top:.8rem}
.tf-mobile-actions .btn,.tf-mobile-actions .btn-group,.tf-mobile-actions form{width:100%}
.tf-mobile-actions .btn-group>.btn,.tf-mobile-actions form>.btn{width:100%}
.tf-mobile-actions .dropdown-menu{min-width:100%}
.tf-mobile-status-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem}
.tf-filter-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;text-align:left}
.tf-filter-toggle:after{content:'⌄';font-size:1rem}

@media(max-width:991.98px){
  body{padding-bottom:68px}
  .tf-offcanvas{width:min(86vw,320px)}
  .tf-main-content{padding-top:.75rem!important}
  .page-title{font-size:1.55rem;line-height:1.15;margin-bottom:.15rem}
  .page-title+p,.page-title~p{font-size:.84rem}
  .panel-card{border-radius:.8rem}
  .metric .card-body{padding:.8rem .85rem}
  .metric .value{font-size:1.5rem;margin-top:.2rem}
  .metric .label{font-size:.64rem;line-height:1.2}
  .metric .small{font-size:.72rem}
  .table-responsive{border-radius:.75rem}
  .form-control,.form-select,.btn{min-height:42px}
  .modal-dialog{margin:.55rem}
}

@media(max-width:767.98px){
  .tf-desktop-table{display:none!important}
  .tf-mobile-list{display:block!important}
  .tf-page-actions{width:100%;display:grid!important;grid-template-columns:1fr 1fr;gap:.5rem!important}
  .tf-page-actions .btn{width:100%}
  .tf-filter-collapse:not(.show){display:none}
  .tf-filter-collapse .card-body{padding:.8rem}
  #live-summary .card-body{padding:.65rem .7rem!important}
  #live-summary .fs-4{font-size:1.25rem!important}
  #live-summary .small{font-size:.64rem}
  .tf-mobile-list{margin-top:.2rem}
  .tf-mobile-list>.card{margin-bottom:.65rem}
  .tf-mobile-list>.card:last-child{margin-bottom:0}
  .tf-mobile-compact-title{font-size:1rem}
}

@media(min-width:768px){
  .tf-mobile-list{display:none!important}
  .tf-filter-toggle-wrap{display:none!important}
  .tf-filter-collapse.collapse{display:block!important}
}

@media(max-width:575.98px){
  .brand{font-size:1.2rem}
  .tf-mobile-nav{min-height:54px}
  .tf-mobile-user{display:none}
  .tf-mobile-meta{grid-template-columns:1fr 1fr}
  .tf-mobile-actions{grid-template-columns:1fr 1fr}
  .alert{font-size:.86rem;padding:.7rem .8rem}
  .card-header{padding:.75rem .85rem}
}
@media(max-width:767.98px){
  .tf-mobile-full-btn{width:100%}
  .grid-span-2{grid-column:1 / -1}
}


/* v5.7.22 — seleção de clientes em massa */
.tf-bulk-col { vertical-align: middle; }
#bulkClientBar { position: sticky; top: .5rem; z-index: 1010; }
@media (max-width: 767.98px) {
  #bulkClientBar { bottom: calc(68px + env(safe-area-inset-bottom)); top: auto; position: sticky; z-index: 1025; }
  #bulkClientBar .card-body { gap: .4rem !important; }
  #bulkClientBar .ms-auto { margin-left: 0 !important; width: 100%; }
  .tf-client-mobile-card .tf-bulk-col { padding-top: .1rem; }
  #bulkModeToggle { width: 100%; }
}

/* v5.7.22 — versão sempre visível no menu lateral */
.tf-version-footer{
  color:#64748b;
  font-size:.72rem;
  font-weight:650;
  letter-spacing:.02em;
  display:flex;
  align-items:center;
  gap:.45rem;
  border-top:1px solid rgba(148,163,184,.12);
  padding-left:.15rem;
  white-space:nowrap;
}
.tf-version-dot{
  width:7px;
  height:7px;
  border-radius:50%;
  background:var(--tf-orange);
  box-shadow:0 0 0 3px rgba(245,158,11,.10);
  flex:0 0 auto;
}
.tf-offcanvas .tf-version-footer{color:#94a3b8;}

/* v5.7.22 — Auditoria */
.tf-audit-card { border-left: 3px solid rgba(13,110,253,.35); }
@media (max-width: 767.98px) {
  .tf-audit-card .card-body { padding: .8rem; }
}

/* v5.7.33 — ações em massa de clientes */
.tf-bulk-reseller { width: min(340px, 100%); }
@media (max-width: 767.98px) {
  #bulkClientBar .card-body { align-items: stretch !important; }
  #bulkClientBar .bulk-action-btn { flex: 1 1 calc(50% - .5rem); }
  .tf-bulk-reseller { width: 100%; }
  #bulkClientBar #bulkDeleteBtn { width: 100%; margin-left: 0 !important; }
}

/* v5.7.33 — renovação em massa */
.tf-bulk-renew .btn { white-space: nowrap; }
@media (max-width: 767.98px) {
  .tf-bulk-renew { width: 100%; }
  .tf-bulk-renew .btn { flex: 1 1 25%; }
}

/* v5.7.33 — Tráfego CCcam */
.tf-traffic-chart { height: 230px; display: flex; align-items: end; gap: 4px; padding: 14px 4px 28px; border-bottom: 1px solid var(--bs-border-color); }
.tf-traffic-col { flex: 1 1 0; height: 100%; min-width: 4px; position: relative; display: flex; align-items: end; justify-content: center; }
.tf-traffic-bar { width: min(18px, 78%); min-height: 1px; border-radius: 4px 4px 0 0; background: linear-gradient(180deg, rgba(13,110,253,.86), rgba(13,110,253,.32)); }
.tf-traffic-col span { position: absolute; bottom: -24px; font-size: .68rem; color: var(--bs-secondary-color); white-space: nowrap; }
@media (max-width: 767.98px) { .tf-traffic-chart { height: 185px; gap: 2px; } .tf-traffic-col span { font-size: .6rem; } }

/* v5.7.33 — Ligações CCcam atuais */
.tf-connections { min-width: 2.2rem; text-align: center; }

/* v5.7.33 — Central de Alertas */
.sidebar .nav-link .badge{font-size:.68rem;}

/* v5.7.33 — Saúde do servidor */
#health-services .list-group-item{min-height:54px;}

/* v5.7.33 — Barras de recursos + top processos */
.tf-health-progress { height: 7px; background: rgba(0,0,0,.08); }

/* v5.7.33 — Resumo de revendedores na importação */
.import-reseller-summary .badge { font-weight: 600; }

/* v5.7.33 — Importação multi-instância de revendedores */
.import-instance-plan {
  min-height: 24px;
  padding: 6px 8px;
  border-radius: 6px;
  background: rgba(0,0,0,.025);
}

/* v5.7.34.2 — performance em listas grandes */
.clients-list-card { contain: layout paint; }
@media (min-width: 768px) {
  .clients-table-responsive { content-visibility: auto; }
}


/* v5.7.34.17 — lista de clientes compacta no desktop */
@media (min-width: 768px) {
  .clients-table-responsive table.tf-clients-compact { min-width: 1120px; }
  .tf-clients-compact { font-size: .84rem; }
  .tf-clients-compact thead th { padding: .42rem .48rem; font-size: .67rem; line-height: 1; vertical-align: middle; }
  .tf-clients-compact tbody td { padding: .34rem .48rem; line-height: 1.08; vertical-align: middle; }
  .tf-clients-compact tbody tr { height: 46px; }
  .tf-compact-primary { font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 220px; }
  .tf-compact-secondary { margin-top: .14rem; color: #6b7280; font-size: .72rem; line-height: 1.05; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 230px; }
  .tf-compact-sep { color: #cbd5e1; }
  .tf-client-name-cell { min-width: 150px; max-width: 220px; }
  .tf-service-reseller-cell { min-width: 145px; max-width: 210px; }
  .tf-oscam-cell { min-width: 125px; max-width: 190px; }
  .tf-clients-compact .live-line-cell { min-width: 185px; max-width: 250px; }
  .tf-clients-compact .live-line-cell .live-meta,
  .tf-clients-compact .live-line-cell .live-uptime { max-width: 235px; }
  .tf-clients-compact .live-channel-cell { min-width: 155px; max-width: 235px; }
  .tf-clients-compact .live-channel, .tf-clients-compact .live-request { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 220px; }
  .tf-date-cell { min-width: 92px; white-space: nowrap; }
  .tf-clients-compact .badge { font-size: .68rem; padding: .32em .52em; }
  .tf-actions-cell { min-width: 112px; width: 112px; white-space: nowrap; }
  .tf-client-actions { display: inline-flex; align-items: center; justify-content: flex-end; gap: .16rem; }
  .tf-client-actions .dropdown { display: inline-block; }
  .tf-icon-btn { width: 28px; height: 28px; padding: 0; display: inline-flex; align-items: center; justify-content: center; line-height: 1; border-radius: .35rem; }
  .tf-client-actions .dropdown-menu { font-size: .84rem; min-width: 10.5rem; }
  .tf-client-actions .dropdown-item { padding: .38rem .7rem; }
}

/* v5.7.34.28 — Automação OSCam */
.tf-automation-card { scroll-margin-top: 1rem; }
.tf-day-check { position: relative; cursor: pointer; }
.tf-day-check input { position: absolute; opacity: 0; pointer-events: none; }
.tf-day-check span { display: inline-flex; align-items: center; justify-content: center; min-width: 42px; padding: .38rem .55rem; border: 1px solid var(--bs-border-color); border-radius: .5rem; font-size: .78rem; font-weight: 600; background: var(--bs-body-bg); transition: .15s ease; }
.tf-day-check input:checked + span { color: #fff; background: var(--bs-primary); border-color: var(--bs-primary); }
.tf-automation-last { padding: .7rem .8rem; border-radius: .5rem; background: rgba(13,110,253,.06); border: 1px solid rgba(13,110,253,.12); }
@media (min-width: 992px) { .border-lg-start { border-left: 1px solid var(--bs-border-color); } }
@media (max-width: 575.98px) { .tf-day-check span { min-width: 38px; padding: .34rem .45rem; } }

/* TeamFox 5.7.34.35 - OSCam Monitor compacto */
.oscam-summary .card{border-radius:.8rem}.oscam-summary .metric .label{font-size:.68rem;letter-spacing:.045em}.oscam-summary .metric .value{line-height:1.1;margin-top:.15rem}.oscam-toolbar-card{border-radius:.8rem}.oscam-search{max-width:280px}.oscam-card-v2{border-top:0!important;border-left:3px solid var(--tf-orange);border-radius:.85rem;overflow:visible}.oscam-card-v2 h5{font-size:1rem}.oscam-card-v2 .status-pill{padding:.18rem .42rem;font-size:.65rem}.oscam-compact-metrics{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:.35rem}.oscam-compact-metrics>div{background:#f8fafc;border:1px solid #edf1f5;border-radius:.5rem;padding:.4rem .45rem;min-width:0}.oscam-compact-metrics span{display:block;color:#64748b;font-size:.58rem;text-transform:uppercase;letter-spacing:.035em;white-space:nowrap}.oscam-compact-metrics strong{display:block;font-size:.88rem;line-height:1.2;margin-top:.08rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.oscam-card-v2 .card-footer{border-top-color:#eef2f7}.oscam-card-v2 .dropdown-menu form{margin:0}.oscam-card-v2 .dropdown-item{font-size:.86rem}.min-w-0{min-width:0}@media(max-width:991px){.oscam-compact-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:575px){.oscam-search{max-width:none;width:100%}.oscam-toolbar-card .btn-group{width:100%}.oscam-toolbar-card .btn-group .btn{flex:1}.oscam-compact-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* TeamFox 5.7.34.38 - ações rápidas OSCam */
.oscam-quick-actions form{margin:0}
.oscam-quick-actions .btn{white-space:nowrap}
@media (max-width: 575.98px){
  .oscam-quick-actions .ms-auto{width:100%;margin-left:0!important;margin-top:.25rem}
}

/* TeamFox 5.7.34.39 · Tráfego CCcam compacto */
.traffic-controls .form-select{width:auto;min-width:78px}.traffic-summary-strip{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));background:#fff;border:1px solid #edf1f5;border-radius:.8rem;box-shadow:0 .25rem 1rem rgba(15,23,42,.045);overflow:hidden}.traffic-summary-item{padding:.7rem .85rem;border-right:1px solid #eef2f6;min-width:0}.traffic-summary-item:last-child{border-right:0}.traffic-summary-item span,.dashboard-traffic-summary span{display:block;text-transform:uppercase;letter-spacing:.04em;color:#64748b;font-size:.62rem;white-space:nowrap}.traffic-summary-item strong{display:block;font-size:1.18rem;line-height:1.15;margin-top:.12rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.traffic-summary-item small{display:block;color:#94a3b8;font-size:.66rem;margin-top:.05rem}.traffic-table-toolbar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.6rem;padding:.55rem .8rem}.traffic-table-toolbar .form-select{width:auto;min-width:175px}.traffic-table th,.traffic-table td{padding:.42rem .65rem}.traffic-table tbody tr{transition:background-color .15s,opacity .15s}.traffic-row-idle{background:#fbfcfd}.traffic-row-idle td{color:#6b7280}.traffic-row-idle .fw-semibold,.traffic-row-idle .tf-tx{color:#64748b!important}.traffic-port{font-size:.72rem;color:#e83e8c;background:transparent;padding:0}.traffic-mobile-card{transition:opacity .15s}.traffic-mobile-metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.35rem}.traffic-mobile-metrics>div{background:#f8fafc;border-radius:.45rem;padding:.35rem .4rem;min-width:0}.traffic-mobile-metrics span{display:block;color:#64748b;font-size:.6rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.traffic-mobile-metrics strong{display:block;font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.traffic-ranking .list-group-item{padding:.55rem .75rem}.dashboard-traffic-summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.45rem}.dashboard-traffic-summary>div{border:1px solid #edf1f5;background:#f8fafc;border-radius:.55rem;padding:.5rem .65rem;min-width:0}.dashboard-traffic-summary strong{display:block;font-size:1rem;line-height:1.15;margin-top:.1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dashboard-traffic-table th,.dashboard-traffic-table td{padding:.36rem .65rem}.dashboard-traffic-table td:first-child{white-space:nowrap}.dashboard-traffic-table .traffic-row-idle{opacity:.72}.dashboard-traffic-card .card-body{border-bottom:1px solid #eef2f6}@media(max-width:1199px){.traffic-summary-strip{grid-template-columns:repeat(3,minmax(0,1fr))}.traffic-summary-item:nth-child(3){border-right:0}.dashboard-traffic-summary{grid-template-columns:repeat(5,minmax(110px,1fr));overflow-x:auto}}@media(max-width:767.98px){.traffic-summary-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.traffic-summary-item:nth-child(odd){border-right:1px solid #eef2f6}.traffic-summary-item:nth-child(even){border-right:0}.traffic-table-toolbar .btn-group{width:100%}.traffic-table-toolbar .btn-group .btn{flex:1}.traffic-table-toolbar .form-select{width:100%}.traffic-mobile-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-traffic-summary{grid-template-columns:repeat(2,minmax(0,1fr));overflow:visible}.dashboard-traffic-table{font-size:.78rem}}

/* v5.7.36.3 - menu lateral desktop com scroll próprio */
.sidebar{overflow:hidden}
.sidebar-scroll{min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#475569 transparent;padding-right:.28rem;margin-right:-.28rem}
.sidebar-scroll::-webkit-scrollbar{width:7px}
.sidebar-scroll::-webkit-scrollbar-track{background:transparent}
.sidebar-scroll::-webkit-scrollbar-thumb{background:#475569;border-radius:999px}
.sidebar-scroll::-webkit-scrollbar-thumb:hover{background:#64748b}

/* TeamFox v5.9.4 — ações da lista de clientes sempre visíveis */
@media (min-width: 768px) {
  .tf-clients-compact thead th:last-child,
  .tf-clients-compact td.tf-actions-cell {
    position: sticky;
    right: 0;
  }
  .tf-clients-compact thead th:last-child {
    z-index: 14;
    background: #fbfbfc;
    box-shadow: -10px 0 14px -14px rgba(15,23,42,.55);
  }
  .tf-clients-compact td.tf-actions-cell {
    z-index: 13;
    background: var(--bs-body-bg, #fff);
    box-shadow: -10px 0 14px -14px rgba(15,23,42,.45);
    overflow: visible;
  }
  .tf-clients-compact tbody tr:hover td.tf-actions-cell {
    background: var(--bs-table-hover-bg, #f8f9fa);
  }
  .tf-actions-cell .dropdown.show {
    z-index: 1095;
  }
  .tf-actions-cell .dropdown-menu {
    z-index: 1100 !important;
  }
}

/* TeamFox v5.9.5 — dropdown da coluna Ações acima das restantes linhas */
@media (min-width: 768px) {
  .tf-clients-compact td.tf-actions-cell.tf-dropdown-open {
    z-index: 1200 !important;
  }
  .tf-clients-compact td.tf-actions-cell.tf-dropdown-open .dropdown,
  .tf-clients-compact td.tf-actions-cell.tf-dropdown-open .dropdown.show {
    z-index: 1201 !important;
  }
  .tf-clients-compact td.tf-actions-cell.tf-dropdown-open .dropdown-menu {
    z-index: 1202 !important;
  }
}


/* TeamFox v5.9.6 — notas visíveis diretamente na lista de clientes */
.tf-client-note {
  margin-top: .16rem;
  max-width: 310px;
  font-size: .72rem;
  line-height: 1.25;
}
.tf-client-note > summary {
  display: block;
  cursor: pointer;
  color: #8a6500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: .08rem .22rem;
  margin-left: -.22rem;
  border-radius: .3rem;
  user-select: none;
}
.tf-client-note > summary::-webkit-details-marker { display: none; }
.tf-client-note > summary:hover { background: rgba(255,193,7,.12); }
.tf-client-note[open] > summary {
  color: #6b4f00;
  font-weight: 600;
  white-space: normal;
}
.tf-client-note-body {
  margin-top: .28rem;
  padding: .42rem .5rem;
  max-width: 420px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  color: var(--bs-body-color, #212529);
  background: #fff9e6;
  border: 1px solid rgba(255,193,7,.35);
  border-left: 3px solid #ffc107;
  border-radius: .38rem;
  box-shadow: 0 .12rem .45rem rgba(15,23,42,.06);
}
.tf-client-note-mobile { max-width: 100%; margin-top: .22rem; }
.tf-client-note-mobile .tf-client-note-body { max-width: none; }

/* ========================================================================== */
/* TeamFox Modern v1.2 — variante visual sobre a BASE funcional v5.9.7     */
/* Apenas apresentação: backend, rotas, base de dados e helpers não alterados. */
/* ========================================================================== */
.tf-modern{
  --tf-dark:#20242d;--tf-dark2:#171a21;--tf-orange:#ffb000;--tf-blue:#2775ff;
  --tf-bg:#eef1f5;--tf-card:#ffffff;--tf-border:#e3e7ed;--tf-text:#252a34;
  background:var(--tf-bg);color:var(--tf-text)
}
.tf-modern .sidebar{width:260px;min-width:260px;background:linear-gradient(180deg,#20242d 0%,#282d37 55%,#20242d 100%);padding:0!important;border-right:1px solid rgba(255,255,255,.04);box-shadow:8px 0 28px rgba(15,23,42,.08)}
.tf-sidebar-brand{padding:1.35rem 1.25rem 1.1rem;border-bottom:1px solid rgba(255,255,255,.075)}
.tf-sidebar-brand .brand{display:flex;align-items:center;gap:.65rem;line-height:1}
.tf-brand-mark{width:38px;height:38px;display:inline-flex;align-items:center;justify-content:center;border-radius:11px;background:linear-gradient(135deg,#ff2d78,#ff7a18);font-size:.86rem;font-weight:900;letter-spacing:-.03em;color:#fff;box-shadow:0 8px 20px rgba(255,45,120,.23)}
.tf-brand-name{font-size:1.24rem;letter-spacing:.08em}.tf-brand-name>span{color:#ffba08}
.tf-brand-subtitle{font-size:.55rem;letter-spacing:.26em;color:#7f8998;margin-left:3.25rem;margin-top:.28rem;font-weight:700}
.tf-sidebar-profile{display:flex;align-items:center;gap:.75rem;margin:.95rem 1rem 1.1rem;padding:.85rem;border-radius:.8rem;background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.07)}
.tf-avatar{width:42px;height:42px;flex:0 0 42px;border-radius:12px;display:grid;place-items:center;font-size:1.2rem;color:#fff;background:linear-gradient(135deg,#0ea5e9,#2563eb)}
.tf-profile-name{font-weight:700;color:#f8fafc;font-size:.84rem}.tf-profile-role{font-size:.68rem;color:#9ca7b8}.tf-profile-online{font-size:.62rem;color:#72d79f;margin-top:.08rem}.tf-profile-online span{display:inline-block;width:6px;height:6px;border-radius:50%;background:#36cf7c;margin-right:.25rem;box-shadow:0 0 0 3px rgba(54,207,124,.12)}
.tf-modern .nav-section{font-size:.61rem;color:#697588;letter-spacing:.14em;font-weight:800;padding-left:.75rem}
.tf-modern .sidebar .nav{gap:.17rem!important}.tf-modern .sidebar .nav-link{position:relative;color:#aeb7c5;border-radius:.55rem;padding:.62rem .75rem;font-size:.78rem;font-weight:600;gap:.75rem;transition:.16s ease}
.tf-modern .sidebar .nav-link i{width:18px;text-align:center;font-size:.95rem;color:#8390a3;transition:.16s ease}.tf-modern .sidebar .nav-link:hover{background:rgba(255,255,255,.055);color:#fff;transform:translateX(2px)}.tf-modern .sidebar .nav-link:hover i{color:#fff}
.tf-modern .sidebar .nav-link.active{background:linear-gradient(90deg,rgba(255,176,0,.18),rgba(255,176,0,.055));box-shadow:none;color:#fff}.tf-modern .sidebar .nav-link.active:before{content:"";position:absolute;left:-.75rem;top:18%;bottom:18%;width:3px;border-radius:3px;background:#ffb000}.tf-modern .sidebar .nav-link.active i{color:#ffbd25}
.tf-modern .tf-version-footer{font-size:.66rem;color:#697588;padding:.8rem 1.1rem 1rem!important;border-top:1px solid rgba(255,255,255,.06)}
.tf-modern .main-area{background:linear-gradient(180deg,#f5f6f8 0,#eef1f5 100%)}
.tf-modern .topbar{min-height:68px;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--tf-border);box-shadow:0 4px 18px rgba(15,23,42,.035)}
.tf-topbar-symbol{width:36px;height:36px;border-radius:10px;background:#242a34;color:#fff;display:grid;place-items:center}.tf-topbar-caption{font-size:.66rem;color:#8b94a3;margin-top:.05rem}.tf-topbar-role{font-size:.66rem;font-weight:800;background:#edf2ff;color:#3659c9;border-radius:999px;padding:.35rem .55rem}.tf-topbar-user{font-size:.78rem;color:#667085;font-weight:650}.tf-btn-ghost{border:1px solid #e0e5eb;background:#fff;color:#5c6675}.tf-btn-ghost:hover{background:#f7f8fa;border-color:#ccd3dc;color:#222}
.tf-modern .tf-main-content{max-width:1900px;margin:0 auto}.tf-dashboard-hero{padding:.2rem .15rem}.tf-eyebrow{font-size:.62rem;font-weight:900;letter-spacing:.16em;color:#ee5b24;margin-bottom:.25rem}.tf-modern .page-title{font-size:1.7rem;font-weight:800;letter-spacing:-.025em}.tf-primary-action{border:0;background:linear-gradient(135deg,#3377ff,#2155d7);box-shadow:0 8px 18px rgba(37,99,235,.18)}
.tf-modern .panel-card{border:1px solid var(--tf-border);border-radius:.8rem;box-shadow:0 7px 24px rgba(30,41,59,.055)}.tf-modern .panel-card>.card-header{background:#fff!important;border-bottom:1px solid #edf0f4;padding:.75rem .95rem}.tf-modern .panel-card>.card-header strong,.tf-modern .panel-card>.card-header .fw-semibold{font-weight:750}
.tf-modern .table thead th{background:#f7f8fa;color:#7d8795;font-size:.65rem;letter-spacing:.055em;border-bottom-color:#e7eaf0}.tf-modern .table tbody td{border-color:#edf0f4}.tf-modern .table tbody tr:hover{background:#fbfcfd}
.tf-kpi{position:relative;overflow:hidden;border:0!important;border-radius:.72rem!important;color:#fff!important;box-shadow:0 8px 18px rgba(30,41,59,.11)!important;min-height:132px;transition:transform .17s ease,box-shadow .17s ease}.tf-kpi:hover{transform:translateY(-3px);box-shadow:0 13px 25px rgba(30,41,59,.16)!important}.tf-kpi .card-body{position:relative;z-index:2;padding:1rem 1rem .78rem}.tf-kpi .label{color:rgba(255,255,255,.88)!important;font-size:.65rem;font-weight:800;letter-spacing:.055em}.tf-kpi .value{font-size:1.85rem;line-height:1.05;color:#fff!important;margin-top:.4rem}.tf-kpi .small,.tf-kpi .value small{color:rgba(255,255,255,.75)!important}.tf-kpi-icon{position:absolute;right:.82rem;top:.65rem;font-size:2.5rem;opacity:.19;z-index:0}.tf-kpi-footer{position:relative;z-index:2;margin-top:auto;padding:.42rem .95rem;background:rgba(0,0,0,.105);font-size:.67rem;font-weight:700;display:flex;align-items:center;justify-content:space-between;color:rgba(255,255,255,.92)}
.tf-kpi-cyan{background:linear-gradient(135deg,#14b8d4,#009dc4)}.tf-kpi-green{background:linear-gradient(135deg,#13b968,#079d55)}.tf-kpi-slate{background:linear-gradient(135deg,#64748b,#475569)}.tf-kpi-red{background:linear-gradient(135deg,#ef5543,#d83c2c)}.tf-kpi-amber{background:linear-gradient(135deg,#ffb52d,#f39b00)}.tf-kpi-purple{background:linear-gradient(135deg,#7868d8,#5c4fc0)}.tf-kpi-emerald{background:linear-gradient(135deg,#17b77d,#079965)}.tf-kpi-blue{background:linear-gradient(135deg,#3f7be5,#255dcb)}.tf-kpi-rose{background:linear-gradient(135deg,#e73d78,#c92662)}.tf-kpi-indigo{background:linear-gradient(135deg,#5368df,#394fc6)}
.tf-modern .card:not(.tf-kpi){--bs-card-border-color:#e4e8ee}.tf-modern .border.rounded{border-color:#e5e9ef!important;border-radius:.68rem!important;background:#fbfcfd}.tf-modern .progress{background:#edf0f4}.tf-modern a{--bs-link-color:#2b63d9}.tf-modern .btn{border-radius:.5rem;font-weight:650}.tf-modern .badge{border-radius:.4rem}
.tf-modern .oscam-card-v2{border-left-color:#ffb000!important}.tf-modern .tf-clients-compact tbody tr{background:#fff}.tf-modern .tf-client-note-body{box-shadow:none}
/* login */
.tf-modern-login{position:relative;overflow:hidden;background:radial-gradient(circle at 20% 10%,#252c45 0,#141824 42%,#090b12 100%)}.tf-login-shell{width:min(420px,94vw);z-index:2}.tf-modern-login .login-card{width:100%;background:rgba(18,22,33,.88);border:1px solid rgba(255,255,255,.10);box-shadow:0 25px 70px rgba(0,0,0,.48)!important;backdrop-filter:blur(20px)}.tf-modern-login .login-card h1{color:#fff}.tf-modern-login .login-card .text-muted,.tf-modern-login .form-label{color:#aeb7c6!important}.tf-modern-login .input-group-text{background:#171c28;border-color:#313848;color:#7d8aa0}.tf-modern-login .form-control{background:#121722;border-color:#313848;color:#fff}.tf-modern-login .form-control:focus{background:#121722;color:#fff;border-color:#e94379;box-shadow:0 0 0 .2rem rgba(233,67,121,.13)}.tf-login-brand .brand-dark{color:#fff}.tf-login-mark{width:52px;height:52px;margin:0 auto .65rem;border-radius:15px;display:grid;place-items:center;background:linear-gradient(135deg,#ef2f79,#ff7a18);color:#fff;font-weight:900;box-shadow:0 10px 35px rgba(239,47,121,.28)}.tf-login-tag{font-size:.57rem;letter-spacing:.19em;color:#788499;font-weight:800}.tf-login-icon{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,#e32f72,#8e3fd1)}.tf-login-button{border:0;background:linear-gradient(90deg,#e92f78,#ff6e2c);box-shadow:0 10px 25px rgba(233,47,120,.2)}.tf-login-button:hover{filter:brightness(1.06)}.tf-login-foot{font-size:.67rem;color:#687386}.tf-login-orb{position:absolute;border-radius:50%;filter:blur(2px);opacity:.55}.tf-login-orb-a{width:360px;height:360px;left:-100px;top:10%;background:radial-gradient(circle,#183c8b 0,rgba(24,60,139,0) 69%)}.tf-login-orb-b{width:390px;height:390px;right:-120px;bottom:6%;background:radial-gradient(circle,#7e1b56 0,rgba(126,27,86,0) 70%)}
@media(max-width:991.98px){.tf-modern .tf-mobile-nav{background:linear-gradient(90deg,#20242d,#292f3a)!important}.tf-modern .tf-offcanvas{background:#20242d!important}.tf-modern .tf-main-content{padding:.85rem!important}.tf-kpi{min-height:122px}.tf-kpi .value{font-size:1.55rem}.tf-kpi-icon{font-size:2rem}.tf-modern .page-title{font-size:1.5rem}}
@media(max-width:575.98px){.tf-kpi{min-height:116px}.tf-kpi .card-body{padding:.78rem}.tf-kpi .label{font-size:.58rem}.tf-kpi .value{font-size:1.4rem}.tf-kpi-footer{font-size:.59rem;padding:.35rem .75rem}.tf-dashboard-hero .tf-primary-action{width:100%}}

/* ========================================================================== */
/* TeamFox Modern v1.2 — polimento visual sobre a BASE funcional v5.9.7    */
/* Apenas apresentação: backend, rotas, BD e integrações permanecem iguais.    */
/* ========================================================================== */
.tf-modern{
  --tf-dark:#1d222b;--tf-dark2:#171b22;--tf-orange:#f4a900;--tf-blue:#3268dc;
  --tf-bg:#eef1f4;--tf-card:#fff;--tf-border:#dfe4ea;--tf-text:#252b34;
  --tf-muted:#6d7785;--tf-topbar:#20252e;
}
/* Sidebar: mais compacta e com separação visual mais clara */
.tf-modern .sidebar{width:248px;min-width:248px;background:linear-gradient(180deg,#1d222b 0%,#252b35 54%,#1c2028 100%);box-shadow:8px 0 24px rgba(15,23,42,.075)}
.tf-sidebar-brand{padding:1.05rem 1.05rem .82rem}
.tf-brand-mark{width:35px;height:35px;border-radius:10px;font-size:.8rem}
.tf-brand-name{font-size:1.14rem}.tf-brand-subtitle{font-size:.51rem;margin-left:3rem;margin-top:.18rem;letter-spacing:.23em}
.tf-sidebar-profile{gap:.62rem;margin:.68rem .8rem .78rem;padding:.65rem .72rem;border-radius:.7rem;background:rgba(255,255,255,.047)}
.tf-avatar{width:36px;height:36px;flex-basis:36px;border-radius:10px;font-size:1rem}
.tf-profile-name{font-size:.79rem}.tf-profile-role{font-size:.63rem}.tf-profile-online{font-size:.59rem}
.tf-modern .sidebar-scroll{padding-left:.68rem!important;padding-right:.68rem!important}
.tf-modern .nav-section{position:relative;display:flex;align-items:center;gap:.55rem;font-size:.58rem;color:#7c8798;letter-spacing:.16em;padding-left:.55rem;margin-top:.65rem!important}
.tf-modern .nav-section:after{content:"";height:1px;flex:1;background:rgba(255,255,255,.07);margin-right:.25rem}
.tf-modern .sidebar .nav{gap:.08rem!important}
.tf-modern .sidebar .nav-link{padding:.55rem .65rem;font-size:.75rem;gap:.65rem;border-radius:.5rem}
.tf-modern .sidebar .nav-link i{font-size:.9rem;color:#8d99aa}
.tf-modern .sidebar .nav-link.active{background:linear-gradient(90deg,rgba(244,169,0,.16),rgba(244,169,0,.045))}
.tf-modern .sidebar .nav-link.active:before{left:-.68rem;background:#f4a900}
.tf-modern .sidebar .nav-link.active i{color:#ffc236}
.tf-modern .tf-version-footer{font-size:.61rem;color:#7c8798;padding:.62rem .85rem .75rem!important}

/* Topbar integrado no tema escuro */
.tf-modern .topbar{min-height:58px;background:linear-gradient(90deg,#1f242d,#272d37);border-bottom:1px solid rgba(255,255,255,.055);box-shadow:0 5px 18px rgba(15,23,42,.10);color:#f8fafc;padding-top:.65rem!important;padding-bottom:.65rem!important}
.tf-modern .tf-topbar-symbol{width:32px;height:32px;border-radius:9px;background:rgba(255,255,255,.09);color:#f8fafc;border:1px solid rgba(255,255,255,.08)}
.tf-modern .tf-topbar-caption{color:#919bab;font-size:.61rem}
.tf-modern .tf-topbar-role{background:rgba(70,119,255,.16);color:#a9c2ff;border:1px solid rgba(105,145,255,.16);padding:.29rem .5rem;font-size:.62rem}
.tf-modern .tf-topbar-user{color:#d4d9e1;font-size:.74rem}
.tf-modern .tf-btn-ghost{background:rgba(255,255,255,.055);border-color:rgba(255,255,255,.12);color:#dbe1ea}
.tf-modern .tf-btn-ghost:hover{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.2);color:#fff}

/* Conteúdo mais compacto e mais legível */
.tf-modern .main-area{background:linear-gradient(180deg,#f4f6f8 0,#edf0f4 100%)}
.tf-modern .tf-main-content{max-width:1820px;padding-top:1.25rem!important}
.tf-dashboard-hero{margin-bottom:1.05rem!important;padding:.05rem .1rem}
.tf-eyebrow{font-size:.58rem;color:#e35d2d;letter-spacing:.18em;margin-bottom:.18rem}
.tf-modern .page-title{font-size:1.62rem;line-height:1.1}
.tf-dashboard-hero .text-muted{color:#707a88!important;font-size:.82rem}
.tf-primary-action{padding:.48rem .75rem;box-shadow:0 6px 14px rgba(37,99,235,.16)}

/* KPIs: paleta coordenada e menor altura */
.tf-kpi-grid{--bs-gutter-x:.78rem;--bs-gutter-y:.78rem;margin-bottom:1rem!important}
.tf-kpi{min-height:116px;border-radius:.68rem!important;box-shadow:0 6px 15px rgba(30,41,59,.10)!important}
.tf-kpi:hover{transform:translateY(-2px);box-shadow:0 9px 20px rgba(30,41,59,.14)!important}
.tf-kpi .card-body{padding:.78rem .82rem .58rem}
.tf-kpi .label{font-size:.60rem;letter-spacing:.065em}.tf-kpi .value{font-size:1.58rem;margin-top:.28rem}.tf-kpi .small{font-size:.67rem}
.tf-kpi-icon{right:.7rem;top:.5rem;font-size:2.15rem;opacity:.17}
.tf-kpi-footer{padding:.34rem .78rem;font-size:.60rem;background:rgba(0,0,0,.085)}
.tf-kpi-cyan{background:linear-gradient(135deg,#219ebc,#1689a5)}
.tf-kpi-green{background:linear-gradient(135deg,#23a86a,#158d58)}
.tf-kpi-slate{background:linear-gradient(135deg,#657486,#536171)}
.tf-kpi-red{background:linear-gradient(135deg,#e65a4d,#cc4439)}
.tf-kpi-amber{background:linear-gradient(135deg,#f7b733,#e79a14)}
.tf-kpi-purple{background:linear-gradient(135deg,#7766c7,#6451b2)}
.tf-kpi-emerald{background:linear-gradient(135deg,#20a77a,#138c65)}
.tf-kpi-blue{background:linear-gradient(135deg,#4275d3,#315fb7)}
.tf-kpi-rose{background:linear-gradient(135deg,#d94d78,#bf3764)}
.tf-kpi-indigo{background:linear-gradient(135deg,#586fcf,#4459b5)}

/* Cards, tabelas e blocos */
.tf-modern .panel-card{border-color:#e0e5ea;border-radius:.72rem;box-shadow:0 5px 17px rgba(30,41,59,.047)}
.tf-modern .panel-card>.card-header{padding:.66rem .85rem;border-bottom-color:#e9edf1}
.tf-modern .panel-card>.card-header,.tf-modern .panel-card>.card-header.bg-white{background:#fbfcfd!important}
.tf-modern .panel-card>.card-header strong,.tf-modern .panel-card>.card-header .fw-semibold{font-size:.82rem;color:#303741}
.tf-modern .table{font-size:.79rem}.tf-modern .table thead th{font-size:.61rem;color:#707b89;background:#f6f8fa;padding-top:.55rem;padding-bottom:.55rem}.tf-modern .table tbody td{padding-top:.55rem;padding-bottom:.55rem;color:#39414b}
.tf-modern .table tbody tr:hover{background:#f8fafc}
.tf-modern .text-muted{color:#75808e!important}
.tf-modern .small,.tf-modern small{font-size:.72em}
.tf-modern .border.rounded{background:#fafbfd;border-color:#e3e7ec!important}
.tf-modern .progress{height:.28rem;background:#e8ecf0}
.tf-modern .list-group-item{border-color:#edf0f3}
.tf-modern .btn{border-radius:.46rem}.tf-modern .badge{border-radius:.38rem}

/* Formulários: contraste leve e consistente */
.tf-modern .form-control,.tf-modern .form-select{background:#fff;border-color:#d9e0e7;color:#303741}
.tf-modern .form-control:focus,.tf-modern .form-select:focus{border-color:#7aa3ef;box-shadow:0 0 0 .17rem rgba(50,104,220,.11)}

/* Login v1.1 */
.tf-modern-login{background:radial-gradient(circle at 18% 12%,#29334e 0,#151a26 43%,#090c12 100%)}
.tf-modern-login .login-card{border-color:rgba(255,255,255,.085);border-radius:.9rem;box-shadow:0 22px 58px rgba(0,0,0,.43)!important}
.tf-login-mark{width:48px;height:48px;border-radius:14px;margin-bottom:.55rem}
.tf-login-button{background:linear-gradient(90deg,#e83a76,#f36a35)}

@media(max-width:1199.98px){.tf-modern .tf-main-content{max-width:none}.tf-kpi{min-height:112px}}
@media(max-width:991.98px){
  .tf-modern .tf-main-content{padding-top:.8rem!important}
  .tf-modern .tf-mobile-nav{background:linear-gradient(90deg,#1d222b,#262c36)!important}
  .tf-kpi{min-height:108px}.tf-kpi .value{font-size:1.45rem}.tf-kpi-icon{font-size:1.9rem}
}
@media(max-width:575.98px){
  .tf-kpi{min-height:104px}.tf-kpi .card-body{padding:.68rem}.tf-kpi-footer{padding:.3rem .65rem}
  .tf-dashboard-hero{margin-bottom:.8rem!important}.tf-modern .page-title{font-size:1.42rem}
}


/* TeamFox v5.9.9 — ticker da barra superior */
.tf-topbar-ticker-shell{position:absolute;z-index:5;top:50%;transform:translateY(-50%);left:clamp(310px,31vw,500px);right:clamp(240px,25vw,430px);height:28px;min-width:0;overflow:hidden;display:flex;align-items:center;pointer-events:none;-webkit-mask-image:linear-gradient(to right,transparent,#000 3%,#000 97%,transparent);mask-image:linear-gradient(to right,transparent,#000 3%,#000 97%,transparent)}
.tf-topbar-ticker-track{display:flex;align-items:center;width:max-content;max-width:none;will-change:transform;animation:tf-topbar-ticker 38s linear infinite;pointer-events:auto}.tf-topbar-ticker-shell:hover .tf-topbar-ticker-track{animation-play-state:paused}.tf-topbar-ticker-group{display:flex;align-items:center;flex-shrink:0;gap:2rem;padding-right:2rem}.tf-topbar-ticker-item{display:inline-flex;align-items:center;gap:.4rem;white-space:nowrap;color:inherit;text-decoration:none;font-size:.78rem;line-height:1.2;opacity:.84}.tf-topbar-ticker-item:hover{color:inherit;text-decoration:none;opacity:1}.tf-topbar-ticker-title{font-weight:750}.tf-topbar-ticker-text{font-weight:500;opacity:.82;max-width:520px;overflow:hidden;text-overflow:ellipsis}.tf-topbar-ticker-dot{width:7px;height:7px;flex:0 0 7px;border-radius:999px;background:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.14)}.tf-ticker-aviso .tf-topbar-ticker-dot,.tf-ticker-important .tf-topbar-ticker-dot{background:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,.14)}.tf-ticker-manutencao .tf-topbar-ticker-dot{background:#f59e0b;box-shadow:0 0 0 3px rgba(245,158,11,.14)}.tf-ticker-ficheiro .tf-topbar-ticker-dot{background:#22c55e;box-shadow:0 0 0 3px rgba(34,197,94,.14)}.tf-ticker-comercial .tf-topbar-ticker-dot{background:#06b6d4;box-shadow:0 0 0 3px rgba(6,182,212,.14)}.tf-ticker-important{font-weight:700}@keyframes tf-topbar-ticker{from{transform:translateX(0)}to{transform:translateX(-50%)}}@media(max-width:1199.98px){.tf-topbar-ticker-shell{display:none}}@media(prefers-reduced-motion:reduce){.tf-topbar-ticker-track{animation:none}.tf-topbar-ticker-group[aria-hidden="true"]{display:none}.tf-topbar-ticker-shell{-webkit-mask-image:none;mask-image:none}}


/* TeamFox v5.9.9 — ícones modernos */
.tf-nav-icon{width:1.15rem;min-width:1.15rem;display:inline-flex;align-items:center;justify-content:center;text-align:center;font-size:.96rem;line-height:1;transition:color .16s ease,transform .16s ease}.tf-modern .sidebar .nav-link:hover .tf-nav-icon,.tf-offcanvas .nav-link:hover .tf-nav-icon{transform:translateY(-1px)}.tf-offcanvas .tf-nav-icon{color:#8d99aa}.tf-offcanvas .nav-link.active .tf-nav-icon{color:#ffc236}.tf-mobile-bottom-icon.bi{font-size:1.12rem;line-height:1}.tf-mobile-bottom-icon .bi{font-size:1.08rem;line-height:1}


/* TeamFox v5.9.10 — ícones coloridos */"
if marker not in css:
    css += r'''

/* TeamFox v5.9.10 — ícones coloridos */
.tf-modern .sidebar .nav-link .tf-nav-icon,
.tf-offcanvas .nav-link .tf-nav-icon{
  width:1.5rem!important;min-width:1.5rem!important;height:1.5rem;
  display:inline-flex;align-items:center;justify-content:center;
  border-radius:.42rem;font-size:.88rem!important;line-height:1;
  transition:transform .16s ease,filter .16s ease,box-shadow .16s ease!important;
}
.tf-modern .sidebar .nav-link:hover .tf-nav-icon,
.tf-offcanvas .nav-link:hover .tf-nav-icon{
  transform:translateY(-1px) scale(1.05);
  filter:brightness(1.12);
}
.tf-modern .sidebar .nav-link.active .tf-nav-icon,
.tf-offcanvas .nav-link.active .tf-nav-icon{
  box-shadow:0 0 0 1px rgba(255,255,255,.055),0 4px 10px rgba(0,0,0,.16);
}

.tf-icon-dashboard{color:#fbbf24!important;background:rgba(251,191,36,.14)!important}
.tf-icon-clients{color:#38bdf8!important;background:rgba(56,189,248,.13)!important}
.tf-icon-announcements{color:#fb923c!important;background:rgba(251,146,60,.14)!important}
.tf-icon-payments{color:#34d399!important;background:rgba(52,211,153,.13)!important}
.tf-icon-report{color:#a78bfa!important;background:rgba(167,139,250,.14)!important}
.tf-icon-resellers{color:#60a5fa!important;background:rgba(96,165,250,.13)!important}
.tf-icon-packages{color:#e879f9!important;background:rgba(232,121,249,.13)!important}
.tf-icon-servers{color:#2dd4bf!important;background:rgba(45,212,191,.13)!important}
.tf-icon-instances{color:#818cf8!important;background:rgba(129,140,248,.14)!important}
.tf-icon-sync{color:#22d3ee!important;background:rgba(34,211,238,.13)!important}
.tf-icon-import{color:#f59e0b!important;background:rgba(245,158,11,.14)!important}
.tf-icon-oscam{color:#4ade80!important;background:rgba(74,222,128,.13)!important}
.tf-icon-traffic{color:#67e8f9!important;background:rgba(103,232,249,.12)!important}
.tf-icon-channels{color:#93c5fd!important;background:rgba(147,197,253,.13)!important}
.tf-icon-support{color:#fb923c!important;background:rgba(251,146,60,.14)!important}
.tf-icon-alerts{color:#f87171!important;background:rgba(248,113,113,.14)!important}
.tf-icon-automation{color:#facc15!important;background:rgba(250,204,21,.13)!important}
.tf-icon-devices{color:#34d399!important;background:rgba(52,211,153,.13)!important}
.tf-icon-cam{color:#22d3ee!important;background:rgba(34,211,238,.13)!important}
.tf-icon-vpn{color:#a78bfa!important;background:rgba(167,139,250,.14)!important}
.tf-icon-web{color:#60a5fa!important;background:rgba(96,165,250,.13)!important}
.tf-icon-reverse{color:#f472b6!important;background:rgba(244,114,182,.13)!important}
.tf-icon-backups{color:#4ade80!important;background:rgba(74,222,128,.13)!important}
.tf-icon-health{color:#2dd4bf!important;background:rgba(45,212,191,.13)!important}
.tf-icon-logs{color:#fbbf24!important;background:rgba(251,191,36,.13)!important}
.tf-icon-audit{color:#c084fc!important;background:rgba(192,132,252,.13)!important}
.tf-icon-settings{color:#fb7185!important;background:rgba(251,113,133,.13)!important}
.tf-icon-account{color:#60a5fa!important;background:rgba(96,165,250,.13)!important}

/* Mantém a cor própria de cada ícone mesmo com hover/seleção. */
.tf-modern .sidebar .nav-link:hover .tf-icon-dashboard,.tf-modern .sidebar .nav-link.active .tf-icon-dashboard{color:#fbbf24!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-clients,.tf-modern .sidebar .nav-link.active .tf-icon-clients{color:#38bdf8!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-announcements,.tf-modern .sidebar .nav-link.active .tf-icon-announcements{color:#fb923c!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-payments,.tf-modern .sidebar .nav-link.active .tf-icon-payments{color:#34d399!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-report,.tf-modern .sidebar .nav-link.active .tf-icon-report{color:#a78bfa!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-resellers,.tf-modern .sidebar .nav-link.active .tf-icon-resellers{color:#60a5fa!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-packages,.tf-modern .sidebar .nav-link.active .tf-icon-packages{color:#e879f9!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-servers,.tf-modern .sidebar .nav-link.active .tf-icon-servers{color:#2dd4bf!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-instances,.tf-modern .sidebar .nav-link.active .tf-icon-instances{color:#818cf8!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-sync,.tf-modern .sidebar .nav-link.active .tf-icon-sync{color:#22d3ee!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-import,.tf-modern .sidebar .nav-link.active .tf-icon-import{color:#f59e0b!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-oscam,.tf-modern .sidebar .nav-link.active .tf-icon-oscam{color:#4ade80!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-traffic,.tf-modern .sidebar .nav-link.active .tf-icon-traffic{color:#67e8f9!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-channels,.tf-modern .sidebar .nav-link.active .tf-icon-channels{color:#93c5fd!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-support,.tf-modern .sidebar .nav-link.active .tf-icon-support{color:#fb923c!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-alerts,.tf-modern .sidebar .nav-link.active .tf-icon-alerts{color:#f87171!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-automation,.tf-modern .sidebar .nav-link.active .tf-icon-automation{color:#facc15!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-devices,.tf-modern .sidebar .nav-link.active .tf-icon-devices{color:#34d399!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-cam,.tf-modern .sidebar .nav-link.active .tf-icon-cam{color:#22d3ee!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-vpn,.tf-modern .sidebar .nav-link.active .tf-icon-vpn{color:#a78bfa!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-web,.tf-modern .sidebar .nav-link.active .tf-icon-web{color:#60a5fa!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-reverse,.tf-modern .sidebar .nav-link.active .tf-icon-reverse{color:#f472b6!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-backups,.tf-modern .sidebar .nav-link.active .tf-icon-backups{color:#4ade80!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-health,.tf-modern .sidebar .nav-link.active .tf-icon-health{color:#2dd4bf!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-logs,.tf-modern .sidebar .nav-link.active .tf-icon-logs{color:#fbbf24!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-audit,.tf-modern .sidebar .nav-link.active .tf-icon-audit{color:#c084fc!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-settings,.tf-modern .sidebar .nav-link.active .tf-icon-settings{color:#fb7185!important}
.tf-modern .sidebar .nav-link:hover .tf-icon-account,.tf-modern .sidebar .nav-link.active .tf-icon-account{color:#60a5fa!important}

/* Navegação mobile também com cor. */
.tf-mobile-home{color:#fbbf24!important}
.tf-mobile-clients{color:#38bdf8!important}
.tf-mobile-oscam{color:#4ade80!important}
.tf-mobile-account{color:#60a5fa!important}
.tf-mobile-support{color:#fb923c!important}
.tf-mobile-menu{color:#a78bfa!important}



/* TeamFox v5.9.11 — reforço visual dos ícones */
.tf-modern .sidebar .nav-link .tf-nav-icon,
.tf-offcanvas .nav-link .tf-nav-icon{
  width:1.66rem!important;min-width:1.66rem!important;height:1.66rem;
  border-radius:.5rem;font-size:1rem!important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.04);
}
.tf-modern .sidebar .nav-link:hover .tf-nav-icon,
.tf-offcanvas .nav-link:hover .tf-nav-icon{
  transform:translateY(-1px) scale(1.065);
  filter:brightness(1.18) saturate(1.05);
}
.tf-modern .sidebar .nav-link.active .tf-nav-icon,
.tf-offcanvas .nav-link.active .tf-nav-icon{
  box-shadow:0 0 0 1px rgba(255,255,255,.07),0 7px 14px rgba(0,0,0,.18), inset 0 0 0 1px rgba(255,255,255,.035);
}
.tf-mobile-bottom-icon.bi{font-size:1.22rem;line-height:1}
.tf-mobile-bottom-icon .bi{font-size:1.16rem;line-height:1}

/* fundos um pouco mais visíveis */
.tf-icon-dashboard{background:rgba(251,191,36,.20)!important}
.tf-icon-clients{background:rgba(56,189,248,.18)!important}
.tf-icon-announcements{background:rgba(251,146,60,.20)!important}
.tf-icon-payments{background:rgba(52,211,153,.18)!important}
.tf-icon-report{background:rgba(167,139,250,.19)!important}
.tf-icon-resellers{background:rgba(96,165,250,.18)!important}
.tf-icon-packages{background:rgba(232,121,249,.18)!important}
.tf-icon-servers{background:rgba(45,212,191,.18)!important}
.tf-icon-instances{background:rgba(129,140,248,.19)!important}
.tf-icon-sync{background:rgba(34,211,238,.18)!important}
.tf-icon-import{background:rgba(245,158,11,.20)!important}
.tf-icon-oscam{background:rgba(74,222,128,.18)!important}
.tf-icon-traffic{background:rgba(103,232,249,.17)!important}
.tf-icon-channels{background:rgba(147,197,253,.18)!important}
.tf-icon-support{background:rgba(251,146,60,.20)!important}
.tf-icon-alerts{background:rgba(248,113,113,.20)!important}
.tf-icon-automation{background:rgba(250,204,21,.18)!important}
.tf-icon-devices{background:rgba(52,211,153,.18)!important}
.tf-icon-cam{background:rgba(34,211,238,.18)!important}
.tf-icon-vpn{background:rgba(167,139,250,.19)!important}
.tf-icon-web{background:rgba(96,165,250,.18)!important}
.tf-icon-reverse{background:rgba(244,114,182,.18)!important}
.tf-icon-backups{background:rgba(74,222,128,.18)!important}
.tf-icon-health{background:rgba(45,212,191,.18)!important}
.tf-icon-logs{background:rgba(251,191,36,.18)!important}
.tf-icon-audit{background:rgba(192,132,252,.18)!important}
.tf-icon-settings{background:rgba(251,113,133,.18)!important}
.tf-icon-account{background:rgba(96,165,250,.18)!important}

/* dashboards e páginas internas */
.tf-primary-action .bi{margin-right:.28rem}
.tf-kpi-icon{font-size:2.7rem;opacity:.24;filter:drop-shadow(0 4px 10px rgba(0,0,0,.08))}
.tf-section-icon{display:inline-flex;align-items:center;justify-content:center;width:1.72rem;height:1.72rem;border-radius:.54rem;margin-right:.5rem;vertical-align:-.32rem;font-size:.92rem;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04)}
.tf-sec-health{color:#2dd4bf;background:rgba(45,212,191,.16)}
.tf-sec-traffic{color:#22d3ee;background:rgba(34,211,238,.15)}
.tf-sec-oscam{color:#4ade80;background:rgba(74,222,128,.15)}
.tf-sec-oscam-live{color:#818cf8;background:rgba(129,140,248,.16)}
.tf-sec-resellers{color:#60a5fa;background:rgba(96,165,250,.15)}
.tf-sec-alerts{color:#f59e0b;background:rgba(245,158,11,.16)}
.tf-sec-servers{color:#e879f9;background:rgba(232,121,249,.15)}
.tf-modern .panel-card>.card-header strong .tf-section-icon,
.tf-modern .panel-card>.card-header .fw-semibold .tf-section-icon,
.tf-modern .panel-card>.card-header>span .tf-section-icon{transform:translateY(-1px)}


/* TeamFox Modern v1.6 — avisos no cabeçalho */
.tf-modern .topbar{position:sticky;top:0;z-index:20;overflow:hidden}
.tf-topbar-ticker-shell{
  position:absolute;z-index:6;top:50%;transform:translateY(-50%);
  left:clamp(350px,31vw,520px);right:clamp(250px,22vw,390px);
  height:30px;min-width:0;overflow:hidden;display:flex;align-items:center;
  pointer-events:none;
  -webkit-mask-image:linear-gradient(to right,transparent,#000 4%,#000 96%,transparent);
  mask-image:linear-gradient(to right,transparent,#000 4%,#000 96%,transparent)
}
.tf-topbar-ticker-track{display:flex;align-items:center;width:max-content;will-change:transform;animation:tf-topbar-ticker-v16 40s linear infinite;pointer-events:auto}
.tf-topbar-ticker-shell:hover .tf-topbar-ticker-track{animation-play-state:paused}
.tf-topbar-ticker-group{display:flex;align-items:center;flex-shrink:0;gap:2.2rem;padding-right:2.2rem}
.tf-topbar-ticker-item{display:inline-flex;align-items:center;gap:.42rem;white-space:nowrap;text-decoration:none;color:#cbd5e1;font-size:.74rem;line-height:1.2;opacity:.92}
.tf-topbar-ticker-item:hover{color:#fff;opacity:1;text-decoration:none}
.tf-topbar-ticker-icon{display:inline-flex;align-items:center;justify-content:center;width:1.38rem;height:1.38rem;border-radius:.42rem;color:#fbbf24;background:rgba(251,191,36,.15);font-size:.76rem}
.tf-topbar-ticker-title{font-weight:800;color:#fff}
.tf-topbar-ticker-text{font-weight:600;color:#aeb8c7;max-width:460px;overflow:hidden;text-overflow:ellipsis}
.tf-ticker-important .tf-topbar-ticker-icon,.tf-ticker-aviso .tf-topbar-ticker-icon{color:#fb7185;background:rgba(251,113,133,.16)}
.tf-ticker-manutencao .tf-topbar-ticker-icon{color:#fbbf24;background:rgba(251,191,36,.16)}
.tf-ticker-ficheiro .tf-topbar-ticker-icon{color:#4ade80;background:rgba(74,222,128,.15)}
.tf-ticker-comercial .tf-topbar-ticker-icon{color:#38bdf8;background:rgba(56,189,248,.15)}
@keyframes tf-topbar-ticker-v16{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media(max-width:1399.98px){.tf-topbar-ticker-shell{left:360px;right:260px}.tf-topbar-ticker-text{max-width:320px}}
@media(max-width:1199.98px){.tf-topbar-ticker-shell{display:none}}
@media(prefers-reduced-motion:reduce){.tf-topbar-ticker-track{animation:none}.tf-topbar-ticker-group[aria-hidden="true"]{display:none}.tf-topbar-ticker-shell{-webkit-mask-image:none;mask-image:none}}


/* TeamFox Modern v1.7 — destino das mensagens */
.tf-delivery-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}
.tf-delivery-option{position:relative;display:flex;align-items:center;gap:.8rem;min-height:78px;padding:.8rem .9rem;border:1px solid #dfe5ec;border-radius:.78rem;background:#fff;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}
.tf-delivery-option:hover{border-color:#c7d2e0;box-shadow:0 5px 16px rgba(30,41,59,.07);transform:translateY(-1px)}
.tf-delivery-option input{position:absolute;opacity:0;pointer-events:none}
.tf-delivery-option:has(input:checked){border-color:#4f7df3;box-shadow:0 0 0 3px rgba(79,125,243,.10),0 6px 18px rgba(30,41,59,.08)}
.tf-delivery-option strong{display:block;font-size:.9rem;color:#202938}
.tf-delivery-option small{display:block;margin-top:.18rem;color:#748094;font-size:.72rem;line-height:1.32}
.tf-delivery-icon{width:2.35rem;min-width:2.35rem;height:2.35rem;border-radius:.7rem;display:inline-flex;align-items:center;justify-content:center;font-size:1rem}
.tf-delivery-notifications{color:#3b82f6;background:rgba(59,130,246,.12)}
.tf-delivery-header{color:#f59e0b;background:rgba(245,158,11,.14)}
.tf-delivery-both{color:#ef4444;background:rgba(239,68,68,.12)}
@media(max-width:991.98px){.tf-delivery-grid{grid-template-columns:1fr}}
