/* ==========================================================================
   PREMIUM THEME — Mídia Play / WHMCS 9 · Twenty-One
   --------------------------------------------------------------------------
   Tema CLARO e a base (:root). O escuro entra por prefers-color-scheme e a
   escolha manual (data-theme no <html>, gravada em localStorage) vence ambos.
   Everything is driven by the custom properties in the token block below —
   change a token, the whole surface follows.

   Load order matters: this file MUST come after theme.min.css.
   ========================================================================== */

/* ==========================================================================
   1. DESIGN TOKENS
   ========================================================================== */

:root {
    /* --- Surfaces --- */
    --pt-bg:              #f1f5f9;
    --pt-bg-deep:         #e7edf4;
    --pt-bg-elev:         #ffffff;
    --pt-card:            #ffffff;
    --pt-card-hover:      #f8fafc;
    --pt-card-inset:      #f4f7fb;

    /* --- Lines --- */
    --pt-border:          rgba(15, 23, 42, .10);
    --pt-border-strong:   rgba(15, 23, 42, .18);
    --pt-divider:         rgba(15, 23, 42, .07);

    /* --- Type --- */
    --pt-text:            #1e293b;
    --pt-text-strong:     #0f172a;
    --pt-text-dim:        #64748b;
    --pt-text-mute:       #94a3b8;

    /* --- Brand --- */
    --pt-brand:           #059669;
    --pt-brand-hover:     #10B981;
    --pt-brand-active:    #047857;
    --pt-brand-soft:      rgba(16, 185, 129, .10);
    --pt-brand-ring:      rgba(16, 185, 129, .28);
    --pt-on-brand:        #ffffff;
    --pt-on-danger:       #ffffff;

    /* --- Semantic --- */
    --pt-amber:           #d97706;
    --pt-amber-soft:      rgba(245, 158, 11, .10);
    --pt-amber-ring:      rgba(245, 158, 11, .30);
    --pt-red:             #dc2626;
    --pt-red-soft:        rgba(239, 68, 68, .09);
    --pt-red-ring:        rgba(239, 68, 68, .28);
    --pt-blue:            #2563eb;
    --pt-blue-soft:       rgba(59, 130, 246, .09);
    --pt-violet:          #7c3aed;
    --pt-violet-soft:     rgba(139, 92, 246, .09);

    /* --- Elevation --- */
    --pt-shadow-sm:       0 2px 6px -2px rgba(15, 23, 42, .10);
    --pt-shadow:          0 10px 30px -10px rgba(15, 23, 42, .18);
    --pt-shadow-lg:       0 28px 68px -20px rgba(15, 23, 42, .26);
    --pt-shadow-xl:       0 44px 96px -28px rgba(15, 23, 42, .30);
    --pt-shadow-card:     0 0 0 1px var(--pt-border),
                          0 24px 64px -26px rgba(15, 23, 42, .28),
                          0 2px 8px -3px rgba(15, 23, 42, .14);
    --pt-glow-brand:      0 0 0 1px var(--pt-brand-ring), 0 16px 40px -14px rgba(16, 185, 129, .40);
    --pt-glow-brand-xl:   0 0 0 1px rgba(16, 185, 129, .40),
                          0 0 28px -6px rgba(16, 185, 129, .35),
                          0 22px 60px -20px rgba(16, 185, 129, .45);

    /* --- Tokens de componente (evitam seletores de tema espalhados) --- */
    --pt-inset-translucent: rgba(255, 255, 255, .72);
    --pt-auth-glow-a:     rgba(16, 185, 129, .12);
    --pt-auth-glow-b:     rgba(59, 130, 246, .10);
    --pt-alert-bg:        linear-gradient(120deg, #fff5f5, #fff9f2 62%);
    --pt-alert-icon-bg:   rgba(239, 68, 68, .10);
    --pt-alert-icon-fg:   #dc2626;
    --pt-alert-title:     #991b1b;
    --pt-alert-sub:       #b45309;

    /* --- Geometry --- */
    --pt-radius-sm:       12px;
    --pt-radius:          20px;
    --pt-radius-lg:       28px;
    --pt-radius-xl:       36px;
    --pt-radius-card:     16px;
    --pt-radius-pill:     999px;

    /* --- Motion --- */
    --pt-ease:            cubic-bezier(.4, 0, .2, 1);
    --pt-speed:           .22s;

    /* --- Type scale --- */
    --pt-font: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

/* --------------------------------------------------------------------------
   Camada 2 — automatico: obedece o sistema operacional do usuario.
   O :not([data-theme="light"]) garante que a escolha manual por Claro nao
   seja atropelada quando o SO esta em escuro.
   -------------------------------------------------------------------------- */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
    --pt-bg:              #0f172a;
    --pt-bg-deep:         #0b1120;
    --pt-bg-elev:         #131f38;
    --pt-card:            #1e293b;
    --pt-card-hover:      #24334a;
    --pt-card-inset:      #17233a;

    --pt-border:          rgba(148, 163, 184, .14);
    --pt-border-strong:   rgba(148, 163, 184, .28);
    --pt-divider:         rgba(148, 163, 184, .10);

    --pt-text:            #e2e8f0;
    --pt-text-strong:     #f8fafc;
    --pt-text-dim:        #94a3b8;
    --pt-text-mute:       #64748b;

    --pt-brand:           #10B981;
    --pt-brand-hover:     #34d399;
    --pt-brand-active:    #059669;
    --pt-brand-soft:      rgba(16, 185, 129, .12);
    --pt-brand-ring:      rgba(16, 185, 129, .32);
    --pt-on-brand:        #05261b;
    --pt-on-danger:       #ffffff;

    --pt-amber:           #f59e0b;
    --pt-amber-soft:      rgba(245, 158, 11, .12);
    --pt-amber-ring:      rgba(245, 158, 11, .30);
    --pt-red:             #ef4444;
    --pt-red-soft:        rgba(239, 68, 68, .12);
    --pt-red-ring:        rgba(239, 68, 68, .30);
    --pt-blue:            #3b82f6;
    --pt-blue-soft:       rgba(59, 130, 246, .12);
    --pt-violet:          #8b5cf6;
    --pt-violet-soft:     rgba(139, 92, 246, .12);

    --pt-shadow-sm:       0 2px 6px -1px rgba(0, 0, 0, .38);
    --pt-shadow:          0 10px 30px -8px rgba(0, 0, 0, .55);
    --pt-shadow-lg:       0 28px 68px -16px rgba(0, 0, 0, .70);
    --pt-shadow-xl:       0 44px 96px -24px rgba(0, 0, 0, .78);
    --pt-shadow-card:     0 0 0 1px var(--pt-border),
                          0 24px 64px -20px rgba(0, 0, 0, .75),
                          0 2px 8px -2px rgba(0, 0, 0, .4);
    --pt-glow-brand:      0 0 0 1px var(--pt-brand-ring), 0 16px 40px -12px rgba(16, 185, 129, .55);
    --pt-glow-brand-xl:   0 0 0 1px rgba(16, 185, 129, .45),
                          0 0 28px -4px rgba(16, 185, 129, .45),
                          0 22px 60px -18px rgba(16, 185, 129, .70);

    --pt-inset-translucent: rgba(15, 23, 42, .38);
    --pt-auth-glow-a:     rgba(16, 185, 129, .16);
    --pt-auth-glow-b:     rgba(59, 130, 246, .12);
    --pt-alert-bg:        radial-gradient(32rem 16rem at 4% -40%, rgba(239, 68, 68, .22), transparent 64%),
                          linear-gradient(120deg, #2a1416, #1e1113 62%);
    --pt-alert-icon-bg:   rgba(239, 68, 68, .16);
    --pt-alert-icon-fg:   #fca5a5;
    --pt-alert-title:     #fecaca;
    --pt-alert-sub:       rgba(254, 202, 202, .72);
    }
}

/* --------------------------------------------------------------------------
   Camada 3 — manual: o atributo posto pelo JS sempre vence.
   -------------------------------------------------------------------------- */
:root[data-theme="dark"] {
    --pt-bg:              #0f172a;
    --pt-bg-deep:         #0b1120;
    --pt-bg-elev:         #131f38;
    --pt-card:            #1e293b;
    --pt-card-hover:      #24334a;
    --pt-card-inset:      #17233a;

    --pt-border:          rgba(148, 163, 184, .14);
    --pt-border-strong:   rgba(148, 163, 184, .28);
    --pt-divider:         rgba(148, 163, 184, .10);

    --pt-text:            #e2e8f0;
    --pt-text-strong:     #f8fafc;
    --pt-text-dim:        #94a3b8;
    --pt-text-mute:       #64748b;

    --pt-brand:           #10B981;
    --pt-brand-hover:     #34d399;
    --pt-brand-active:    #059669;
    --pt-brand-soft:      rgba(16, 185, 129, .12);
    --pt-brand-ring:      rgba(16, 185, 129, .32);
    --pt-on-brand:        #05261b;
    --pt-on-danger:       #ffffff;

    --pt-amber:           #f59e0b;
    --pt-amber-soft:      rgba(245, 158, 11, .12);
    --pt-amber-ring:      rgba(245, 158, 11, .30);
    --pt-red:             #ef4444;
    --pt-red-soft:        rgba(239, 68, 68, .12);
    --pt-red-ring:        rgba(239, 68, 68, .30);
    --pt-blue:            #3b82f6;
    --pt-blue-soft:       rgba(59, 130, 246, .12);
    --pt-violet:          #8b5cf6;
    --pt-violet-soft:     rgba(139, 92, 246, .12);

    --pt-shadow-sm:       0 2px 6px -1px rgba(0, 0, 0, .38);
    --pt-shadow:          0 10px 30px -8px rgba(0, 0, 0, .55);
    --pt-shadow-lg:       0 28px 68px -16px rgba(0, 0, 0, .70);
    --pt-shadow-xl:       0 44px 96px -24px rgba(0, 0, 0, .78);
    --pt-shadow-card:     0 0 0 1px var(--pt-border),
                          0 24px 64px -20px rgba(0, 0, 0, .75),
                          0 2px 8px -2px rgba(0, 0, 0, .4);
    --pt-glow-brand:      0 0 0 1px var(--pt-brand-ring), 0 16px 40px -12px rgba(16, 185, 129, .55);
    --pt-glow-brand-xl:   0 0 0 1px rgba(16, 185, 129, .45),
                          0 0 28px -4px rgba(16, 185, 129, .45),
                          0 22px 60px -18px rgba(16, 185, 129, .70);

    --pt-inset-translucent: rgba(15, 23, 42, .38);
    --pt-auth-glow-a:     rgba(16, 185, 129, .16);
    --pt-auth-glow-b:     rgba(59, 130, 246, .12);
    --pt-alert-bg:        radial-gradient(32rem 16rem at 4% -40%, rgba(239, 68, 68, .22), transparent 64%),
                          linear-gradient(120deg, #2a1416, #1e1113 62%);
    --pt-alert-icon-bg:   rgba(239, 68, 68, .16);
    --pt-alert-icon-fg:   #fca5a5;
    --pt-alert-title:     #fecaca;
    --pt-alert-sub:       rgba(254, 202, 202, .72);
}

:root[data-theme="light"] {
    /* --- Surfaces --- */
    --pt-bg:              #f1f5f9;
    --pt-bg-deep:         #e7edf4;
    --pt-bg-elev:         #ffffff;
    --pt-card:            #ffffff;
    --pt-card-hover:      #f8fafc;
    --pt-card-inset:      #f4f7fb;

    /* --- Lines --- */
    --pt-border:          rgba(15, 23, 42, .10);
    --pt-border-strong:   rgba(15, 23, 42, .18);
    --pt-divider:         rgba(15, 23, 42, .07);

    /* --- Type --- */
    --pt-text:            #1e293b;
    --pt-text-strong:     #0f172a;
    --pt-text-dim:        #64748b;
    --pt-text-mute:       #94a3b8;

    /* --- Brand --- */
    --pt-brand:           #059669;
    --pt-brand-hover:     #10B981;
    --pt-brand-active:    #047857;
    --pt-brand-soft:      rgba(16, 185, 129, .10);
    --pt-brand-ring:      rgba(16, 185, 129, .28);
    --pt-on-brand:        #ffffff;
    --pt-on-danger:       #ffffff;

    /* --- Semantic --- */
    --pt-amber:           #d97706;
    --pt-amber-soft:      rgba(245, 158, 11, .10);
    --pt-amber-ring:      rgba(245, 158, 11, .30);
    --pt-red:             #dc2626;
    --pt-red-soft:        rgba(239, 68, 68, .09);
    --pt-red-ring:        rgba(239, 68, 68, .28);
    --pt-blue:            #2563eb;
    --pt-blue-soft:       rgba(59, 130, 246, .09);
    --pt-violet:          #7c3aed;
    --pt-violet-soft:     rgba(139, 92, 246, .09);

    /* --- Elevation --- */
    --pt-shadow-sm:       0 2px 6px -2px rgba(15, 23, 42, .10);
    --pt-shadow:          0 10px 30px -10px rgba(15, 23, 42, .18);
    --pt-shadow-lg:       0 28px 68px -20px rgba(15, 23, 42, .26);
    --pt-shadow-xl:       0 44px 96px -28px rgba(15, 23, 42, .30);
    --pt-shadow-card:     0 0 0 1px var(--pt-border),
                          0 24px 64px -26px rgba(15, 23, 42, .28),
                          0 2px 8px -3px rgba(15, 23, 42, .14);
    --pt-glow-brand:      0 0 0 1px var(--pt-brand-ring), 0 16px 40px -14px rgba(16, 185, 129, .40);
    --pt-glow-brand-xl:   0 0 0 1px rgba(16, 185, 129, .40),
                          0 0 28px -6px rgba(16, 185, 129, .35),
                          0 22px 60px -20px rgba(16, 185, 129, .45);

    /* --- Tokens de componente (evitam seletores de tema espalhados) --- */
    --pt-inset-translucent: rgba(255, 255, 255, .72);
    --pt-auth-glow-a:     rgba(16, 185, 129, .12);
    --pt-auth-glow-b:     rgba(59, 130, 246, .10);
    --pt-alert-bg:        linear-gradient(120deg, #fff5f5, #fff9f2 62%);
    --pt-alert-icon-bg:   rgba(239, 68, 68, .10);
    --pt-alert-icon-fg:   #dc2626;
    --pt-alert-title:     #991b1b;
    --pt-alert-sub:       #b45309;
}

/* ==========================================================================
   2. GLOBAL SHELL
   The two redesigned pages live inside the stock header/footer, so the shell
   has to follow them into dark mode or the result reads as broken.
   ========================================================================== */

html { color-scheme: light; }
@media (prefers-color-scheme: dark) {
    html:not([data-theme="light"]) { color-scheme: dark; }
}
html[data-theme="dark"] { color-scheme: dark; }
html[data-theme="light"] { color-scheme: light; }

body.primary-bg-color,
body {
    background: var(--pt-bg) !important;
    color: var(--pt-text);
    font-family: var(--pt-font);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* Ambient depth — two very soft brand washes behind the content. */
body::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    background:
        radial-gradient(60rem 30rem at 12% -8%, rgba(16, 185, 129, .10), transparent 60%),
        radial-gradient(50rem 28rem at 92% 4%, rgba(59, 130, 246, .08), transparent 62%);
}
/* Camadas explicitas. A regra generica antiga (body > * { z-index: 1 })
   colocava o header e o #main-body no mesmo nivel - e como o #main-body vem
   depois no DOM, ele pintava por cima dos dropdowns do menu. */
body > * { position: relative; }
#header                 { position: relative; z-index: 9999; }
.master-breadcrumb      { position: relative; z-index: 9990; }
#main-body              { position: relative; z-index: 1; }
#footer, .footer        { position: relative; z-index: 1; }

#main-body {
    background: transparent !important;
    padding-top: 28px;
    padding-bottom: 56px;
}

/* --- Header / navigation --- */
#header .topbar {
    background: var(--pt-bg-deep) !important;
    border-bottom: 1px solid var(--pt-divider);
}
#header .navbar,
#header .navbar.navbar-light {
    background: var(--pt-bg-deep) !important;
    border-bottom: 1px solid var(--pt-border);
}
#header .navbar .nav-link,
#header .topbar .btn,
#header .navbar-nav > li > a {
    color: var(--pt-text-dim) !important;
    transition: color var(--pt-speed) var(--pt-ease);
}
#header .navbar .nav-link:hover,
#header .navbar .nav-link:focus,
#header .navbar-nav > li > a:hover,
#header .topbar .btn:hover {
    color: var(--pt-text-strong) !important;
}
#header .navbar .nav-item.active > .nav-link {
    color: var(--pt-brand) !important;
}
.btn-active-client,
.active-client .input-group-text {
    background: var(--pt-card) !important;
    border-color: var(--pt-border) !important;
    color: var(--pt-text) !important;
}

/* --- Sidebars --- */
.panel.panel-sidebar,
.card.card-sidebar,
#main-body .panel,
#secondary-sidebar .panel {
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-sm);
    color: var(--pt-text);
    overflow: hidden;
}
.panel-sidebar .panel-heading,
.card-sidebar .card-header {
    background: var(--pt-card-inset) !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    color: var(--pt-text-strong) !important;
}
.list-group-item {
    background: transparent !important;
    border-color: var(--pt-divider) !important;
    color: var(--pt-text-dim) !important;
    transition: background var(--pt-speed) var(--pt-ease), color var(--pt-speed) var(--pt-ease);
}
.list-group-item:hover,
.list-group-item-action:hover {
    background: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
.list-group-item.active {
    background: var(--pt-brand-soft) !important;
    color: var(--pt-brand) !important;
    border-color: var(--pt-border) !important;
}

/* --- Footer --- */
#footer,
.footer {
    background: var(--pt-bg-deep) !important;
    border-top: 1px solid var(--pt-border);
    color: var(--pt-text-mute);
}
#footer a { color: var(--pt-text-dim); }
#footer a:hover { color: var(--pt-brand); }

/* --- Typography --- */
h1, h2, h3, h4, h5, h6 { color: var(--pt-text-strong); }
a { color: var(--pt-brand); transition: color var(--pt-speed) var(--pt-ease); }
a:hover, a:focus { color: var(--pt-brand-hover); text-decoration: none; }
hr { border-top-color: var(--pt-divider); }
.text-muted { color: var(--pt-text-mute) !important; }

/* --- Focus ring (accessibility) --- */
a:focus-visible,
button:focus-visible,
.btn:focus-visible,
[tabindex]:focus-visible {
    outline: 2px solid var(--pt-brand);
    outline-offset: 2px;
    border-radius: var(--pt-radius-sm);
}


/* ==========================================================================
   3. PRIMITIVES — buttons, alerts, badges, forms, dropdowns
   ========================================================================== */

/* --- Buttons --- */
.pt-scope .btn,
.btn {
    border-radius: var(--pt-radius-sm);
    font-weight: 600;
    letter-spacing: .01em;
    transition: background var(--pt-speed) var(--pt-ease),
                border-color var(--pt-speed) var(--pt-ease),
                color var(--pt-speed) var(--pt-ease),
                transform var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease);
}
.pt-scope .btn:active { transform: translateY(1px); }

.pt-btn {
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .55rem;
    padding: .68rem 1.15rem;
    font-size: .875rem;
    font-weight: 600;
    line-height: 1.2;
    border: 1px solid transparent;
    border-radius: var(--pt-radius-sm);
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-btn i { font-size: .95em; }
.pt-btn--block { width: 100%; }
.pt-btn--sm { padding: .45rem .8rem; font-size: .8rem; }
.pt-btn--lg { padding: .85rem 1.6rem; font-size: .95rem; }

.pt-btn--primary {
    background: var(--pt-brand);
    border-color: var(--pt-brand);
    color: var(--pt-on-brand);
    box-shadow: 0 6px 18px -8px var(--pt-brand-ring);
}
.pt-btn--primary:hover,
.pt-btn--primary:focus {
    background: var(--pt-brand-hover);
    border-color: var(--pt-brand-hover);
    color: var(--pt-on-brand);
    transform: translateY(-1px);
    box-shadow: var(--pt-glow-brand);
}
.pt-btn--primary:active { transform: translateY(0); background: var(--pt-brand-active); }

.pt-btn--ghost {
    background: transparent;
    border-color: var(--pt-border-strong);
    color: var(--pt-text-dim);
}
.pt-btn--ghost:hover {
    background: var(--pt-card-hover);
    border-color: var(--pt-brand);
    color: var(--pt-text-strong);
}

.pt-btn--soft {
    background: var(--pt-brand-soft);
    border-color: var(--pt-brand-ring);
    color: var(--pt-brand);
}
.pt-btn--soft:hover { background: var(--pt-brand); color: var(--pt-on-brand); }

.pt-btn--amber {
    background: var(--pt-amber);
    border-color: var(--pt-amber);
    color: #2b1a00;
}
.pt-btn--amber:hover { filter: brightness(1.08); color: #2b1a00; transform: translateY(-1px); }

.pt-btn--danger {
    background: transparent;
    border-color: var(--pt-red-ring);
    color: var(--pt-red);
}
.pt-btn--danger:hover { background: var(--pt-red); border-color: var(--pt-red); color: var(--pt-on-danger); }

.pt-btn.disabled,
.pt-btn[disabled] { opacity: .5; pointer-events: none; }

/* --- Alerts --- */
.pt-scope .alert,
#main-body .alert {
    border-radius: var(--pt-radius);
    border: 1px solid var(--pt-border);
    background: var(--pt-card);
    color: var(--pt-text);
    box-shadow: var(--pt-shadow-sm);
    padding: 1rem 1.15rem;
}
#main-body .alert-success { border-left: 3px solid var(--pt-brand); background: var(--pt-brand-soft); color: var(--pt-text); }
#main-body .alert-info    { border-left: 3px solid var(--pt-blue);  background: var(--pt-blue-soft);  color: var(--pt-text); }
#main-body .alert-warning { border-left: 3px solid var(--pt-amber); background: var(--pt-amber-soft); color: var(--pt-text); }
#main-body .alert-danger,
#main-body .alert-error   { border-left: 3px solid var(--pt-red);   background: var(--pt-red-soft);   color: var(--pt-text); }

/* --- Badges --- */
.pt-badge {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    padding: .22rem .6rem;
    border-radius: var(--pt-radius-pill);
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    line-height: 1.5;
}
.pt-badge--brand  { background: var(--pt-brand-soft);  color: var(--pt-brand);  border: 1px solid var(--pt-brand-ring); }
.pt-badge--amber  { background: var(--pt-amber-soft);  color: var(--pt-amber);  border: 1px solid var(--pt-amber-ring); }
.pt-badge--red    { background: var(--pt-red-soft);    color: var(--pt-red);    border: 1px solid var(--pt-red-ring); }
.pt-badge--blue   { background: var(--pt-blue-soft);   color: var(--pt-blue);   border: 1px solid var(--pt-border-strong); }
.pt-badge--muted  { background: var(--pt-card-inset);  color: var(--pt-text-mute); border: 1px solid var(--pt-border); }

/* --- Forms --- */
#main-body .form-control,
#main-body .custom-select {
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius-sm);
    color: var(--pt-text);
    transition: border-color var(--pt-speed) var(--pt-ease), box-shadow var(--pt-speed) var(--pt-ease);
}
#main-body .form-control:focus {
    background: var(--pt-card-inset);
    border-color: var(--pt-brand);
    box-shadow: 0 0 0 3px var(--pt-brand-ring);
    color: var(--pt-text);
}
#main-body .form-control::placeholder { color: var(--pt-text-mute); }
#main-body label,
#main-body .col-form-label { color: var(--pt-text-dim); }

/* --- Tables --- */
#main-body .table { color: var(--pt-text); }
#main-body .table th {
    border-color: var(--pt-divider) !important;
    color: var(--pt-text-mute);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
}
#main-body .table td { border-color: var(--pt-divider) !important; }
#main-body .table-hover tbody tr:hover { background: var(--pt-card-hover); color: var(--pt-text-strong); }

/* --- Dropdowns (used for the retention menu) --- */
.pt-scope .dropdown-menu {
    background: var(--pt-bg-elev);
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-lg);
    padding: .4rem;
    min-width: 230px;
    animation: ptFadeSlide .18s var(--pt-ease);
}
.pt-scope .dropdown-item {
    border-radius: var(--pt-radius-sm);
    color: var(--pt-text-dim);
    font-size: .85rem;
    font-weight: 500;
    padding: .58rem .7rem;
    display: flex;
    align-items: center;
    gap: .6rem;
    transition: background var(--pt-speed) var(--pt-ease), color var(--pt-speed) var(--pt-ease);
}
.pt-scope .dropdown-item:hover,
.pt-scope .dropdown-item:focus {
    background: var(--pt-card-hover);
    color: var(--pt-text-strong);
}
.pt-scope .dropdown-item--danger { color: var(--pt-text-mute); }
.pt-scope .dropdown-item--danger:hover,
.pt-scope .dropdown-item--danger:focus {
    background: var(--pt-red-soft);
    color: var(--pt-red);
}
.pt-scope .dropdown-item.disabled { opacity: .45; pointer-events: none; }
.pt-scope .dropdown-header {
    color: var(--pt-text-mute);
    font-size: .66rem;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    padding: .55rem .7rem .3rem;
}
.pt-scope .dropdown-divider { border-top-color: var(--pt-divider); margin: .35rem .2rem; }

@keyframes ptFadeSlide {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}


/* ==========================================================================
   4. PAGE HEADER + THEME TOGGLE
   ========================================================================== */

.pt-pagehead {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1.25rem;
    flex-wrap: wrap;
    margin-bottom: 1.75rem;
}
.pt-pagehead__eyebrow {
    display: block;
    color: var(--pt-brand);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    margin-bottom: .4rem;
}
.pt-pagehead__title {
    margin: 0;
    font-size: clamp(1.5rem, 1.1rem + 1.6vw, 2.1rem);
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--pt-text-strong);
    line-height: 1.15;
}
.pt-pagehead__sub {
    margin: .45rem 0 0;
    color: var(--pt-text-dim);
    font-size: .92rem;
}
.pt-pagehead__actions { display: flex; align-items: center; gap: .6rem; }

/* --- Toggle --- */
.pt-themetoggle {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    height: 40px;
    padding: 0 .95rem;
    background: var(--pt-card);
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius-pill);
    color: var(--pt-text-dim);
    font-size: .8rem;
    font-weight: 600;
    cursor: pointer;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-themetoggle:hover {
    color: var(--pt-text-strong);
    border-color: var(--pt-brand);
    background: var(--pt-card-hover);
}
.pt-themetoggle i { font-size: .95rem; }
/* O rotulo mostra o tema para o qual o clique VAI mudar, nao o atual.
   Precisa das tres camadas: base clara, automatico do SO, escolha manual. */
.pt-themetoggle .pt-themetoggle__dark,
.pt-themetoggle .pt-themetoggle__light { display: none; }

/* base = claro -> oferece escuro */
.pt-themetoggle .pt-themetoggle__dark { display: inline-flex; align-items: center; gap: .5rem; }

/* SO escuro (sem escolha manual por claro) -> oferece claro */
@media (prefers-color-scheme: dark) {
    html:not([data-theme="light"]) .pt-themetoggle .pt-themetoggle__dark { display: none; }
    html:not([data-theme="light"]) .pt-themetoggle .pt-themetoggle__light { display: inline-flex; align-items: center; gap: .5rem; }
}

/* escolha manual vence os dois de cima */
html[data-theme="dark"] .pt-themetoggle .pt-themetoggle__dark { display: none; }
html[data-theme="dark"] .pt-themetoggle .pt-themetoggle__light { display: inline-flex; align-items: center; gap: .5rem; }
html[data-theme="light"] .pt-themetoggle .pt-themetoggle__light { display: none; }
html[data-theme="light"] .pt-themetoggle .pt-themetoggle__dark { display: inline-flex; align-items: center; gap: .5rem; }


/* ==========================================================================
   5. DASHBOARD — stat tiles
   ========================================================================== */

.pt-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 1rem;
    margin-bottom: 1.75rem;
}
@media (max-width: 991px) { .pt-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .75rem; } }
@media (max-width: 575px) {
    .pt-stat { padding: 1.05rem 1.05rem .95rem; }
    .pt-stat__icon { width: 34px; height: 34px; margin-bottom: .7rem; font-size: .9rem; }
    .pt-stat__value { font-size: 1.7rem; }
}
@media (max-width: 359px) { .pt-stats { grid-template-columns: 1fr; } }

.pt-stat {
    position: relative;
    display: block;
    padding: 1.35rem 1.4rem 1.25rem;
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-sm);
    overflow: hidden;
    text-decoration: none;
    isolation: isolate;
    transition: transform var(--pt-speed) var(--pt-ease),
                border-color var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease),
                background var(--pt-speed) var(--pt-ease);
}
.pt-stat::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    opacity: 0;
    background: radial-gradient(22rem 12rem at 100% 0%, var(--pt-stat-tint, var(--pt-brand-soft)), transparent 70%);
    transition: opacity var(--pt-speed) var(--pt-ease);
}
.pt-stat:hover {
    transform: translateY(-3px);
    border-color: var(--pt-stat-accent, var(--pt-brand));
    box-shadow: var(--pt-shadow-lg);
    text-decoration: none;
}
.pt-stat:hover::after { opacity: 1; }

.pt-stat__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    margin-bottom: .95rem;
    border-radius: var(--pt-radius-sm);
    background: var(--pt-stat-tint, var(--pt-brand-soft));
    color: var(--pt-stat-accent, var(--pt-brand));
    font-size: 1rem;
}
.pt-stat__value {
    font-size: 2.1rem;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -.03em;
    color: var(--pt-text-strong);
    font-variant-numeric: tabular-nums;
}
.pt-stat__label {
    margin-top: .4rem;
    color: var(--pt-text-dim);
    font-size: .82rem;
    font-weight: 500;
}
.pt-stat__bar {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 3px;
    background: var(--pt-stat-accent, var(--pt-brand));
    opacity: .55;
    transition: opacity var(--pt-speed) var(--pt-ease);
}
.pt-stat:hover .pt-stat__bar { opacity: 1; }

.pt-stat--services { --pt-stat-accent: var(--pt-brand);  --pt-stat-tint: var(--pt-brand-soft); }
.pt-stat--domains  { --pt-stat-accent: var(--pt-blue);   --pt-stat-tint: var(--pt-blue-soft); }
.pt-stat--quotes   { --pt-stat-accent: var(--pt-violet); --pt-stat-tint: var(--pt-violet-soft); }
.pt-stat--tickets  { --pt-stat-accent: var(--pt-violet); --pt-stat-tint: var(--pt-violet-soft); }
.pt-stat--invoices { --pt-stat-accent: var(--pt-amber);  --pt-stat-tint: var(--pt-amber-soft); }

/* Services tile is the hero of the dashboard. */
.pt-stat--services {
    background: linear-gradient(150deg, var(--pt-brand-soft), var(--pt-card) 46%);
    border-color: var(--pt-brand-ring);
}
.pt-stat--services .pt-stat__value { color: var(--pt-brand); }
.pt-stat--services .pt-stat__bar { opacity: 1; }

/* Unpaid invoices demand attention only when there actually are any. */
.pt-stat--invoices.is-due {
    background: linear-gradient(150deg, var(--pt-amber-soft), var(--pt-card) 46%);
    border-color: var(--pt-amber-ring);
}
.pt-stat--invoices.is-due .pt-stat__value { color: var(--pt-amber); }
.pt-stat--invoices.is-due .pt-stat__icon {
    background: var(--pt-amber);
    color: #2b1a00;
}


/* ==========================================================================
   6. DASHBOARD — home panel cards
   The $panels output is untouched; only the shell around it changed.
   ========================================================================== */

.pt-panels { display: block; }
.pt-panels__full { display: block; }

.pt-panels__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.25rem;
    align-items: start;
}
@media (max-width: 991px) { .pt-panels__grid { grid-template-columns: 1fr; gap: 1rem; } }

.pt-panels__col { display: flex; flex-direction: column; gap: 1.25rem; min-width: 0; }
@media (max-width: 991px) { .pt-panels__col { gap: 1rem; } }

/* --- The card itself --- */
.pt-panels .card,
.pt-panel {
    position: relative;
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-sm);
    color: var(--pt-text);
    overflow: hidden;
    margin: 0;
    transition: transform var(--pt-speed) var(--pt-ease),
                border-color var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease);
}
.pt-panels__full .pt-panel { margin-bottom: 1.25rem; }
.pt-panel:hover {
    border-color: var(--pt-border-strong);
    box-shadow: var(--pt-shadow);
}

/* Accent rail — colour comes from the panel's own getExtra('color'). */
.pt-panel::before {
    content: "";
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 2px;
    background: var(--pt-panel-accent, var(--pt-border-strong));
    opacity: .85;
}
.pt-panel.card-accent-green  { --pt-panel-accent: var(--pt-brand); }
.pt-panel.card-accent-blue   { --pt-panel-accent: var(--pt-blue); }
.pt-panel.card-accent-red    { --pt-panel-accent: var(--pt-red); }
.pt-panel.card-accent-gold,
.pt-panel.card-accent-orange { --pt-panel-accent: var(--pt-amber); }
.pt-panel.card-accent-purple { --pt-panel-accent: var(--pt-violet); }

.pt-panel .card-header {
    background: transparent !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    padding: 1.05rem 1.3rem;
}
.pt-panel .card-title {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: .6rem;
    font-size: .95rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: var(--pt-text-strong);
    margin: 0;
}
.pt-panel .card-title > i {
    color: var(--pt-panel-accent, var(--pt-brand));
    font-size: .95rem;
    width: 1.1em;
    text-align: center;
}
.pt-panel .card-title .badge {
    background: var(--pt-card-inset);
    color: var(--pt-text-dim);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius-pill);
    font-size: .68rem;
    font-weight: 700;
    padding: .22rem .55rem;
}
.pt-panel .card-title .float-right {
    order: 1;            /* button is first in WHMCS markup - push it past the label */
    margin-left: auto;
    float: none;
}
.pt-panel .card-title .float-right .btn {
    text-decoration: none;
    background: var(--pt-brand-soft) !important;
    border: 1px solid var(--pt-brand-ring) !important;
    color: var(--pt-brand) !important;
    border-radius: var(--pt-radius-pill);
    font-size: .72rem;
    font-weight: 600;
    padding: .3rem .75rem;
}
.pt-panel .card-title .float-right .btn:hover {
    background: var(--pt-brand) !important;
    color: var(--pt-on-brand) !important;
}

.pt-panel .card-body { padding: 1.15rem 1.3rem; color: var(--pt-text-dim); font-size: .88rem; }
.pt-panel .card-body a { color: var(--pt-brand); }
.pt-panel .card-body p:last-child { margin-bottom: 0; }

.pt-panel .list-group { border-radius: 0; }
.pt-panel .list-group-item {
    display: block;
    text-decoration: none;
    background: transparent !important;
    border: 0 !important;
    border-top: 1px solid var(--pt-divider) !important;
    padding: .8rem 1.3rem;
    font-size: .86rem;
    color: var(--pt-text-dim) !important;
}
.pt-panel .list-group-item:first-child { border-top: 0 !important; }
.pt-panel .list-group-item i { color: var(--pt-text-mute); width: 1.1em; text-align: center; }
.pt-panel .list-group-item:hover i { color: var(--pt-panel-accent, var(--pt-brand)); }
.pt-panel .list-group-item .badge {
    float: right;
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border);
    color: var(--pt-text-dim);
    border-radius: var(--pt-radius-pill);
    padding: .2rem .55rem;
    font-size: .68rem;
}

.pt-panel .card-footer {
    background: var(--pt-card-inset) !important;
    border-top: 1px solid var(--pt-divider) !important;
    padding: .85rem 1.3rem;
    font-size: .82rem;
    color: var(--pt-text-mute);
}
/* WHMCS always emits the footer div; collapse it when it has nothing in it. */
.pt-panel .card-footer:empty { display: none; }

/* --- Emphasis: Active Services --- */
.pt-panel--services {
    border-color: var(--pt-brand-ring);
    box-shadow: 0 0 0 1px var(--pt-brand-ring), var(--pt-shadow);
    background:
        linear-gradient(160deg, var(--pt-brand-soft), transparent 38%),
        var(--pt-card);
}
.pt-panel--services::before { background: var(--pt-brand); opacity: 1; height: 3px; }
.pt-panel--services .card-title,
.pt-panel--services .card-title > i { color: var(--pt-brand); }
.pt-panel--services .list-group-item:hover { background: var(--pt-brand-soft) !important; }

/* --- Emphasis: Unpaid Invoices (amber alert, red when overdue) --- */
.pt-panel--invoices {
    border-color: var(--pt-amber-ring);
    box-shadow: 0 0 0 1px var(--pt-amber-ring), var(--pt-shadow);
    background:
        linear-gradient(160deg, var(--pt-amber-soft), transparent 38%),
        var(--pt-card);
}
.pt-panel--invoices::before { background: var(--pt-amber); opacity: 1; height: 3px; }
.pt-panel--invoices .card-title,
.pt-panel--invoices .card-title > i { color: var(--pt-amber); }
.pt-panel--invoices .card-title .badge {
    background: var(--pt-amber);
    border-color: var(--pt-amber);
    color: #2b1a00;
}
.pt-panel--invoices .card-title .float-right .btn {
    background: var(--pt-amber) !important;
    border-color: var(--pt-amber) !important;
    color: #2b1a00 !important;
}
.pt-panel--invoices .card-title .float-right .btn:hover { filter: brightness(1.1); }
.pt-panel--invoices .list-group-item:hover { background: var(--pt-amber-soft) !important; }
.pt-panel--invoices .list-group-item .badge {
    background: var(--pt-amber-soft);
    border-color: var(--pt-amber-ring);
    color: var(--pt-amber);
}

.pt-panel--invoices.is-overdue {
    border-color: var(--pt-red-ring);
    box-shadow: 0 0 0 1px var(--pt-red-ring), var(--pt-shadow);
    background: linear-gradient(160deg, var(--pt-red-soft), transparent 38%), var(--pt-card);
}
.pt-panel--invoices.is-overdue::before { background: var(--pt-red); }
.pt-panel--invoices.is-overdue .card-title,
.pt-panel--invoices.is-overdue .card-title > i { color: var(--pt-red); }

/* --- Addon / hook output --- */
.pt-addons > div + div { margin-top: 1.25rem; }
.pt-addons .card,
.pt-addons .panel {
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    color: var(--pt-text);
}


/* ==========================================================================
   7. PRODUCT DETAILS — hero
   ========================================================================== */

.pt-service { display: block; }

.pt-hero {
    position: relative;
    padding: 1.75rem;
    margin-bottom: 1.5rem;
    background:
        radial-gradient(38rem 20rem at 88% -30%, var(--pt-brand-soft), transparent 62%),
        var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius-lg);
    box-shadow: var(--pt-shadow);
    overflow: hidden;
}
.pt-hero::before {
    content: "";
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--pt-brand), transparent 65%);
}
@media (max-width: 575px) { .pt-hero { padding: 1.25rem; } }

.pt-hero__top {
    display: flex;
    align-items: flex-start;
    gap: 1.15rem;
    flex-wrap: wrap;
}
.pt-hero__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 56px;
    height: 56px;
    border-radius: var(--pt-radius);
    background: var(--pt-brand-soft);
    border: 1px solid var(--pt-brand-ring);
    color: var(--pt-brand);
    font-size: 1.4rem;
}
.pt-hero__id { flex: 1 1 260px; min-width: 0; }
.pt-hero__group {
    display: block;
    color: var(--pt-text-mute);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    margin-bottom: .3rem;
}
.pt-hero__name {
    margin: 0;
    font-size: clamp(1.3rem, 1.05rem + 1.1vw, 1.75rem);
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--pt-text-strong);
    line-height: 1.2;
    word-break: break-word;
}
.pt-hero__meta {
    display: flex;
    align-items: center;
    gap: .6rem;
    flex-wrap: wrap;
    margin-top: .65rem;
}
.pt-hero__domain {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    color: var(--pt-text-dim);
    font-size: .85rem;
}
.pt-hero__actions {
    display: flex;
    align-items: center;
    gap: .55rem;
    flex-wrap: wrap;
    margin-left: auto;
}
@media (max-width: 767px) { .pt-hero__actions { margin-left: 0; width: 100%; } }

/* --- Status pill --- */
.pt-status {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    padding: .3rem .75rem;
    border-radius: var(--pt-radius-pill);
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border);
    color: var(--pt-text-dim);
}
.pt-status__dot {
    width: 7px; height: 7px;
    border-radius: 50%;
    background: currentColor;
    flex: 0 0 auto;
}
.pt-status--active {
    background: var(--pt-brand-soft);
    border-color: var(--pt-brand-ring);
    color: var(--pt-brand);
}
.pt-status--active .pt-status__dot {
    box-shadow: 0 0 0 0 var(--pt-brand-ring);
    animation: ptPulse 2.4s infinite;
}
.pt-status--pending {
    background: var(--pt-blue-soft);
    border-color: var(--pt-border-strong);
    color: var(--pt-blue);
}
.pt-status--suspended {
    background: var(--pt-amber-soft);
    border-color: var(--pt-amber-ring);
    color: var(--pt-amber);
}
.pt-status--terminated,
.pt-status--cancelled,
.pt-status--fraud {
    background: var(--pt-red-soft);
    border-color: var(--pt-red-ring);
    color: var(--pt-red);
}

@keyframes ptPulse {
    0%   { box-shadow: 0 0 0 0 var(--pt-brand-ring); }
    70%  { box-shadow: 0 0 0 7px rgba(16, 185, 129, 0); }
    100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}

/* --- Discrete "Ações" gear --- */
.pt-gear {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .45rem;
    height: 40px;
    min-width: 40px;
    padding: 0 .8rem;
    background: transparent;
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius-sm);
    color: var(--pt-text-mute);
    font-size: .82rem;
    font-weight: 600;
    cursor: pointer;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-gear:hover,
.pt-gear:focus,
.show > .pt-gear {
    background: var(--pt-card-hover);
    border-color: var(--pt-border-strong);
    color: var(--pt-text-strong);
}
.pt-gear::after { display: none; }   /* kill Bootstrap's caret */
.pt-gear__label { display: inline; }
@media (max-width: 575px) { .pt-gear__label { display: none; } }


/* --- Hero compacto: usado quando o spotlight do app ja abriu a pagina --- */
.pt-hero--compact {
    padding: 1.35rem 1.5rem;
    border-radius: var(--pt-radius);
    background: var(--pt-card);
    box-shadow: var(--pt-shadow-sm);
}
.pt-hero--compact::before { opacity: .35; }
.pt-hero--compact .pt-hero__icon {
    width: 42px;
    height: 42px;
    font-size: 1.05rem;
    border-radius: var(--pt-radius-sm);
}
.pt-hero--compact .pt-hero__name { font-size: clamp(1.1rem, .95rem + .7vw, 1.35rem); }
.pt-hero--compact .pt-meta { margin-top: 1.15rem; }
@media (max-width: 575px) { .pt-hero--compact { padding: 1.1rem; } }


/* ==========================================================================
   8. PRODUCT DETAILS — billing meta grid
   ========================================================================== */

.pt-meta {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 1px;
    margin-top: 1.6rem;
    background: var(--pt-border);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    overflow: hidden;
}
.pt-meta__cell {
    background: var(--pt-card);
    padding: .95rem 1.05rem;
    min-width: 0;
}
.pt-meta__label {
    display: block;
    color: var(--pt-text-mute);
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    margin-bottom: .38rem;
}
.pt-meta__value {
    color: var(--pt-text-strong);
    font-size: .95rem;
    font-weight: 600;
    word-break: break-word;
}
.pt-meta__value--brand { color: var(--pt-brand); }
.pt-meta__value--amber { color: var(--pt-amber); }
.pt-meta__cell--warn { background: var(--pt-amber-soft); }
.pt-meta__cell--warn .pt-meta__value { color: var(--pt-amber); }


/* ==========================================================================
   9. SYNCBOX SPOTLIGHT
   The module's own client area output is the point of this page — it gets
   the largest, brightest surface and sits above everything else.
   ========================================================================== */

.pt-spotlight {
    position: relative;
    margin-bottom: 1.5rem;
    background:
        radial-gradient(46rem 24rem at 14% -20%, rgba(16, 185, 129, .16), transparent 60%),
        radial-gradient(38rem 22rem at 92% 120%, rgba(59, 130, 246, .10), transparent 62%),
        var(--pt-card);
    border: 1px solid var(--pt-brand-ring);
    border-radius: var(--pt-radius-lg);
    box-shadow: var(--pt-glow-brand), var(--pt-shadow-lg);
    overflow: hidden;
}
.pt-spotlight::before {
    content: "";
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--pt-brand), var(--pt-blue));
}

.pt-spotlight__head {
    display: flex;
    align-items: center;
    gap: .85rem;
    flex-wrap: wrap;
    padding: 1.4rem 1.75rem;
    border-bottom: 1px solid var(--pt-divider);
}
.pt-spotlight__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: var(--pt-radius-sm);
    background: var(--pt-brand);
    color: var(--pt-on-brand);
    font-size: 1.05rem;
    box-shadow: 0 8px 22px -8px var(--pt-brand-ring);
}
.pt-spotlight__titles { min-width: 0; }
.pt-spotlight__title {
    margin: 0;
    font-size: 1.05rem;
    font-weight: 700;
    letter-spacing: -.01em;
    color: var(--pt-text-strong);
}
.pt-spotlight__sub {
    margin: .18rem 0 0;
    color: var(--pt-text-dim);
    font-size: .84rem;
}
.pt-spotlight__badge { margin-left: auto; }
@media (max-width: 767px) { .pt-spotlight__badge { margin-left: 0; } }

.pt-spotlight__body { padding: 1.75rem; }
@media (max-width: 575px) {
    .pt-spotlight__head { padding: 1.1rem 1.15rem; }
    .pt-spotlight__body { padding: 1.15rem; }
}

/* --- Taming whatever markup the module prints --- */
.pt-modulearea { color: var(--pt-text); text-align: left; font-size: .92rem; }
.pt-modulearea h1,
.pt-modulearea h2,
.pt-modulearea h3,
.pt-modulearea h4,
.pt-modulearea h5 { color: var(--pt-text-strong); letter-spacing: -.01em; }
.pt-modulearea hr { border-top-color: var(--pt-divider); }
.pt-modulearea code,
.pt-modulearea kbd,
.pt-modulearea pre {
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius-sm);
    color: var(--pt-brand);
    padding: .18rem .45rem;
    font-size: .88em;
}
.pt-modulearea pre { padding: .9rem 1rem; overflow-x: auto; }
.pt-modulearea .well,
.pt-modulearea .panel,
.pt-modulearea .card {
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: none;
    color: var(--pt-text);
}
.pt-modulearea .table { color: var(--pt-text); margin-bottom: 0; }
.pt-modulearea .table th,
.pt-modulearea .table td { border-color: var(--pt-divider) !important; padding: .7rem .85rem; }
.pt-modulearea .form-control {
    background: var(--pt-card-inset);
    border-color: var(--pt-border-strong);
    color: var(--pt-text);
}
.pt-modulearea .input-group-text {
    background: var(--pt-card-inset);
    border-color: var(--pt-border-strong);
    color: var(--pt-text-dim);
}

/* The module's own primary action (SSO) inherits the brand. */
.pt-modulearea .btn-primary,
.pt-modulearea .btn-success {
    background: var(--pt-brand) !important;
    border-color: var(--pt-brand) !important;
    color: var(--pt-on-brand) !important;
    font-weight: 600;
    border-radius: var(--pt-radius-sm);
    padding: .7rem 1.4rem;
    box-shadow: 0 8px 22px -10px var(--pt-brand-ring);
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-modulearea .btn-primary:hover,
.pt-modulearea .btn-success:hover {
    background: var(--pt-brand-hover) !important;
    border-color: var(--pt-brand-hover) !important;
    transform: translateY(-1px);
    box-shadow: var(--pt-glow-brand);
}
.pt-modulearea .btn-default,
.pt-modulearea .btn-secondary {
    background: transparent !important;
    border: 1px solid var(--pt-border-strong) !important;
    color: var(--pt-text-dim) !important;
    border-radius: var(--pt-radius-sm);
}
.pt-modulearea .btn-default:hover,
.pt-modulearea .btn-secondary:hover {
    background: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
.pt-modulearea .btn-lg { font-size: 1rem; padding: .85rem 1.8rem; }


/* ==========================================================================
   10. PRODUCT DETAILS — cards, tabs, info rows
   ========================================================================== */

.pt-card {
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-sm);
    margin-bottom: 1.5rem;
    overflow: hidden;
}
.pt-card__head {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: 1rem 1.4rem;
    border-bottom: 1px solid var(--pt-divider);
}
.pt-card__head i { color: var(--pt-brand); }
.pt-card__title {
    margin: 0;
    font-size: .92rem;
    font-weight: 700;
    color: var(--pt-text-strong);
    letter-spacing: -.01em;
}
.pt-card__body { padding: 1.4rem; }
@media (max-width: 575px) {
    .pt-card__head { padding: .9rem 1.1rem; }
    .pt-card__body { padding: 1.1rem; }
}

/* --- Tabs --- */
.pt-tabs.nav-tabs {
    display: flex;
    flex-wrap: wrap;
    list-style: none;
    padding-left: 0;
    border: 0;
    gap: .35rem;
    margin: 0 0 1.15rem;
}
.pt-tabs.nav-tabs .nav-item { margin: 0; }
.pt-tabs.nav-tabs .nav-link {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    border: 1px solid transparent;
    border-radius: var(--pt-radius-pill);
    padding: .55rem 1.05rem;
    font-size: .84rem;
    font-weight: 600;
    color: var(--pt-text-mute);
    background: transparent;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-tabs.nav-tabs .nav-link:hover {
    color: var(--pt-text-strong);
    background: var(--pt-card-hover);
    border-color: var(--pt-border);
}
.pt-tabs.nav-tabs .nav-link.active {
    background: var(--pt-brand-soft) !important;
    border-color: var(--pt-brand-ring) !important;
    color: var(--pt-brand) !important;
}

.pt-tabpanes {
    background: var(--pt-card) !important;
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-sm);
    padding: 1.4rem;
}
@media (max-width: 575px) { .pt-tabpanes { padding: 1.1rem; } }

/* --- Definition rows (domain, config options, custom fields) --- */
.pt-rows { display: block; }
.pt-row {
    display: grid;
    grid-template-columns: minmax(140px, 34%) 1fr;
    gap: 1rem;
    padding: .8rem 0;
    border-bottom: 1px solid var(--pt-divider);
    text-align: left;
}
.pt-row:last-child { border-bottom: 0; }
.pt-row__label {
    color: var(--pt-text-mute);
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    padding-top: .1rem;
}
.pt-row__value { color: var(--pt-text); font-size: .9rem; word-break: break-word; min-width: 0; }
@media (max-width: 575px) {
    .pt-row { grid-template-columns: 1fr; gap: .25rem; }
}

.pt-linkrow {
    display: flex;
    gap: .6rem;
    flex-wrap: wrap;
    margin-top: 1.2rem;
    padding-top: 1.2rem;
    border-top: 1px solid var(--pt-divider);
}

/* --- Downloads / addons / password tabs --- */
.pt-section-title {
    margin: 0 0 1.25rem;
    font-size: 1.15rem;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--pt-text-strong);
}
.pt-download {
    padding: 1.15rem 1.3rem;
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    margin-bottom: 1rem;
    transition: border-color var(--pt-speed) var(--pt-ease);
}
.pt-download:hover { border-color: var(--pt-brand-ring); }
.pt-download h4 { font-size: .95rem; font-weight: 700; margin: 0 0 .35rem; }
.pt-download p { color: var(--pt-text-dim); font-size: .86rem; }

.pt-addon { margin-bottom: 1.15rem; }
.pt-addon .card,
.pt-addon.pt-card { border-radius: var(--pt-radius); }
.pt-addon .status-active { color: var(--pt-brand); }
.pt-addon .status-suspended { color: var(--pt-amber); }
.pt-addon .status-terminated,
.pt-addon .status-cancelled { color: var(--pt-red); }

/* --- Resource usage dials --- */
.pt-usage {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 1.5rem;
    text-align: center;
}
.pt-usage h4 {
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--pt-text-mute);
    margin-bottom: .9rem;
}
.pt-usage p { color: var(--pt-text-dim); font-size: .85rem; margin-top: .6rem; }


/* ==========================================================================
   11. UTILITIES + ACCESSIBILITY
   ========================================================================== */

.pt-hide { display: none !important; }
.pt-mt-0 { margin-top: 0 !important; }
.pt-mb-0 { margin-bottom: 0 !important; }

.pt-empty {
    padding: 2.5rem 1.5rem;
    text-align: center;
    color: var(--pt-text-mute);
    font-size: .9rem;
}
.pt-empty i { display: block; font-size: 1.8rem; margin-bottom: .75rem; opacity: .45; }

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
    }
    .pt-stat:hover,
    .pt-btn:hover { transform: none; }
}

@media print {
    body::before,
    .pt-themetoggle,
    .pt-gear,
    .pt-hero__actions { display: none !important; }
    .pt-hero,
    .pt-card,
    .pt-spotlight,
    .pt-panel { box-shadow: none; border-color: #ccc; }
}


/* --- Page toolbar (back link + theme switch) --- */
.pt-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    flex-wrap: wrap;
    margin-bottom: 1.25rem;
}


/* ==========================================================================
   12. FULL-WIDTH MODE (syncbox)
   Mata a sidebar do WHMCS e devolve 100% da largura ao conteudo.
   Dois mecanismos: :has() para navegadores modernos (sem flash) e a classe
   .pt-fullwidth no <body>, aplicada por script, como garantia universal.
   ========================================================================== */

/* IMPORTANTE: as regras :has() ficam SEPARADAS das regras de fallback.
   Num navegador sem suporte a :has(), o seletor invalido derrubaria a lista
   inteira - inclusive o fallback - e a sidebar continuaria aparecendo. */

body.pt-fullwidth #main-body .row > .col-lg-4.col-xl-3 { display: none !important; }
#main-body .row:has(.pt-fullwidth-flag) > .col-lg-4.col-xl-3 { display: none !important; }

body.pt-fullwidth #main-body .primary-content {
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
}
#main-body .primary-content:has(.pt-fullwidth-flag) {
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
}

/* Conteudo centralizado, com uma medida confortavel em telas grandes. */
body.pt-fullwidth .pt-service {
    max-width: 1120px;
    margin-left: auto;
    margin-right: auto;
}
.primary-content:has(.pt-fullwidth-flag) .pt-service {
    max-width: 1120px;
    margin-left: auto;
    margin-right: auto;
}

.pt-fullwidth-flag { display: none !important; }


/* ==========================================================================
   13. BOTAO "APP" - o elemento mais luminoso da tela
   ========================================================================== */

.pt-btn--app,
.pt-modulearea .btn-primary,
.pt-modulearea .btn-success,
.pt-modulearea a.btn-lg {
    box-sizing: border-box;
    max-width: 100%;
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .7rem;
    padding: 1.1rem 2.4rem !important;
    font-size: 1.06rem !important;
    font-weight: 700 !important;
    letter-spacing: -.01em;
    line-height: 1.2;
    text-decoration: none !important;
    border: 0 !important;
    border-radius: var(--pt-radius) !important;
    color: #04241a !important;
    background: linear-gradient(135deg, #34d399 0%, #10B981 45%, #059669 100%) !important;
    box-shadow: var(--pt-glow-brand-xl) !important;
    overflow: hidden;
    isolation: isolate;
    cursor: pointer;
    animation: ptBreathe 3.6s var(--pt-ease) infinite;
    transition: transform var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease),
                filter var(--pt-speed) var(--pt-ease);
}

/* Brilho que atravessa o botao. */
.pt-btn--app::after,
.pt-modulearea .btn-primary::after,
.pt-modulearea .btn-success::after {
    content: "";
    position: absolute;
    top: 0;
    left: -60%;
    width: 45%;
    height: 100%;
    z-index: -1;
    transform: skewX(-22deg);
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .45), transparent);
    animation: ptSheen 4.2s var(--pt-ease) infinite;
}

.pt-btn--app:hover,
.pt-modulearea .btn-primary:hover,
.pt-modulearea .btn-success:hover {
    transform: translateY(-3px) scale(1.015);
    filter: brightness(1.06);
    box-shadow: 0 0 0 1px rgba(16, 185, 129, .6),
                0 0 40px -2px rgba(16, 185, 129, .6),
                0 30px 74px -20px rgba(16, 185, 129, .85) !important;
    color: #04241a !important;
    animation-play-state: paused;
}
.pt-btn--app:active,
.pt-modulearea .btn-primary:active { transform: translateY(-1px) scale(1); }

.pt-btn--app i,
.pt-modulearea .btn-primary i { font-size: 1.05em; }

@keyframes ptBreathe {
    0%, 100% { box-shadow: var(--pt-glow-brand-xl); }
    50%      { box-shadow: 0 0 0 1px rgba(16, 185, 129, .5),
                           0 0 36px 0 rgba(16, 185, 129, .55),
                           0 26px 66px -18px rgba(16, 185, 129, .78); }
}
@keyframes ptSheen {
    0%, 62% { left: -60%; }
    92%, 100% { left: 130%; }
}


/* ==========================================================================
   14. DASHBOARD HERO BANNER - servicos ativos em destaque total
   ========================================================================== */

.pt-herobanner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr);
    gap: 2rem;
    align-items: center;
    padding: 2.4rem 2.6rem;
    margin-bottom: 1.75rem;
    border: 1px solid var(--pt-brand-ring);
    border-radius: var(--pt-radius-lg);
    background:
        radial-gradient(48rem 26rem at 6% -30%, rgba(16, 185, 129, .22), transparent 62%),
        radial-gradient(40rem 24rem at 96% 130%, rgba(59, 130, 246, .16), transparent 64%),
        linear-gradient(140deg, var(--pt-bg-elev), var(--pt-card) 70%);
    box-shadow: var(--pt-shadow-lg), 0 0 0 1px rgba(16, 185, 129, .10);
    overflow: hidden;
}
.pt-herobanner::before {
    content: "";
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--pt-brand), var(--pt-blue) 70%, transparent);
}
@media (max-width: 991px) {
    .pt-herobanner { grid-template-columns: 1fr; gap: 1.5rem; padding: 1.75rem; }
}
@media (max-width: 575px) {
    .pt-herobanner { padding: 1.35rem; border-radius: var(--pt-radius); }
}

.pt-herobanner__main { min-width: 0; }

.pt-herobanner__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    color: var(--pt-brand);
    font-size: .72rem;
    font-weight: 800;
    letter-spacing: .14em;
    text-transform: uppercase;
    margin-bottom: .8rem;
}
.pt-herobanner__eyebrow .pt-status__dot { animation: ptPulse 2.4s infinite; }

.pt-herobanner__title {
    margin: 0;
    font-size: clamp(1.65rem, 1.15rem + 2.1vw, 2.5rem);
    font-weight: 800;
    letter-spacing: -.035em;
    line-height: 1.08;
    color: var(--pt-text-strong);
    word-break: break-word;
}
.pt-herobanner__sub {
    margin: .7rem 0 0;
    color: var(--pt-text-dim);
    font-size: .98rem;
    max-width: 46ch;
}
.pt-herobanner__cta {
    display: flex;
    align-items: center;
    gap: .8rem;
    flex-wrap: wrap;
    margin-top: 1.6rem;
}
/* No celular a acao principal ocupa a linha toda - alvo de toque generoso. */
@media (max-width: 575px) {
    .pt-herobanner__cta { flex-direction: column; align-items: stretch; gap: .6rem; }
    .pt-herobanner__cta .pt-btn { width: 100%; }
    .pt-btn--app { padding: 1.05rem 1.5rem !important; }
}

/* Coluna direita: os demais servicos, acesso em 1 clique. */
.pt-herobanner__list {
    display: flex;
    flex-direction: column;
    gap: .6rem;
    min-width: 0;
}
.pt-svc {
    display: flex;
    align-items: center;
    gap: .85rem;
    padding: .85rem 1.05rem;
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius-sm);
    background: var(--pt-inset-translucent);
    color: var(--pt-text-dim);
    text-decoration: none;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-svc:hover {
    border-color: var(--pt-brand);
    background: var(--pt-brand-soft);
    color: var(--pt-text-strong);
    transform: translateX(3px);
    text-decoration: none;
}
.pt-svc__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 34px; height: 34px;
    border-radius: 10px;
    background: var(--pt-brand-soft);
    color: var(--pt-brand);
    font-size: .85rem;
}
.pt-svc__name {
    flex: 1 1 auto;
    min-width: 0;
    font-size: .89rem;
    font-weight: 600;
    color: var(--pt-text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pt-svc__go { color: var(--pt-text-mute); font-size: .8rem; transition: color var(--pt-speed) var(--pt-ease); }
.pt-svc:hover .pt-svc__go { color: var(--pt-brand); }
.pt-svc .badge {
    background: var(--pt-brand-soft);
    border: 1px solid var(--pt-brand-ring);
    color: var(--pt-brand);
    border-radius: var(--pt-radius-pill);
    font-size: .66rem;
    font-weight: 700;
    padding: .18rem .5rem;
    flex: 0 0 auto;
}
.pt-herobanner__more {
    margin-top: .3rem;
    font-size: .8rem;
    font-weight: 600;
    color: var(--pt-text-mute);
    text-align: center;
}


/* ==========================================================================
   15. ENGRENAGEM DISCRETA (retencao)
   ========================================================================== */

.pt-gear--bare {
    width: 34px;
    min-width: 34px;
    height: 34px;
    padding: 0;
    border-color: transparent;
    background: transparent;
    color: var(--pt-text-mute);
    opacity: .5;
    border-radius: 10px;
}
.pt-gear--bare:hover,
.pt-gear--bare:focus,
.show > .pt-gear--bare {
    opacity: 1;
    background: var(--pt-card-hover);
    border-color: var(--pt-border);
    color: var(--pt-text-dim);
}
.pt-gear--bare .pt-gear__label { display: none; }


/* ==========================================================================
   16. CORRECOES CRITICAS — header, dropdowns, breadcrumb
   ========================================================================== */

/* --- Dropdowns do menu por cima de tudo --- */
#header .dropdown,
#header .nav-item.dropdown { position: relative; }

#header .dropdown-menu,
#header .collapsable-dropdown-menu,
.navbar .dropdown-menu {
    z-index: 10050 !important;
    background: var(--pt-bg-elev) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius) !important;
    box-shadow: var(--pt-shadow-lg) !important;
    padding: .4rem !important;
    margin-top: .5rem;
    color: var(--pt-text);
}

/* O markup do twenty-one usa <li class="dropdown-item"> com um <a class="dropdown-item">
   dentro. Neutraliza o item externo e estiliza o link de verdade. */
#header .dropdown-menu > li.dropdown-item {
    background: transparent !important;
    padding: 0 !important;
    border: 0;
    list-style: none;
}
#header .dropdown-menu a.dropdown-item,
#header .dropdown-menu > li > a {
    display: flex !important;
    align-items: center;
    gap: .6rem;
    padding: .6rem .75rem !important;
    border-radius: var(--pt-radius-sm);
    background: transparent !important;
    color: var(--pt-text-dim) !important;
    font-size: .86rem;
    font-weight: 500;
    text-decoration: none;
    transition: background var(--pt-speed) var(--pt-ease), color var(--pt-speed) var(--pt-ease);
}
#header .dropdown-menu a.dropdown-item:hover,
#header .dropdown-menu a.dropdown-item:focus,
#header .dropdown-menu > li > a:hover {
    background: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
#header .dropdown-menu .dropdown-divider {
    border-top: 1px solid var(--pt-divider);
    margin: .35rem .2rem;
}
#header .dropdown-menu i { color: var(--pt-text-mute); width: 1.1em; text-align: center; }

/* Popover de notificacoes do topo tambem precisa acompanhar o dark. */
.popover {
    z-index: 10050 !important;
    background: var(--pt-bg-elev) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius) !important;
    box-shadow: var(--pt-shadow-lg) !important;
}
.popover .popover-header {
    background: var(--pt-card-inset) !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    color: var(--pt-text-strong) !important;
}
.popover .popover-body { color: var(--pt-text-dim) !important; }
.popover .arrow::after { border-bottom-color: var(--pt-bg-elev) !important;
                         border-top-color: var(--pt-bg-elev) !important; }
.client-alerts a { color: var(--pt-text-dim); }
.client-alerts a:hover { color: var(--pt-brand); }

/* --- Breadcrumb: o #e9ecef do theme.css quebrava o dark inteiro --- */
.master-breadcrumb {
    background-color: transparent !important;
    background: transparent !important;
    border-bottom: 1px solid var(--pt-divider);
}
.master-breadcrumb .breadcrumb,
#main-body .breadcrumb,
.breadcrumb {
    background-color: transparent !important;
    background: transparent !important;
    border-radius: 0;
    margin-bottom: 0;
    padding: .85rem 0;
}
.breadcrumb-item,
.breadcrumb-item a { color: var(--pt-text-mute) !important; font-size: .82rem; }
.breadcrumb-item a:hover { color: var(--pt-brand) !important; }
.breadcrumb-item.active { color: var(--pt-text-dim) !important; }
.breadcrumb-item + .breadcrumb-item::before { color: var(--pt-text-mute) !important; opacity: .5; }

/* Faixa de busca de dominio da home, quando aparece. */
.domain-search-container,
#domain-search { background: transparent !important; }


/* ==========================================================================
   17. DASHBOARD SEM CARA DE WHMCS
   ========================================================================== */

/* --- Hero limpo, centralizado, muito respiro --- */
.pt-launch {
    position: relative;
    text-align: center;
    padding: 4.5rem 2rem 4rem;
    margin-bottom: 2.5rem;
    overflow: hidden;
    isolation: isolate;
}
.pt-launch::before {
    content: "";
    position: absolute;
    inset: -30% -10% auto -10%;
    height: 130%;
    z-index: -1;
    background:
        radial-gradient(38rem 20rem at 50% 18%, rgba(16, 185, 129, .20), transparent 66%),
        radial-gradient(30rem 18rem at 82% 88%, rgba(59, 130, 246, .12), transparent 68%);
    pointer-events: none;
}
@media (max-width: 767px) { .pt-launch { padding: 3rem 1rem 2.75rem; margin-bottom: 1.75rem; } }

.pt-launch__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    padding: .4rem 1rem;
    margin-bottom: 1.5rem;
    border: 1px solid var(--pt-brand-ring);
    border-radius: var(--pt-radius-pill);
    background: var(--pt-brand-soft);
    color: var(--pt-brand);
    font-size: .72rem;
    font-weight: 800;
    letter-spacing: .12em;
    text-transform: uppercase;
}
.pt-launch__eyebrow .pt-status__dot { animation: ptPulse 2.4s infinite; }

.pt-launch__title {
    margin: 0 auto;
    max-width: 18ch;
    font-size: clamp(32px, 22px + 2.6vw, 54px);
    font-weight: 800;
    letter-spacing: -.045em;
    line-height: 1.04;
    color: var(--pt-text-strong);
}
.pt-launch__sub {
    margin: 1.1rem auto 0;
    max-width: 44ch;
    color: var(--pt-text-dim);
    font-size: 16px;
    line-height: 1.6;
}

/* --- O botao gigante --- */
.pt-launch__action { margin-top: 2.5rem; }

.pt-megabtn {
    box-sizing: border-box;
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .9rem;
    max-width: 100%;
    padding: 22px 56px;
    border: 0;
    border-radius: var(--pt-radius-lg);
    font-size: 22px;
    font-weight: 800;
    letter-spacing: -.015em;
    line-height: 1.15;
    text-decoration: none !important;
    color: #04241a !important;
    background: linear-gradient(135deg, #34d399 0%, #10B981 45%, #059669 100%);
    box-shadow: var(--pt-glow-brand-xl);
    cursor: pointer;
    overflow: hidden;
    isolation: isolate;
    animation: ptBreathe 3.6s var(--pt-ease) infinite;
    transition: transform var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease),
                filter var(--pt-speed) var(--pt-ease);
}
.pt-megabtn::after {
    content: "";
    position: absolute;
    top: 0;
    left: -60%;
    width: 40%;
    height: 100%;
    z-index: -1;
    transform: skewX(-22deg);
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .5), transparent);
    animation: ptSheen 4.2s var(--pt-ease) infinite;
}
.pt-megabtn:hover,
.pt-megabtn:focus {
    transform: translateY(-4px) scale(1.02);
    filter: brightness(1.07);
    color: #04241a !important;
    box-shadow: 0 0 0 1px rgba(16, 185, 129, .65),
                0 0 52px 0 rgba(16, 185, 129, .62),
                0 38px 88px -22px rgba(16, 185, 129, .9);
    animation-play-state: paused;
}
.pt-megabtn:active { transform: translateY(-1px) scale(1); }
.pt-megabtn i { font-size: 1.15em; }

@media (max-width: 575px) {
    .pt-megabtn { width: 100%; padding: 19px 20px; font-size: 18px; }
}

.pt-launch__secondary {
    display: block;
    margin-top: 1.4rem;
    color: var(--pt-text-mute);
    font-size: .85rem;
    font-weight: 600;
}
.pt-launch__secondary a { color: var(--pt-text-dim); border-bottom: 1px solid var(--pt-border-strong); }
.pt-launch__secondary a:hover { color: var(--pt-brand); border-bottom-color: var(--pt-brand); }


/* --- Banner de alerta de pagamento --- */
.pt-alertbar {
    position: relative;
    display: flex;
    align-items: center;
    gap: 1.35rem;
    flex-wrap: wrap;
    padding: 1.5rem 1.85rem;
    margin-bottom: 2.5rem;
    border: 1px solid rgba(239, 68, 68, .32);
    border-radius: var(--pt-radius);
    background: var(--pt-alert-bg);
    box-shadow: 0 18px 46px -18px rgba(239, 68, 68, .45);
    overflow: hidden;
}
.pt-alertbar::before {
    content: "";
    position: absolute;
    top: 0; bottom: 0; left: 0;
    width: 3px;
    background: linear-gradient(180deg, #f59e0b, #ef4444);
}

.pt-alertbar__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 52px;
    height: 52px;
    border-radius: var(--pt-radius-sm);
    background: var(--pt-alert-icon-bg);
    border: 1px solid var(--pt-red-ring);
    color: var(--pt-alert-icon-fg);
    font-size: 1.25rem;
}

.pt-alertbar__text { flex: 1 1 260px; min-width: 0; }
.pt-alertbar__title {
    margin: 0;
    font-size: 17px;
    font-weight: 700;
    letter-spacing: -.015em;
    color: var(--pt-alert-title);
}
.pt-alertbar__sub {
    margin: .3rem 0 0;
    font-size: .89rem;
    color: var(--pt-alert-sub);
}

.pt-alertbar__cta { margin-left: auto; }
@media (max-width: 767px) { .pt-alertbar__cta { margin-left: 0; width: 100%; } }

.pt-btn--pay {
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .6rem;
    padding: .95rem 1.9rem;
    border: 0;
    border-radius: var(--pt-radius-sm);
    background: linear-gradient(135deg, #f59e0b, #ef4444);
    color: var(--pt-on-danger) !important;
    font-size: .98rem;
    font-weight: 700;
    text-decoration: none !important;
    white-space: nowrap;
    box-shadow: 0 12px 30px -12px rgba(239, 68, 68, .8);
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-btn--pay:hover {
    transform: translateY(-2px);
    filter: brightness(1.08);
    box-shadow: 0 20px 44px -14px rgba(239, 68, 68, .95);
    color: var(--pt-on-danger) !important;
}
@media (max-width: 767px) { .pt-btn--pay { width: 100%; } }


/* --- Faixa de estatisticas sem caixinhas --- */
.pt-strip {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    gap: 0;
    margin-bottom: 3rem;
    border-top: 1px solid var(--pt-divider);
    border-bottom: 1px solid var(--pt-divider);
}
.pt-strip__item {
    display: block;
    padding: 1.6rem 1.5rem;
    border-left: 1px solid var(--pt-divider);
    text-decoration: none;
    transition: background var(--pt-speed) var(--pt-ease);
}
.pt-strip__item:first-child { border-left: 0; }
.pt-strip__item:hover { background: rgba(148, 163, 184, .05); text-decoration: none; }
@media (max-width: 575px) {
    .pt-strip__item { padding: 1.2rem 1rem; }
    .pt-strip__item:nth-child(odd) { border-left: 0; }
}

.pt-strip__value {
    display: block;
    font-size: 36px;
    font-weight: 800;
    line-height: 1;
    letter-spacing: -.045em;
    color: var(--pt-text-strong);
    font-variant-numeric: tabular-nums;
}
.pt-strip__label {
    display: flex;
    align-items: center;
    gap: .45rem;
    margin-top: .55rem;
    color: var(--pt-text-mute);
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
}
.pt-strip__item--brand .pt-strip__value { color: var(--pt-brand); }
.pt-strip__item--amber .pt-strip__value { color: var(--pt-amber); }


/* --- Paineis achatados: sem caixa, so tipografia e respiro --- */
.pt-flatgrid {
    display: grid;
    grid-template-columns: minmax(0, 1.25fr) minmax(0, .75fr);
    gap: 3rem;
    align-items: start;
}
@media (max-width: 991px) { .pt-flatgrid { grid-template-columns: 1fr; gap: 2.25rem; } }
.pt-flatcol { display: flex; flex-direction: column; gap: 2.5rem; min-width: 0; }

.pt-flatgrid .pt-panel,
.pt-panels__full .pt-panel.pt-panel--flat,
.pt-panel--flat {
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    overflow: visible;
}
.pt-panel--flat::before { display: none; }
.pt-panel--flat .card-header {
    padding: 0 0 .9rem 0 !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    background: transparent !important;
}
.pt-panel--flat .card-title {
    font-size: .76rem !important;
    font-weight: 800 !important;
    letter-spacing: .11em;
    text-transform: uppercase;
    color: var(--pt-text-mute) !important;
}
.pt-panel--flat .card-title > i { color: var(--pt-text-mute); }
.pt-panel--flat .card-body { padding: 1.1rem 0 0 0 !important; }
.pt-panel--flat .list-group { margin-top: .3rem; }
.pt-panel--flat .list-group-item {
    padding: .95rem 0 !important;
    border-top: 0 !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    font-size: .9rem;
}
.pt-panel--flat .list-group-item:last-child { border-bottom: 0 !important; }
.pt-panel--flat .list-group-item:hover {
    background: transparent !important;
    color: var(--pt-brand) !important;
    padding-left: .35rem !important;
}
.pt-panel--flat .card-footer {
    background: transparent !important;
    border-top: 1px solid var(--pt-divider) !important;
    padding: .9rem 0 0 0 !important;
}
.pt-panel--flat .card-footer:empty { display: none; }
.pt-panel--flat .card-title .float-right .btn {
    background: transparent !important;
    border: 0 !important;
    color: var(--pt-brand) !important;
    padding: 0 !important;
    font-size: .74rem;
    letter-spacing: .04em;
}


/* ==========================================================================
   18. PAGINAS DE FATURA / ORCAMENTO (documentos standalone)
   viewinvoice.tpl, viewquote.tpl e viewbillingnote.tpl NAO incluem head.tpl:
   sao documentos HTML proprios. O link do premium-theme.css foi adicionado
   dentro deles. As regras abaixo cobrem o invoice.css, que pinta tudo claro.
   ========================================================================== */

.invoice-container {
    background-color: var(--pt-card) !important;
    border: 1px solid var(--pt-border) !important;
    border-radius: var(--pt-radius-lg) !important;
    box-shadow: var(--pt-shadow-lg);
    color: var(--pt-text);
    padding: 56px !important;
}
@media (max-width: 767px) { .invoice-container { padding: 28px !important; } }

.invoice-container h1,
.invoice-container h2,
.invoice-container h3,
.invoice-container h4,
.invoice-container h5,
.invoice-container strong,
.invoice-container b { color: var(--pt-text-strong); }
.invoice-container p,
.invoice-container td,
.invoice-container div { color: var(--pt-text); }
.invoice-container a { color: var(--pt-brand); }
.invoice-container hr { border-top-color: var(--pt-divider); }
.invoice-container .small-text { color: var(--pt-text-dim); }

/* Cores de status: as originais sao escuras demais para fundo escuro. */
.invoice-container .invoice-status .unpaid,
.invoice-container .unpaid { color: #f87171 !important; }
.invoice-container .invoice-status .paid,
.invoice-container .paid { color: var(--pt-brand) !important; }
.invoice-container .invoice-status .draft,
.invoice-container .draft,
.invoice-container .cancelled { color: var(--pt-text-mute) !important; }
.invoice-container .refunded { color: #60a5fa !important; }
.invoice-container .collections { color: var(--pt-amber) !important; }

/* Tabela de itens */
.invoice-container .table { color: var(--pt-text); }
.invoice-container .table th {
    color: var(--pt-text-mute);
    border-color: var(--pt-divider) !important;
    background: transparent;
}
.invoice-container .table td { border-color: var(--pt-divider) !important; }
.invoice-container td.total-row {
    background-color: var(--pt-card-inset) !important;
    color: var(--pt-text-strong);
    font-weight: 600;
}
.invoice-container td.no-line { border: 0 !important; }

/* Cabecalhos de painel (Itens da fatura, Livro contabil) */
.invoice-container .panel,
.invoice-container .card {
    background: var(--pt-card-inset) !important;
    border: 1px solid var(--pt-border) !important;
    border-radius: var(--pt-radius) !important;
    box-shadow: none !important;
    overflow: hidden;
}
.invoice-container .panel-heading,
.invoice-container .card-header {
    background: var(--pt-bg-elev) !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    color: var(--pt-text-strong) !important;
}
.invoice-container .panel-title,
.invoice-container .card-title { color: var(--pt-text-strong) !important; }
.invoice-container .panel-body,
.invoice-container .card-body { background: transparent !important; }

/* Selecao de forma de pagamento e botoes do rodape */
.invoice-container select,
.invoice-container .form-control,
.invoice-container .custom-select {
    background: var(--pt-card-inset) !important;
    border: 1px solid var(--pt-border-strong) !important;
    color: var(--pt-text) !important;
    border-radius: var(--pt-radius-sm) !important;
}
.invoice-container .btn-default,
.invoice-container .btn-secondary {
    background: transparent !important;
    border: 1px solid var(--pt-border-strong) !important;
    color: var(--pt-text-dim) !important;
    border-radius: var(--pt-radius-sm) !important;
}
.invoice-container .btn-default:hover,
.invoice-container .btn-secondary:hover {
    background: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
.invoice-container .btn-primary,
.invoice-container .btn-success {
    background: var(--pt-brand) !important;
    border-color: var(--pt-brand) !important;
    color: var(--pt-on-brand) !important;
    border-radius: var(--pt-radius-sm) !important;
    font-weight: 600;
}

/* Avisos do corpo da fatura. Observacao: se o texto foi colado no admin com
   style="background:#ffc" inline, o inline vence - trocar la, nao aqui. */
.invoice-container .alert { border-radius: var(--pt-radius) !important; }
.invoice-container .alert-warning {
    background: var(--pt-amber-soft) !important;
    border: 1px solid var(--pt-amber-ring) !important;
    color: #fcd34d !important;
}
.invoice-container .alert-warning strong,
.invoice-container .alert-warning b { color: #fde68a !important; }
.invoice-container .alert-danger {
    background: var(--pt-red-soft) !important;
    border: 1px solid var(--pt-red-ring) !important;
    color: #fca5a5 !important;
}
.invoice-container .alert-info {
    background: var(--pt-blue-soft) !important;
    border: 1px solid var(--pt-border-strong) !important;
    color: #93c5fd !important;
}
.invoice-container .alert-success {
    background: var(--pt-brand-soft) !important;
    border: 1px solid var(--pt-brand-ring) !important;
    color: var(--pt-brand-hover) !important;
}

/* Logo do PIX e imagens sobre fundo escuro */
.invoice-container .invoice-header img { max-width: 100%; }

@media print {
    /* Papel e branco: aqui o #fff e intencional, nao vazamento de tema. */
    .invoice-container {
        background: #fff !important;
        color: #000 !important;
        box-shadow: none;
        border-color: #ccc !important;
    }
    .invoice-container * { color: #000 !important; }
}


/* ==========================================================================
   19. TABELAS DE LISTAGEM / DATATABLES
   A lista de faturas vinha com texto quase invisivel sobre o fundo escuro.
   ========================================================================== */

table.dataTable,
.table-container .table,
#tableInvoicesList,
.table-list {
    color: var(--pt-text) !important;
    border-color: var(--pt-divider) !important;
}

table.dataTable thead th,
.table-list thead th {
    background: var(--pt-card-inset) !important;
    border-bottom: 1px solid var(--pt-border-strong) !important;
    color: var(--pt-text-dim) !important;
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
}
table.dataTable tbody td,
.table-list tbody td {
    background: transparent !important;
    border-color: var(--pt-divider) !important;
    color: var(--pt-text) !important;
}
table.dataTable tbody tr,
.table-list tbody tr { background: transparent !important; }
table.dataTable tbody tr:hover td,
.table-list tbody tr:hover td {
    background: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
table.dataTable tbody tr.odd td,
table.dataTable tbody tr.even td { background: transparent !important; }
table.dataTable tbody td a,
.table-list tbody td a { color: var(--pt-brand) !important; }

/* O WHMCS marca a linha inteira como clicavel; garante o cursor. */
table.dataTable tbody tr[onclick],
.table-list tbody tr[onclick] { cursor: pointer; }

/* Controles do DataTables */
.dataTables_wrapper,
.dataTables_info,
.dataTables_length,
.dataTables_filter { color: var(--pt-text-dim) !important; }

.dataTables_filter input,
.dataTables_length select,
.dataTables_wrapper input[type="search"],
.dataTables_wrapper select {
    background: var(--pt-card-inset) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius-sm) !important;
    color: var(--pt-text) !important;
    padding: .4rem .7rem;
}
.dataTables_filter input:focus,
.dataTables_wrapper select:focus {
    border-color: var(--pt-brand) !important;
    box-shadow: 0 0 0 3px var(--pt-brand-ring);
    outline: none;
}

.dataTables_paginate .paginate_button,
.dataTables_paginate .page-link {
    background: transparent !important;
    border: 1px solid var(--pt-border) !important;
    color: var(--pt-text-dim) !important;
    border-radius: var(--pt-radius-sm) !important;
    margin: 0 2px;
}
.dataTables_paginate .paginate_button:hover,
.dataTables_paginate .page-link:hover {
    background: var(--pt-card-hover) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text-strong) !important;
}
.dataTables_paginate .paginate_button.current,
.dataTables_paginate .page-item.active .page-link {
    background: var(--pt-brand-soft) !important;
    border-color: var(--pt-brand-ring) !important;
    color: var(--pt-brand) !important;
}
.dataTables_paginate .paginate_button.disabled,
.dataTables_paginate .page-item.disabled .page-link { opacity: .4; }

/* Selos de status nas listagens */
.label, .status {
    border-radius: var(--pt-radius-pill) !important;
    font-weight: 700;
    font-size: .7rem;
    letter-spacing: .03em;
    padding: .25rem .65rem;
}
.status-active, .label-success, .badge-success {
    background: var(--pt-brand-soft) !important;
    color: var(--pt-brand) !important;
    border: 1px solid var(--pt-brand-ring) !important;
}
.status-unpaid, .status-overdue, .label-danger, .badge-danger {
    background: var(--pt-red-soft) !important;
    color: #f87171 !important;
    border: 1px solid var(--pt-red-ring) !important;
}
.status-pending, .label-warning, .badge-warning {
    background: var(--pt-amber-soft) !important;
    color: var(--pt-amber) !important;
    border: 1px solid var(--pt-amber-ring) !important;
}
.status-cancelled, .status-terminated, .label-default, .badge-secondary {
    background: var(--pt-card-inset) !important;
    color: var(--pt-text-mute) !important;
    border: 1px solid var(--pt-border) !important;
}

/* Rodape e seletor de idioma/moeda */
#footer .btn,
.footer .btn {
    background: var(--pt-card) !important;
    border: 1px solid var(--pt-border) !important;
    color: var(--pt-text-dim) !important;
    border-radius: var(--pt-radius-pill) !important;
}
#footer .btn:hover { color: var(--pt-text-strong) !important; }

/* Modais (usados em varias telas do sistema) */
.modal-content {
    background: var(--pt-bg-elev) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius) !important;
    color: var(--pt-text);
}
.modal-header, .modal-footer { border-color: var(--pt-divider) !important; }
.modal-title { color: var(--pt-text-strong) !important; }
.modal-backdrop.show { opacity: .7; }

/* Abas genericas do sistema */
.nav-tabs { border-bottom-color: var(--pt-divider) !important; }
.nav-tabs .nav-link {
    color: var(--pt-text-mute) !important;
    border-color: transparent !important;
}
.nav-tabs .nav-link:hover { color: var(--pt-text-strong) !important; }
.nav-tabs .nav-link.active {
    background: var(--pt-card) !important;
    border-color: var(--pt-border) var(--pt-border) var(--pt-card) !important;
    color: var(--pt-brand) !important;
}

/* Caixa de busca da base de conhecimento no topo */
#header .search .form-control,
#header input[type="text"] {
    background: var(--pt-card-inset) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text) !important;
}
#header .search .form-control::placeholder { color: var(--pt-text-mute) !important; }


/* ==========================================================================
   20. PORTA DE ENTRADA — login e recuperacao de senha (split screen)
   O conteudo do login nasce dentro de #main-body > .container > .primary-content.
   A classe .pt-authpage no <body> neutraliza esses wrappers e apaga o cromo do
   WHMCS para a tela virar um documento de pagina inteira.
   ========================================================================== */

/* --- Limpeza do cromo --- */
body.pt-authpage #header,
body.pt-authpage .master-breadcrumb,
body.pt-authpage #footer,
body.pt-authpage .footer,
body.pt-authpage .domain-search-container,
body.pt-authpage #main-body .row > .col-lg-4.col-xl-3 { display: none !important; }

body.pt-authpage { overflow-x: hidden; }
body.pt-authpage::before { display: none; }   /* o wash do fundo sai; o brand ja tem o seu */

body.pt-authpage #main-body {
    padding: 0 !important;
    margin: 0 !important;
    background: var(--pt-bg) !important;
}
body.pt-authpage #main-body > .container,
body.pt-authpage #main-body > div {
    max-width: none !important;
    width: 100% !important;
    padding: 0 !important;
    margin: 0 !important;
}
body.pt-authpage #main-body .row { margin: 0 !important; width: 100% !important; }
body.pt-authpage .primary-content {
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
    padding: 0 !important;
}
.pt-auth-flag { display: none !important; }

.pt-auth__card {
    width: 100%;
    max-width: 420px;
    padding: 2.5rem;
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius-card);
    box-shadow: var(--pt-shadow-lg);
}
@media (max-width: 575px) { .pt-auth__card { padding: 1.75rem 1.35rem; } }

.pt-auth__title {
    margin: 0;
    font-size: 26px;
    font-weight: 800;
    letter-spacing: -.03em;
    color: var(--pt-text-strong);
}
.pt-auth__subtitle {
    margin: .5rem 0 2rem;
    font-size: 14px;
    color: var(--pt-text-dim);
}

/* --- Campos com floating label --- */
.pt-field { position: relative; margin-bottom: 1.1rem; }

#main-body .pt-field__input,
.pt-field__input {
    box-sizing: border-box;
    width: 100%;
    height: 62px;
    padding: 22px 16px 8px 46px;
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius-sm);
    color: var(--pt-text);
    font-size: 15px;
    font-family: inherit;
    line-height: 1.2;
    transition: border-color var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease),
                background var(--pt-speed) var(--pt-ease);
}
#main-body .pt-field__input:focus,
.pt-field__input:focus {
    outline: none;
    background: var(--pt-card);
    border-color: var(--pt-brand);
    box-shadow: 0 0 0 4px var(--pt-brand-ring);
}
#main-body .pt-field--pw .pt-field__input,
.pt-field--pw .pt-field__input { padding-right: 52px; }

#main-body .pt-field__label,
.pt-field__label {
    position: absolute;
    left: 46px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--pt-text-mute);
    font-size: 15px;
    pointer-events: none;
    transition: all .16s var(--pt-ease);
}
/* placeholder=" " (um espaco) faz :placeholder-shown valer como "vazio" */
#main-body .pt-field__input:focus + .pt-field__label,
#main-body .pt-field__input:not(:placeholder-shown) + .pt-field__label,
.pt-field__input:focus + .pt-field__label,
.pt-field__input:not(:placeholder-shown) + .pt-field__label {
    top: 12px;
    transform: none;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--pt-brand);
}
#main-body .pt-field__input:not(:focus):not(:placeholder-shown) + .pt-field__label,
.pt-field__input:not(:focus):not(:placeholder-shown) + .pt-field__label { color: var(--pt-text-mute); }

.pt-field__icon {
    position: absolute;
    left: 17px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--pt-text-mute);
    font-size: .9rem;
    pointer-events: none;
    transition: color var(--pt-speed) var(--pt-ease);
}
.pt-field__input:focus ~ .pt-field__icon { color: var(--pt-brand); }

.pt-field__reveal {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    width: 36px; height: 36px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 0;
    border-radius: 8px;
    color: var(--pt-text-mute);
    cursor: pointer;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-field__reveal:hover { background: var(--pt-card-hover); color: var(--pt-text-strong); }

/* O autofill do Chrome pinta o campo de amarelo e ignora o dark. */
.pt-field__input:-webkit-autofill,
.pt-field__input:-webkit-autofill:hover,
.pt-field__input:-webkit-autofill:focus {
    -webkit-text-fill-color: var(--pt-text);
    -webkit-box-shadow: 0 0 0 1000px var(--pt-card-inset) inset;
    box-shadow: 0 0 0 1000px var(--pt-card-inset) inset;
    caret-color: var(--pt-text);
    transition: background-color 9999s ease-in-out 0s;
}

/* --- Linha de opcoes --- */
.pt-auth__options {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin: -.15rem 0 1.6rem;
}
#main-body label.pt-check,
.pt-check {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    font-size: 13px;
    color: var(--pt-text-dim);
    cursor: pointer;
    margin: 0;
}
.pt-check input {
    width: 17px; height: 17px;
    accent-color: var(--pt-brand);
    cursor: pointer;
}
.pt-auth__forgot {
    font-size: 13px;
    font-weight: 600;
    color: var(--pt-text-dim);
}
.pt-auth__forgot:hover { color: var(--pt-brand); }

/* --- Botao principal --- */
.pt-authbtn {
    box-sizing: border-box;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .7rem;
    width: 100%;
    padding: 18px 24px;
    border: 0;
    border-radius: var(--pt-radius-sm);
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -.01em;
    font-family: inherit;
    color: #04241a;
    background: linear-gradient(135deg, #34d399 0%, #10B981 45%, #059669 100%);
    box-shadow: var(--pt-glow-brand-xl);
    cursor: pointer;
    overflow: hidden;
    isolation: isolate;
    animation: ptBreathe 3.6s var(--pt-ease) infinite;
    transition: transform var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease),
                filter var(--pt-speed) var(--pt-ease);
}
.pt-authbtn::after {
    content: "";
    position: absolute;
    top: 0; left: -60%;
    width: 40%; height: 100%;
    z-index: -1;
    transform: skewX(-22deg);
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .5), transparent);
    animation: ptSheen 4.2s var(--pt-ease) infinite;
}
.pt-authbtn:hover,
.pt-authbtn:focus {
    transform: translateY(-2px);
    filter: brightness(1.06);
    color: #04241a;
    box-shadow: 0 0 0 1px rgba(16, 185, 129, .6),
                0 0 44px -2px rgba(16, 185, 129, .6),
                0 30px 74px -20px rgba(16, 185, 129, .85);
    animation-play-state: paused;
}
.pt-authbtn:active { transform: translateY(0); }

/* --- Rodape do card --- */
.pt-auth__sep {
    display: flex;
    align-items: center;
    gap: .9rem;
    margin: 1.75rem 0 1.35rem;
    color: var(--pt-text-mute);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
}
.pt-auth__sep::before,
.pt-auth__sep::after {
    content: "";
    flex: 1 1 auto;
    height: 1px;
    background: var(--pt-divider);
}

.pt-auth__foot {
    margin: 1.6rem 0 0;
    text-align: center;
    font-size: 13.5px;
    color: var(--pt-text-mute);
}
.pt-auth__foot a { font-weight: 700; color: var(--pt-brand); }
.pt-auth__foot a:hover { color: var(--pt-brand-hover); }

.pt-auth__back {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    margin-bottom: 1.5rem;
    font-size: 13px;
    font-weight: 600;
    color: var(--pt-text-mute);
}
.pt-auth__back:hover { color: var(--pt-brand); }

/* --- Alertas e captcha dentro do card --- */
#main-body .pt-auth__card .alert,
.pt-auth__card .alert {
    border-radius: var(--pt-radius-sm) !important;
    font-size: 13.5px;
    padding: .85rem 1rem;
    margin-bottom: 1.25rem;
}
.pt-auth__card .g-recaptcha,
.pt-auth__card .h-captcha { margin-bottom: 1.25rem; }
.pt-auth__card .pwstrength_viewport_progress { margin-top: .6rem; }

/* Botoes de login social do linkedaccounts.tpl */
.pt-auth__social .btn,
.pt-auth__social a[class*="btn-"] {
    display: flex !important;
    align-items: center;
    justify-content: center;
    gap: .6rem;
    width: 100%;
    margin-bottom: .6rem;
    padding: .85rem 1rem !important;
    background: var(--pt-card-inset) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius-sm) !important;
    color: var(--pt-text-dim) !important;
    font-size: 14px;
    font-weight: 600;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-auth__social .btn:hover {
    background: var(--pt-card-hover) !important;
    border-color: var(--pt-brand) !important;
    color: var(--pt-text-strong) !important;
}

/* --- Modo claro --- */


/* ==========================================================================
   21. PENTE FINO ANTI-BRANCO
   Varredura das superficies que o WHMCS/Bootstrap pinta de branco e que
   vazavam no dark: editores, textareas, paineis, wells, popovers, modais.
   ========================================================================== */

/* --- Superficies genericas --- */
/* Os :not() protegem os componentes proprios do tema. Sem eles, este bloco
   (que vem depois no arquivo) apagaria os paineis achatados do dashboard e o
   fundo das abas da pagina de servico. So negacoes SIMPLES aqui: :not() com
   seletor descendente e Selectors 4 e, se nao houver suporte, invalida a lista
   inteira. O que depende de descendencia e reafirmado no fim da secao. */
.bg-white,
.bg-light,
.jumbotron,
.well,
.panel:not(.pt-panel),
.panel-default:not(.pt-panel),
.card:not(.pt-panel):not(.pt-card):not(.pt-auth__card),
.popover,
.tooltip-inner,
.toast,
.accordion,
.pagination,
.page-link,
.input-group-text,
.custom-file-label,
.dropdown-menu,
.modal-content {
    background-color: var(--pt-card) !important;
    color: var(--pt-text);
    border-color: var(--pt-border) !important;
}
.list-group { background-color: transparent !important; }
.tab-content:not(.pt-tabpanes) { background-color: transparent !important; }

.panel-heading,
.card-header:not(.pt-card__head),
.modal-header,
.modal-footer,
.card-footer,
.panel-footer {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-divider) !important;
    color: var(--pt-text-strong);
}
.panel-body, .card-body { background-color: transparent !important; }

/* --- Campos de formulario em todo o sistema --- */
textarea,
input[type="text"],
input[type="email"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="url"],
input[type="number"],
input[type="date"],
select,
.form-control,
.custom-select,
.custom-file-input {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text) !important;
}
textarea:focus,
input:focus,
select:focus,
.form-control:focus {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-brand) !important;
    box-shadow: 0 0 0 3px var(--pt-brand-ring) !important;
    color: var(--pt-text) !important;
}
::placeholder { color: var(--pt-text-mute) !important; opacity: 1; }
select option { background-color: var(--pt-bg-elev); color: var(--pt-text); }

/* Autofill do Chrome em qualquer campo do sistema. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
select:-webkit-autofill {
    -webkit-text-fill-color: var(--pt-text) !important;
    -webkit-box-shadow: 0 0 0 1000px var(--pt-card-inset) inset !important;
    caret-color: var(--pt-text);
    transition: background-color 9999s ease-in-out 0s;
}


/* ==========================================================================
   22. TICKETS — editor de mensagem e conversa
   O textarea .markdown-editor vira um EasyMDE por JS depois do load, entao
   as duas formas precisam estar cobertas.
   ========================================================================== */

textarea.markdown-editor,
#inputMessage {
    background-color: var(--pt-card-inset) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius-sm) !important;
    color: var(--pt-text) !important;
    min-height: 220px;
    font-family: inherit;
}

/* --- EasyMDE / CodeMirror (renderizados por JS) --- */
.EasyMDEContainer,
.EasyMDEContainer .CodeMirror,
.CodeMirror,
.CodeMirror-scroll,
.editor-preview,
.editor-preview-side,
.editor-statusbar {
    background-color: var(--pt-card-inset) !important;
    color: var(--pt-text) !important;
    border-color: var(--pt-border-strong) !important;
}
.CodeMirror { border-radius: var(--pt-radius-sm) !important; }
.CodeMirror-cursor { border-left-color: var(--pt-brand) !important; }
.CodeMirror-selected,
.CodeMirror-line::selection,
.CodeMirror-line > span::selection { background: var(--pt-brand-soft) !important; }
.CodeMirror-placeholder { color: var(--pt-text-mute) !important; }
/* Fatias internas do CodeMirror que nascem brancas e aparecem como frestas. */
.CodeMirror-gutters,
.CodeMirror-gutter,
.CodeMirror-scrollbar-filler,
.CodeMirror-gutter-filler,
.CodeMirror-linenumber {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-divider) !important;
    color: var(--pt-text-mute) !important;
}
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar { background-color: transparent !important; }
.CodeMirror-fullscreen, .editor-preview-active, .editor-preview-active-side {
    background-color: var(--pt-card-inset) !important;
}
.CodeMirror .cm-header,
.CodeMirror .cm-strong { color: var(--pt-text-strong) !important; }
.CodeMirror .cm-link,
.CodeMirror .cm-url { color: var(--pt-brand) !important; }
.CodeMirror .cm-comment { color: var(--pt-text-mute) !important; }
.CodeMirror .cm-quote { color: var(--pt-text-dim) !important; }

.editor-toolbar {
    background-color: var(--pt-bg-elev) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-bottom: 0 !important;
    border-radius: var(--pt-radius-sm) var(--pt-radius-sm) 0 0 !important;
    opacity: 1 !important;
}
.editor-toolbar a,
.editor-toolbar button,
.editor-toolbar i.separator {
    color: var(--pt-text-dim) !important;
    border-color: transparent !important;
    background: transparent !important;
    border-radius: 6px;
}
.editor-toolbar a:hover,
.editor-toolbar button:hover,
.editor-toolbar a.active,
.editor-toolbar button.active {
    background: var(--pt-card-hover) !important;
    border-color: var(--pt-border) !important;
    color: var(--pt-text-strong) !important;
}
.editor-statusbar { color: var(--pt-text-mute) !important; border: 0 !important; }
.editor-preview, .editor-preview-side { padding: 1rem; }
.editor-preview a { color: var(--pt-brand) !important; }
.editor-preview code, .editor-preview pre {
    background: var(--pt-bg-deep) !important;
    color: var(--pt-brand) !important;
    border: 1px solid var(--pt-border) !important;
    border-radius: 6px;
}

/* --- Conversa do ticket --- */
.ticket-reply,
.markdown-content {
    background-color: var(--pt-card) !important;
    border: 1px solid var(--pt-border) !important;
    border-radius: var(--pt-radius) !important;
    color: var(--pt-text) !important;
}
.ticket-reply.staff {
    background: linear-gradient(150deg, var(--pt-brand-soft), var(--pt-card) 42%) !important;
    border-color: var(--pt-brand-ring) !important;
}
.ticket-reply .ticket-reply-header,
.ticket-reply h4 { color: var(--pt-text-strong) !important; }
.markdown-content blockquote {
    border-left: 3px solid var(--pt-border-strong);
    background: var(--pt-card-inset);
    color: var(--pt-text-dim);
    padding: .75rem 1rem;
    border-radius: 0 var(--pt-radius-sm) var(--pt-radius-sm) 0;
}
.markdown-content code, .markdown-content pre {
    background: var(--pt-bg-deep) !important;
    color: var(--pt-brand) !important;
    border: 1px solid var(--pt-border) !important;
    border-radius: 6px;
}
.markdown-content table td,
.markdown-content table th { border-color: var(--pt-divider) !important; }

/* Anexos e area de upload */
.dropzone, .file-upload, .attachment-list {
    background: var(--pt-card-inset) !important;
    border: 1px dashed var(--pt-border-strong) !important;
    border-radius: var(--pt-radius-sm) !important;
    color: var(--pt-text-dim) !important;
}


/* ==========================================================================
   23. LOGIN — reforco da limpeza do cromo
   Nomes extras cobrindo variacoes de tema; o twenty-one usa #nav e .navbar,
   mas outros temas/versoes usam #main-menu e #secondary-menu.
   ========================================================================== */

body.pt-authpage #header,
body.pt-authpage header.header,
body.pt-authpage #main-menu,
body.pt-authpage #secondary-menu,
body.pt-authpage #nav,
body.pt-authpage .navbar,
body.pt-authpage .main-navbar-wrapper,
body.pt-authpage .topbar,
body.pt-authpage .master-breadcrumb,
body.pt-authpage nav[aria-label="breadcrumb"],
body.pt-authpage .breadcrumb,
body.pt-authpage #footer,
body.pt-authpage footer,
body.pt-authpage .footer,
body.pt-authpage .domain-search-container,
body.pt-authpage #top-affiliate-bar,
body.pt-authpage .announcement-bar { display: none !important; }

/* Se por algum motivo o wrapper .pt-auth nao existir, o body ainda entrega
   uma tela cheia centralizada em vez de conteudo empilhado no topo. */
body.pt-authpage {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background: var(--pt-bg) !important;
}
body.pt-authpage #main-body {
    flex: 1 1 auto;
    display: flex;
    align-items: stretch;
}
body.pt-authpage #main-body > .container,
body.pt-authpage #main-body > div {
    flex: 1 1 auto;
    display: flex;
    align-items: stretch;
}
body.pt-authpage #main-body .row {
    flex: 1 1 auto;
    align-items: stretch;
}
body.pt-authpage .primary-content { display: flex; align-items: stretch; }
body.pt-authpage .pt-auth { flex: 1 1 auto; }


/* --- Reafirmacao: os componentes do tema que a varredura acima tocaria.
       Vem depois no arquivo, entao vencem por ordem de origem. --- */
.pt-panel--flat,
.pt-panel--flat .card-header,
.pt-panel--flat .card-body,
.pt-panel--flat .card-footer { background-color: transparent !important; }
.pt-panel .card-header { background-color: transparent !important; }
.pt-panel .card-footer { background-color: var(--pt-card-inset) !important; }
.pt-panel { background-color: var(--pt-card) !important; }
.pt-panel--flat { background-color: transparent !important; }
.pt-tabpanes { background-color: var(--pt-card) !important; }
.pt-scope .dropdown-menu,
#header .dropdown-menu { background-color: var(--pt-bg-elev) !important; }
.pt-card__head { background-color: transparent !important; }
.pt-hero, .pt-card { background-color: var(--pt-card) !important; }
.pt-auth__card { background-color: var(--pt-card) !important; }
.pt-field__input { background-color: var(--pt-card-inset) !important; }
#main-body .pt-field__input:focus { background-color: var(--pt-card) !important; }


/* ==========================================================================
   24. DASHBOARD — banner de boas-vindas corporativo
   Substitui o hero centralizado gigante. Referencia de tom: Stripe/Vercel —
   horizontal, contido, sem animacao chamando atencao.
   ========================================================================== */

/* Desliga o respiro e o brilho varrendo nos botoes do dashboard: era o que
   dava o ar de propaganda. O verde continua forte, so que parado. */
.pt-welcome .pt-btn--app,
.pt-btn--calm {
    animation: none !important;
}
.pt-welcome .pt-btn--app::after,
.pt-btn--calm::after { display: none !important; }

.pt-welcome {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 2rem;
    flex-wrap: wrap;
    padding: 1.85rem 2rem;
    margin-bottom: 1.25rem;
    background: var(--pt-card);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
    box-shadow: var(--pt-shadow-sm);
}
@media (max-width: 767px) { .pt-welcome { padding: 1.35rem; gap: 1.25rem; } }

.pt-welcome__text { min-width: 0; flex: 1 1 320px; }

.pt-welcome__hello {
    margin: 0;
    font-size: 22px;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--pt-text-strong);
    line-height: 1.25;
}
.pt-welcome__sub {
    margin: .35rem 0 0;
    font-size: 14px;
    color: var(--pt-text-dim);
}
.pt-welcome__status {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    margin-bottom: .6rem;
    padding: .2rem .6rem;
    border-radius: var(--pt-radius-pill);
    background: var(--pt-brand-soft);
    border: 1px solid var(--pt-brand-ring);
    color: var(--pt-brand);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
}

.pt-welcome__actions {
    display: flex;
    align-items: center;
    gap: .7rem;
    flex-wrap: wrap;
}
@media (max-width: 575px) {
    .pt-welcome__actions { width: 100%; }
    .pt-welcome__actions .pt-btn--calm { width: 100%; }
}

/* Botao principal: verde solido, legivel, sem espalhafato. */
.pt-btn--calm {
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .6rem;
    padding: 14px 26px;
    border: 0;
    border-radius: var(--pt-radius-sm);
    background: var(--pt-brand);
    color: #04241a;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: -.005em;
    line-height: 1.2;
    text-decoration: none !important;
    white-space: nowrap;
    box-shadow: 0 6px 18px -8px rgba(16, 185, 129, .55);
    transition: background var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease),
                transform var(--pt-speed) var(--pt-ease);
}
.pt-btn--calm:hover,
.pt-btn--calm:focus {
    background: var(--pt-brand-hover);
    color: #04241a;
    transform: translateY(-1px);
    box-shadow: 0 12px 28px -10px rgba(16, 185, 129, .7);
}
.pt-btn--calm:active { transform: translateY(0); }

.pt-btn--quiet {
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    padding: 14px 20px;
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius-sm);
    background: transparent;
    color: var(--pt-text-dim);
    font-size: 14px;
    font-weight: 600;
    text-decoration: none !important;
    white-space: nowrap;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-btn--quiet:hover {
    background: var(--pt-card-hover);
    border-color: var(--pt-brand);
    color: var(--pt-text-strong);
}


/* ==========================================================================
   25. BASE DE CONHECIMENTO — autoatendimento no dashboard
   ========================================================================== */

.pt-help {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
    gap: 1.25rem;
    align-items: center;
    padding: 1.5rem 2rem;
    margin-bottom: 2.5rem;
    background: var(--pt-card-inset);
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius);
}
@media (max-width: 991px) {
    .pt-help { grid-template-columns: 1fr; padding: 1.35rem; gap: 1rem; }
}

.pt-help__intro { min-width: 0; }
.pt-help__title {
    margin: 0 0 .9rem;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--pt-text-mute);
    display: flex;
    align-items: center;
    gap: .5rem;
}
.pt-help__title i { color: var(--pt-brand); }

.pt-help__search { position: relative; display: block; }
.pt-help__search input {
    box-sizing: border-box;
    width: 100%;
    height: 48px;
    padding: 0 46px 0 44px;
    background: var(--pt-card) !important;
    border: 1px solid var(--pt-border-strong) !important;
    border-radius: var(--pt-radius-sm) !important;
    color: var(--pt-text) !important;
    font-size: 14px;
    transition: border-color var(--pt-speed) var(--pt-ease),
                box-shadow var(--pt-speed) var(--pt-ease);
}
.pt-help__search input:focus {
    outline: none;
    border-color: var(--pt-brand) !important;
    box-shadow: 0 0 0 3px var(--pt-brand-ring) !important;
}
.pt-help__search .pt-help__icon {
    position: absolute;
    left: 16px; top: 50%;
    transform: translateY(-50%);
    color: var(--pt-text-mute);
    font-size: 14px;
    pointer-events: none;
}
.pt-help__search button {
    position: absolute;
    right: 6px; top: 50%;
    transform: translateY(-50%);
    width: 36px; height: 36px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    border-radius: 8px;
    background: var(--pt-brand-soft);
    color: var(--pt-brand);
    cursor: pointer;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-help__search button:hover { background: var(--pt-brand); color: var(--pt-on-brand); }

.pt-help__links {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    justify-content: flex-end;
}
@media (max-width: 991px) { .pt-help__links { justify-content: flex-start; } }

.pt-help__link {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    padding: .6rem .95rem;
    border: 1px solid var(--pt-border);
    border-radius: var(--pt-radius-pill);
    background: var(--pt-card);
    color: var(--pt-text-dim);
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    transition: all var(--pt-speed) var(--pt-ease);
}
.pt-help__link i { color: var(--pt-text-mute); font-size: 12px; }
.pt-help__link:hover {
    border-color: var(--pt-brand);
    background: var(--pt-brand-soft);
    color: var(--pt-brand);
    text-decoration: none;
}
.pt-help__link:hover i { color: var(--pt-brand); }


/* ==========================================================================
   26. WHITE SPOTS — cobertura dos seletores do theme.css do WHMCS
   Levantados por varredura do proprio theme.css: 77 regras pintam fundo
   branco/claro. As que sobreviviam ao dark estao todas aqui, em tokens.
   ========================================================================== */

/* --- O pior deles: o WHMCS pinta CADA celula de tabela de branco com
       !important. Era a origem das "tabelas brancas". --- */
.table td,
.table th,
.table tbody td,
.table thead th,
.table tfoot td {
    background-color: transparent !important;
    color: var(--pt-text);
    border-color: var(--pt-divider) !important;
}
.table thead th,
.table .thead-light th,
.table .thead-dark th {
    background-color: var(--pt-card-inset) !important;
    color: var(--pt-text-dim) !important;
    border-color: var(--pt-border-strong) !important;
}
.table-striped tbody tr:nth-of-type(odd) td { background-color: rgba(148, 163, 184, .04) !important; }
.table-hover tbody tr:hover td { background-color: var(--pt-card-hover) !important; color: var(--pt-text-strong); }
.table-bordered, .table-bordered td, .table-bordered th { border-color: var(--pt-divider) !important; }
.table-active td, .table-active th, tr.table-active { background-color: var(--pt-brand-soft) !important; }

/* --- Botoes e selos claros do Bootstrap --- */
.btn-light,
.btn-light.disabled,
.btn-light:disabled,
.btn-outline-light,
.btn-outline-light:hover,
.badge-light,
.btn-secondary {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text-dim) !important;
}
.btn-light:hover, .btn-outline-light:hover, .btn-secondary:hover {
    background-color: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
.btn-white, .btn-default {
    background-color: transparent !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text-dim) !important;
}
.btn-default:hover {
    background-color: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}

/* --- Estados desabilitado / somente leitura --- */
.form-control:disabled,
.form-control[readonly],
.custom-select:disabled,
.custom-file-input[disabled] ~ .custom-file-label,
.custom-file-input:disabled ~ .custom-file-label {
    background-color: var(--pt-bg-deep) !important;
    color: var(--pt-text-mute) !important;
    border-color: var(--pt-border) !important;
    opacity: 1;
}

/* --- Checkbox / radio / switch customizados --- */
.custom-control-label::before {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-border-strong) !important;
}
.custom-control-input:checked ~ .custom-control-label::before {
    background-color: var(--pt-brand) !important;
    border-color: var(--pt-brand) !important;
}
.custom-control-input[disabled] ~ .custom-control-label::before,
.custom-control-input:disabled ~ .custom-control-label::before {
    background-color: var(--pt-bg-deep) !important;
}
.custom-control-label { color: var(--pt-text-dim); }
/* A bolinha do switch fica clara de proposito: e o "pino" sobre a trilha. */
.custom-switch .custom-control-label::after { background-color: var(--pt-text-dim) !important; }
.custom-switch .custom-control-input:checked ~ .custom-control-label::after {
    background-color: var(--pt-on-brand) !important;
}

/* --- Select e file input customizados --- */
.custom-select,
.custom-file-label {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text) !important;
}
.custom-file-label::after {
    background-color: var(--pt-bg-elev) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text-dim) !important;
}

/* --- Paginacao --- */
.page-link,
.page-item.disabled .page-link,
.page-item .page-link {
    background-color: transparent !important;
    border-color: var(--pt-border) !important;
    color: var(--pt-text-dim) !important;
}
.page-link:hover {
    background-color: var(--pt-card-hover) !important;
    border-color: var(--pt-border-strong) !important;
    color: var(--pt-text-strong) !important;
}
.page-item.active .page-link {
    background-color: var(--pt-brand-soft) !important;
    border-color: var(--pt-brand-ring) !important;
    color: var(--pt-brand) !important;
}

/* --- Abas ativas, progresso, miniaturas, dropdown hover --- */
.nav-tabs .nav-link.active,
.nav-tabs .nav-item.show .nav-link {
    background-color: var(--pt-card) !important;
    border-color: var(--pt-border) var(--pt-border) var(--pt-card) !important;
    color: var(--pt-brand) !important;
}
.progress { background-color: var(--pt-bg-deep) !important; }
.progress-bar { background-color: var(--pt-brand) !important; }
.img-thumbnail {
    background-color: var(--pt-card-inset) !important;
    border-color: var(--pt-border) !important;
}
.dropdown-item:hover,
.dropdown-item:focus {
    background-color: var(--pt-card-hover) !important;
    color: var(--pt-text-strong) !important;
}
.dropdown-divider { border-top-color: var(--pt-divider) !important; }
.popover-header { background-color: var(--pt-card-inset) !important; color: var(--pt-text-strong) !important; }
.popover-body { color: var(--pt-text-dim) !important; }
.list-group-item.disabled,
.list-group-item:disabled {
    background-color: transparent !important;
    color: var(--pt-text-mute) !important;
}
.carousel-indicators li { background-color: var(--pt-text-mute) !important; }
.close, .close:hover { color: var(--pt-text-dim) !important; text-shadow: none !important; opacity: .8; }

/* --- Tooltips --- */
.tooltip-inner {
    background-color: var(--pt-bg-elev) !important;
    color: var(--pt-text) !important;
    border: 1px solid var(--pt-border-strong);
    border-radius: var(--pt-radius-sm) !important;
}
.tooltip .arrow::before,
.bs-tooltip-top .arrow::before { border-top-color: var(--pt-bg-elev) !important; }
.bs-tooltip-bottom .arrow::before { border-bottom-color: var(--pt-bg-elev) !important; }
.bs-tooltip-left .arrow::before { border-left-color: var(--pt-bg-elev) !important; }
.bs-tooltip-right .arrow::before { border-right-color: var(--pt-bg-elev) !important; }

/* --- Utilitarios de fundo do Bootstrap --- */
.bg-white { background-color: var(--pt-card) !important; }
.bg-light { background-color: var(--pt-card-inset) !important; }
.bg-secondary { background-color: var(--pt-card-inset) !important; }
.text-dark { color: var(--pt-text-strong) !important; }
.text-black-50 { color: var(--pt-text-mute) !important; }
.border, .border-top, .border-bottom, .border-left, .border-right {
    border-color: var(--pt-border) !important;
}

/* --- O body do proprio theme.css --- */
body { background-color: var(--pt-bg) !important; }


/* ==========================================================================
   27. LOGIN CENTRADO — card flutuando sobre fundo escuro
   Substitui o split-screen. Referencia de tom: Stripe / Vercel.
   ========================================================================== */

.pt-authpanel {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    min-height: 100dvh;
    width: 100%;
    padding: 3rem 1.5rem;
    overflow: hidden;
    isolation: isolate;
    background: var(--pt-bg);
}
@media (max-width: 575px) { .pt-authpanel { padding: 2rem 1.15rem; } }

/* Atmosfera: dois halos suaves e uma malha discreta, tudo atras do card. */
.pt-authpanel::before {
    content: "";
    position: absolute;
    inset: -20%;
    z-index: -2;
    background:
        radial-gradient(42rem 26rem at 22% 12%, var(--pt-auth-glow-a), transparent 62%),
        radial-gradient(38rem 24rem at 80% 88%, var(--pt-auth-glow-b), transparent 64%);
    filter: blur(28px);
    pointer-events: none;
}
.pt-authpanel::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    opacity: .45;
    background-image:
        linear-gradient(rgba(148, 163, 184, .05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(148, 163, 184, .05) 1px, transparent 1px);
    background-size: 60px 60px;
    mask-image: radial-gradient(70% 60% at 50% 40%, #000, transparent 80%);
    -webkit-mask-image: radial-gradient(70% 60% at 50% 40%, #000, transparent 80%);
    pointer-events: none;
}

/* Alternador de tema no canto (o header esta oculto nesta pagina). */
.pt-authpanel__toggle {
    position: absolute;
    top: 1.5rem;
    right: 2rem;
    z-index: 5;
}
@media (max-width: 575px) { .pt-authpanel__toggle { top: .75rem; right: 1rem; } }

/* --- A coluna central --- */
.pt-authbox {
    position: relative;
    z-index: 1;
    width: 100%;
    max-width: 424px;
    display: flex;
    flex-direction: column;
    align-items: center;
}


/* O card em si reaproveita .pt-auth__card, com sombra mais generosa. */
.pt-authbox .pt-auth__card {
    max-width: none;
    width: 100%;
    padding: 2.5rem;
    border-radius: var(--pt-radius-card);
    box-shadow: var(--pt-shadow-card);
}
@media (max-width: 575px) {
    .pt-authbox .pt-auth__card { padding: 1.75rem 1.35rem; }
}

.pt-authbox .pt-auth__title { font-size: 24px; }
.pt-authbox .pt-auth__subtitle { margin-bottom: 1.85rem; }

.pt-authbox__legal {
    margin: 1.25rem 0 0;
    font-size: 12px;
    color: var(--pt-text-mute);
    text-align: center;
}

/* --- O split antigo continua servindo a recuperacao de senha --- */

/* ==========================================================================
   28. TOGGLE NO HEADER — variante compacta
   O botao mora na topbar (ao lado das notificacoes / conta), entao precisa
   de uma altura menor que a versao solta usada no login.
   ========================================================================== */

.pt-toggle-slot { margin-right: .65rem; display: inline-flex; align-items: center; }

.pt-toggle-slot .pt-themetoggle {
    height: 30px;
    padding: 0 .7rem;
    font-size: 12px;
    background: transparent;
    border-color: var(--pt-border);
    color: var(--pt-text-mute);
}
.pt-toggle-slot .pt-themetoggle:hover {
    background: var(--pt-card);
    border-color: var(--pt-border-strong);
    color: var(--pt-text-strong);
}
.pt-toggle-slot .pt-themetoggle i { font-size: 12px; }

/* Em tela estreita a topbar fica apertada: fica so o icone. */
@media (max-width: 767px) {
    .pt-toggle-slot .pt-themetoggle { padding: 0; width: 30px; justify-content: center; }
    .pt-toggle-slot .pt-themetoggle__light,
    .pt-toggle-slot .pt-themetoggle__dark { font-size: 0; gap: 0; }
    .pt-toggle-slot .pt-themetoggle i { font-size: 13px; }
}

/* --- Logomarca no topo do card de autenticacao --- */
.pt-auth__logoslot {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .7rem;
    margin-bottom: 1.6rem;
    min-height: 44px;
}
.pt-auth__logoslot img { max-height: 44px; max-width: 220px; width: auto; }
.pt-auth__mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px; height: 40px;
    border-radius: 12px;
    background: linear-gradient(135deg, #34d399, #059669);
    color: #04241a;
    font-size: 1.05rem;
    box-shadow: 0 8px 22px -10px rgba(16, 185, 129, .8);
}

/* O titulo e o subtitulo ficam centrados junto com a marca. */
.pt-authbox .pt-auth__title,
.pt-authbox .pt-auth__subtitle { text-align: center; }
.pt-authbox .pt-auth__subtitle { margin-bottom: 1.85rem; }

/* ==========================================================================
   30. BREADCRUMB FORA + SHELL DE AUTENTICACAO SERVIDO PELO SERVIDOR
   ========================================================================== */

/* O breadcrumb ("Pagina inicial do portal / Area do Cliente") sai de todas as
   telas. O <nav> ja nao e renderizado nas paginas de auth (header.tpl); aqui
   ele some tambem no resto do sistema. */
.master-breadcrumb,
nav[aria-label="breadcrumb"],
.breadcrumb { display: none !important; }

/* Sem a faixa do breadcrumb, o conteudo precisa do respiro de volta. */
#main-body { padding-top: 32px; }

/* --- Shell de autenticacao ---
   .pt-authshell vem do header.tpl ({if $ptAuthPage}), entao nao depende de JS.
   A classe .pt-authpage no <body> tambem vem do servidor; o script inline do
   login.tpl continua como rede de seguranca caso o hook nao esteja instalado. */
#main-body.pt-authshell,
body.pt-authpage #main-body {
    padding: 0 !important;
    margin: 0 !important;
    background: var(--pt-bg) !important;
    display: flex;
    align-items: stretch;
    min-height: 100vh;
    min-height: 100dvh;
}

/* Neutraliza a grade do WHMCS: container, row, colunas e o padding delas.
   Sem isto o card fica preso na coluna e encosta na esquerda. */
#main-body.pt-authshell > .container,
#main-body.pt-authshell > div,
body.pt-authpage #main-body > .container,
body.pt-authpage #main-body > div {
    max-width: none !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    display: flex !important;
    align-items: stretch !important;
    flex: 1 1 auto !important;
}
#main-body.pt-authshell .row,
body.pt-authpage #main-body .row {
    width: 100% !important;
    margin: 0 !important;
    flex: 1 1 auto !important;
    align-items: stretch !important;
}
#main-body.pt-authshell .primary-content,
body.pt-authpage #main-body .primary-content {
    flex: 1 1 auto !important;
    max-width: none !important;
    width: 100% !important;
    padding: 0 !important;
    margin: 0 !important;
    display: flex !important;
    align-items: stretch !important;
    float: none !important;
}
/* A sidebar nao existe no login, mas se algum hook injetar uma, ela sai. */
#main-body.pt-authshell .row > .col-lg-4.col-xl-3,
body.pt-authpage #main-body .row > .col-lg-4.col-xl-3 { display: none !important; }

/* O painel toma a largura toda do que sobrou. */
#main-body.pt-authshell .pt-authpanel,
body.pt-authpage .pt-authpanel { flex: 1 1 auto; width: 100%; }

/* ==========================================================================
   31. LOGIN — fuga definitiva da grade do WHMCS
   O painel deixa de depender de .pt-authshell / .pt-authpage (que vem do hook)
   para se centralizar. Com position:fixed ele ignora .container, .row,
   .primary-content e qualquer coluna que o WHMCS coloque em volta - o card
   fica no centro da viewport mesmo se o hook nao estiver instalado.
   ========================================================================== */

.pt-authpanel {
    position: fixed;
    inset: 0;
    z-index: 2000;
    width: 100vw;
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow-y: auto;          /* card alto continua rolavel */
    /* Sem isto, a barra de rolagem interna aparece so de um lado e desloca o
       card ~7px do centro. O gutter simetrico mantem a centralizacao exata
       com ou sem barra. */
    scrollbar-gutter: stable both-edges;
    overscroll-behavior: contain;
    background: var(--pt-bg);
    box-sizing: border-box;
}

/* Some com o cromo mesmo sem o hook: a presenca do painel ja e o sinal.
   O :has() cobre navegadores modernos; o body.pt-authpage (script do
   login.tpl) e a classe do header.tpl cobrem o resto. */
body:has(.pt-authpanel) #header,
body:has(.pt-authpanel) .master-breadcrumb,
body:has(.pt-authpanel) #footer,
body:has(.pt-authpanel) .footer { display: none !important; }
body:has(.pt-authpanel) { overflow: hidden; }

/* Em tela baixa o card precisa de ar em cima e embaixo. */
@media (max-height: 720px) {
    .pt-authpanel { align-items: flex-start; padding-top: 3rem; padding-bottom: 3rem; }
}

/* ==========================================================================
   32. UPGRADE GLOBAL — paginas internas (servicos, tickets, faturas)
   Mesmo tratamento do dashboard: cantos suaves, sem bordas duras de tabela,
   sombra discreta e respiro generoso.
   ========================================================================== */

:root { --pt-radius-ui: 12px; }

/* --- Tabelas: viram superficie, nao grade --- */
#main-body .table,
#main-body table.dataTable {
    border-collapse: separate !important;
    border-spacing: 0 !important;
    border: 1px solid var(--pt-border) !important;
    border-radius: var(--pt-radius-ui) !important;
    overflow: hidden;
    margin-bottom: 1.5rem;
    background: var(--pt-card);
    box-shadow: var(--pt-shadow-sm);
}
#main-body .table th,
#main-body .table td,
#main-body table.dataTable th,
#main-body table.dataTable td {
    border: 0 !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    padding: 14px 18px !important;
    vertical-align: middle;
}
#main-body .table tbody tr:last-child td,
#main-body table.dataTable tbody tr:last-child td { border-bottom: 0 !important; }

/* Cantos arredondados sem wrapper: aplica nas celulas das pontas. */
#main-body .table thead tr:first-child th:first-child { border-top-left-radius: var(--pt-radius-ui); }
#main-body .table thead tr:first-child th:last-child  { border-top-right-radius: var(--pt-radius-ui); }
#main-body .table tbody tr:last-child td:first-child  { border-bottom-left-radius: var(--pt-radius-ui); }
#main-body .table tbody tr:last-child td:last-child   { border-bottom-right-radius: var(--pt-radius-ui); }

/* A borda dura do .table-bordered sai de vez. */
#main-body .table-bordered,
#main-body .table-bordered th,
#main-body .table-bordered td { border-left: 0 !important; border-right: 0 !important; }

#main-body .table thead th {
    background: var(--pt-card-inset) !important;
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--pt-text-mute) !important;
}

/* --- Controles do DataTables com respiro --- */
#main-body .dataTables_wrapper { padding: 0; }
#main-body .dataTables_length,
#main-body .dataTables_filter { margin-bottom: 1rem; }
#main-body .dataTables_filter input,
#main-body .dataTables_length select {
    border-radius: var(--pt-radius-ui) !important;
    padding: .5rem .85rem !important;
}
#main-body .dataTables_paginate { margin-top: 1rem; }
#main-body .dataTables_paginate .paginate_button,
#main-body .page-link {
    border-radius: 10px !important;
    padding: .45rem .85rem !important;
}
#main-body .dataTables_info { padding-top: .75rem; font-size: .85rem; }

/* --- Abas genericas com o mesmo desenho das do painel de servico --- */
#main-body .nav-tabs {
    border-bottom: 0 !important;
    gap: .35rem;
    margin-bottom: 1.25rem;
    flex-wrap: wrap;
}
#main-body .nav-tabs .nav-item { margin-bottom: 0; }
#main-body .nav-tabs .nav-link {
    border: 1px solid transparent !important;
    border-radius: var(--pt-radius-pill) !important;
    padding: .55rem 1.05rem !important;
    font-size: .85rem;
    font-weight: 600;
    color: var(--pt-text-mute) !important;
    background: transparent !important;
}
#main-body .nav-tabs .nav-link:hover {
    background: var(--pt-card-hover) !important;
    border-color: var(--pt-border) !important;
    color: var(--pt-text-strong) !important;
}
#main-body .nav-tabs .nav-link.active,
#main-body .nav-tabs .nav-item.show .nav-link {
    background: var(--pt-brand-soft) !important;
    border-color: var(--pt-brand-ring) !important;
    color: var(--pt-brand) !important;
}

/* --- Cards e paineis internos --- */
#main-body .card:not(.pt-panel):not(.pt-card):not(.pt-auth__card),
#main-body .panel:not(.pt-panel) {
    border: 1px solid var(--pt-border) !important;
    border-radius: var(--pt-radius-ui) !important;
    box-shadow: var(--pt-shadow-sm) !important;
    margin-bottom: 1.5rem;
    overflow: hidden;
}
#main-body .card:not(.pt-panel) > .card-body,
#main-body .panel:not(.pt-panel) > .panel-body { padding: 1.5rem !important; }
#main-body .card:not(.pt-panel) > .card-header,
#main-body .panel:not(.pt-panel) > .panel-heading {
    padding: 1.05rem 1.5rem !important;
    border-bottom: 1px solid var(--pt-divider) !important;
    font-weight: 700;
    letter-spacing: -.01em;
}
#main-body .card:not(.pt-panel) > .card-footer {
    padding: 1rem 1.5rem !important;
    border-top: 1px solid var(--pt-divider) !important;
}

/* --- Listas --- */
#main-body .list-group {
    border-radius: var(--pt-radius-ui) !important;
    overflow: hidden;
}
#main-body .list-group-item {
    border-left: 0 !important;
    border-right: 0 !important;
    padding: 1rem 1.25rem !important;
}
/* Os paineis do dashboard tem espacamento proprio - reafirmado com a mesma
   especificidade de ID para vencer a regra generica acima. */
#main-body .pt-panel .list-group-item { padding: .8rem 1.3rem !important; }
#main-body .pt-panel--flat .list-group-item { padding: .95rem 0 !important; }
#main-body .pt-panel .list-group,
#main-body .pt-panel--flat .list-group { border-radius: 0 !important; overflow: visible; }

/* --- Formularios internos --- */
#main-body .form-control,
#main-body .custom-select {
    border-radius: var(--pt-radius-ui) !important;
    padding: .65rem .9rem;
    min-height: 44px;
}
#main-body .form-group { margin-bottom: 1.25rem; }
#main-body .btn { border-radius: var(--pt-radius-ui) !important; }
#main-body .input-group > .form-control:first-child { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
#main-body .input-group > .form-control:last-child { border-top-left-radius: 0 !important; border-bottom-left-radius: 0 !important; }

/* --- Alertas --- */
#main-body .alert { border-radius: var(--pt-radius-ui) !important; padding: 1.05rem 1.25rem; }

/* --- Titulos de secao --- */
#main-body h1, #main-body h2, #main-body h3 { letter-spacing: -.02em; }
