/* Digz - site-wide dashboard styles. Premium, polished, not glossy.
   Relies on style/theme.css for color tokens. */

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    color: var(--text);
    background: var(--bg-1);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    line-height: 1.5;
    font-feature-settings: "cv02", "cv03", "cv04", "cv11", "ss01";
}

/* ============================================================
   LAYOUT FRAME - content fills the viewport, adjusts when sidebar collapses
   ============================================================ */
/* The sidebar is position:fixed, so .content-container only needs a left
   margin to clear it. Width is auto (= remaining viewport width) and the
   min-height + box-sizing make it fill the visible viewport. */
html, body { min-height: 100vh; }
.content-container {
    margin-left: 280px;
    padding: 1.75rem 2rem 3rem;
    transition: margin-left .25s cubic-bezier(.4,0,.2,1);
    box-sizing: border-box;
    width: auto;
    min-height: 100vh;
    max-width: none;
}
/* Sidebar collapsed -> content slides left to fill the freed space */
body.sidebar-collapsed .content-container { margin-left: 78px; }
/* Sidebar fully hidden (desktop) -> content gets full width */
body.sidebar-is-hidden .content-container { margin-left: 0; }
@media (max-width: 1024px) {
    .content-container { margin-left: 0 !important; padding: 4.5rem 1rem 2rem; }
}
@media (max-width: 600px) { .content-container { padding: 4.5rem .85rem 2rem; } }

/* Legacy buyer-page wrapper compatibility:
   Older pages wrap the content in
     <div class="flex min-h-screen">
         <?php include "navbar.php"; ?>
         <div class="content-container w-full">
             <div class="container mx-auto px-4 sm:px-6 lg:px-8"> ... </div>
         </div>
     </div>
   That outer .flex + the Tailwind .container.mx-auto created a centered
   "floating card" look because .container had a max-width. Force the
   wrapper and inner container to fill the full available width. */
body > .flex.min-h-screen {
    display: block;        /* flex on a page with a fixed sidebar is unnecessary */
    min-height: 100vh;
}
.content-container > .container,
.content-container > div > .container,
.content-container .container.mx-auto {
    max-width: none !important;
    width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
}
/* w-full Tailwind helper */
.content-container.w-full { width: auto; }

.seller-shell, .admin-shell { min-height: 100vh; position: relative; }
.seller-content, .admin-content {
    margin-left: 260px;
    padding: 1.75rem 2rem 3rem;
    transition: margin-left .25s cubic-bezier(.4,0,.2,1);
    box-sizing: border-box;
    width: auto;
}
@media (max-width: 1024px) {
    .seller-content, .admin-content { margin-left: 0 !important; padding: 4.5rem 1rem 2rem; }
}
@media (max-width: 600px) {
    .seller-content, .admin-content { padding: 4.5rem .85rem 2rem; }
}

/* Old admin pages use #layoutSidenav_content wrapper too */
#layoutSidenav_content {
    margin-left: 260px;
    transition: margin-left .25s cubic-bezier(.4,0,.2,1);
    box-sizing: border-box;
    width: auto;
}
@media (max-width: 1024px) { #layoutSidenav_content { margin-left: 0 !important; } }

.grid { display: grid; gap: 1rem; }
.grid-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.grid-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.grid-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
.grid-5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
.grid-spend { grid-template-columns: 2fr 1fr; }
.grid-heat  { grid-template-columns: 1.4fr 1fr; }
.grid-news  { grid-template-columns: 2fr 1fr; }
@media (max-width: 1200px) {
    .grid-5 { grid-template-columns: repeat(3, 1fr); }
    .grid-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 900px) {
    .grid-spend, .grid-heat, .grid-news, .grid-3 { grid-template-columns: 1fr; }
}
@media (max-width: 600px) {
    .grid-2, .grid-4, .grid-5 { grid-template-columns: 1fr; }
}

.row { display: flex; align-items: center; gap: .5rem; }
.muted { color: var(--muted); }
.stat-strong { color: var(--text); font-weight: 700; }

/* ============================================================
   PREMIUM CARDS
   ============================================================ */
.card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 16px;
    padding: 1.25rem 1.4rem;
    box-shadow: var(--shadow-1);
    transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
    position: relative;
}
.card:hover {
    border-color: var(--border-strong);
    transform: translateY(-1px);
    box-shadow: var(--shadow-2);
}
.card-link { display: block; color: inherit; text-decoration: none; }
.card-link:hover .card { border-color: var(--border-accent); }

.card-header {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: 1rem; gap: .5rem;
}
.card-title {
    font-weight: 600; font-size: .92rem; color: var(--text);
    display: flex; align-items: center; gap: .55rem;
    letter-spacing: -0.01em;
}
.card-title i {
    color: var(--accent); font-size: 13px;
    width: 22px; height: 22px;
    background: var(--accent-soft);
    border-radius: 6px;
    display: inline-flex; align-items: center; justify-content: center;
}

.badge {
    display: inline-flex; align-items: center; gap: .3rem;
    background: var(--surface-2); border: 1px solid var(--border);
    color: var(--text-3);
    padding: .22rem .55rem;
    border-radius: 999px;
    font-size: .7rem; font-weight: 600;
    letter-spacing: .02em;
    font-variant-numeric: tabular-nums;
}
.badge-good { color: var(--good); background: var(--good-soft); border-color: color-mix(in srgb, var(--good) 25%, transparent); }
.badge-bad  { color: var(--bad);  background: var(--bad-soft);  border-color: color-mix(in srgb, var(--bad) 25%, transparent); }
.badge-accent { color: var(--accent); background: var(--accent-soft); border-color: color-mix(in srgb, var(--accent) 25%, transparent); }
.badge-amber { color: var(--accent-3); background: var(--accent-3-soft); border-color: color-mix(in srgb, var(--accent-3) 25%, transparent); }
.badge-violet { color: var(--violet); background: var(--violet-soft); border-color: color-mix(in srgb, var(--violet) 25%, transparent); }

/* ============================================================
   PAGE HEAD
   ============================================================ */
.page-head {
    display: flex; align-items: flex-start; justify-content: space-between;
    gap: 1rem; margin-bottom: 1.5rem; flex-wrap: wrap;
}
.page-head h1 {
    font-size: 1.65rem; font-weight: 700; margin: 0;
    letter-spacing: -0.025em; line-height: 1.2;
    background: linear-gradient(180deg, var(--text), var(--text-2));
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent;
}
.page-head .sub {
    color: var(--text-3); font-size: .92rem; margin-top: .35rem;
    font-weight: 400;
}
.page-head .actions {
    display: flex; gap: .5rem; align-items: center; flex-wrap: wrap;
}

.meta-pill {
    display: inline-flex; align-items: center; gap: .4rem;
    color: var(--text-2); font-size: .78rem; font-weight: 500;
    padding: .35rem .7rem;
    border-radius: 999px;
    background: var(--surface); border: 1px solid var(--border);
    transition: border-color .15s ease, color .15s ease;
}
.meta-pill:hover { border-color: var(--border-strong); }
.meta-pill i { font-size: 12px; }

/* ============================================================
   BUTTONS - premium with subtle depth
   ============================================================ */
.btn {
    display: inline-flex; align-items: center; gap: .5rem;
    background: var(--accent);
    color: #fff;
    padding: .6rem 1.05rem;
    border-radius: 10px;
    border: 1px solid transparent;
    font-weight: 600; font-size: .87rem;
    cursor: pointer; text-decoration: none;
    transition: background .15s ease, transform .12s ease, box-shadow .15s ease;
    line-height: 1.1;
    box-shadow: 0 1px 0 rgba(255,255,255,0.10) inset, 0 1px 2px rgba(0,0,0,0.15);
    position: relative;
    font-feature-settings: "cv02", "ss01";
}
.btn:hover {
    background: var(--accent-hover);
    transform: translateY(-1px);
    box-shadow: 0 1px 0 rgba(255,255,255,0.15) inset, 0 4px 12px rgba(0,0,0,0.2);
}
.btn:active { transform: translateY(0); }
.btn.ghost {
    background: var(--surface);
    color: var(--text);
    border: 1px solid var(--border-strong);
    box-shadow: var(--shadow-1);
}
.btn.ghost:hover {
    background: var(--surface-2);
    border-color: var(--accent);
    color: var(--text);
}
.btn.full { width: 100%; justify-content: center; }
.btn-sm { padding: .42rem .8rem; font-size: .78rem; border-radius: 8px; }
.btn-lg { padding: .8rem 1.4rem; font-size: .95rem; border-radius: 12px; }
.btn-success { background: var(--good); color: #fff; }
.btn-success:hover { background: color-mix(in srgb, var(--good) 88%, #fff); }
.btn-danger { background: var(--bad); color: #fff; }
.btn-danger:hover { background: color-mix(in srgb, var(--bad) 88%, #fff); }

/* ============================================================
   KPI TILES - premium with accent stripe
   ============================================================ */
.kpi { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; }
.kpi .label {
    color: var(--text-3); font-size: .7rem; font-weight: 600;
    text-transform: uppercase; letter-spacing: .1em;
}
.kpi .value {
    font-size: 1.7rem; font-weight: 700; margin-top: .35rem;
    color: var(--text); letter-spacing: -0.025em;
    font-variant-numeric: tabular-nums;
    line-height: 1.1;
}
.kpi .sub {
    color: var(--text-3); font-size: .78rem; margin-top: .4rem;
    display: flex; align-items: center; gap: .4rem; flex-wrap: wrap;
}

.kpi .icon-box {
    width: 44px; height: 44px;
    border-radius: 12px;
    display: flex; align-items: center; justify-content: center;
    color: #fff; font-size: 17px; flex-shrink: 0;
    background: var(--grad-accent);
    box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 25%, transparent), inset 0 1px 0 rgba(255,255,255,0.18);
}
.kpi.amber  .icon-box { background: var(--grad-amber); box-shadow: 0 4px 12px color-mix(in srgb, var(--accent-3) 25%, transparent), inset 0 1px 0 rgba(255,255,255,0.18); }
.kpi.green  .icon-box { background: var(--grad-good); box-shadow: 0 4px 12px color-mix(in srgb, var(--good) 25%, transparent), inset 0 1px 0 rgba(255,255,255,0.18); }
.kpi.pink   .icon-box { background: linear-gradient(135deg, var(--pink), var(--bad)); box-shadow: 0 4px 12px color-mix(in srgb, var(--pink) 25%, transparent), inset 0 1px 0 rgba(255,255,255,0.18); }
.kpi.violet .icon-box { background: var(--grad-violet); box-shadow: 0 4px 12px color-mix(in srgb, var(--violet) 25%, transparent), inset 0 1px 0 rgba(255,255,255,0.18); }
.kpi.cyan   .icon-box { background: linear-gradient(135deg, var(--accent-2), var(--accent)); box-shadow: 0 4px 12px color-mix(in srgb, var(--accent-2) 25%, transparent), inset 0 1px 0 rgba(255,255,255,0.18); }

.sparkline { width: 100%; height: 44px; margin-top: .65rem; }

/* ============================================================
   PULSE STRIP (marketplace stats)
   ============================================================ */
.pulse-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: .85rem; margin-bottom: 1.25rem; }
@media (max-width: 900px) { .pulse-strip { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .pulse-strip { grid-template-columns: 1fr; } }

.pulse {
    padding: 1rem 1.15rem;
    border-radius: 14px;
    background: var(--surface); border: 1px solid var(--border);
    display: flex; align-items: center; gap: .85rem;
    transition: border-color .15s ease, transform .15s ease;
    box-shadow: var(--shadow-1);
}
.pulse:hover { border-color: var(--border-strong); transform: translateY(-1px); }
.pulse .ico {
    width: 38px; height: 38px; border-radius: 10px;
    display: flex; align-items: center; justify-content: center;
    color: #fff; font-size: 15px; flex-shrink: 0;
    background: var(--grad-accent);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.15);
}
.pulse.p-fire   .ico { background: linear-gradient(135deg, var(--bad), var(--accent-3)); }
.pulse.p-coin   .ico { background: var(--grad-good); }
.pulse.p-users  .ico { background: var(--grad-violet); }
.pulse.p-box    .ico { background: linear-gradient(135deg, var(--accent-2), var(--accent)); }

.pulse .lbl { font-size: .68rem; font-weight: 600; color: var(--text-3); text-transform: uppercase; letter-spacing: .1em; }
.pulse .val { font-size: 1.15rem; font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; letter-spacing: -0.02em; line-height: 1.2; margin-top: 2px; }

/* ============================================================
   HOT INVENTORY (shop tiles)
   ============================================================ */
.hot-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: .85rem; }
@media (max-width: 1100px) { .hot-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 600px)  { .hot-grid { grid-template-columns: repeat(2, 1fr); } }

.hot {
    display: block; text-decoration: none; color: inherit;
    padding: 1.1rem 1.15rem;
    border-radius: 14px;
    background: var(--surface); border: 1px solid var(--border);
    position: relative;
    transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
    box-shadow: var(--shadow-1);
    overflow: hidden;
}
.hot:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: var(--shadow-2); }
.hot::before {
    content: ''; position: absolute; top: 0; left: 0;
    width: 100%; height: 2px;
    background: var(--grad-accent);
    opacity: 0; transition: opacity .2s ease;
    border-radius: 14px 14px 0 0;
}
.hot:hover::before { opacity: 1; }
.hot .top { display: flex; align-items: center; justify-content: space-between; }
.hot .ico {
    width: 36px; height: 36px; border-radius: 10px;
    display: flex; align-items: center; justify-content: center;
    color: #fff; font-size: 14px;
    background: var(--grad-accent);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.15);
}
.hot.c-cyan   .ico { background: linear-gradient(135deg, var(--accent-2), var(--accent)); }
.hot.c-amber  .ico { background: var(--grad-amber); }
.hot.c-pink   .ico { background: linear-gradient(135deg, var(--pink), var(--bad)); }
.hot.c-violet .ico { background: var(--grad-violet); }
.hot.c-green  .ico { background: var(--grad-good); }

.hot .lbl { font-size: .62rem; font-weight: 700; color: var(--good); text-transform: uppercase; letter-spacing: .1em; display: inline-flex; align-items: center; gap: .3rem; padding: .15rem .45rem; background: var(--good-soft); border-radius: 999px; }
.hot .name { margin-top: .85rem; font-weight: 600; font-size: .9rem; color: var(--text); }
.hot .count { font-size: 1.55rem; font-weight: 700; color: var(--text); margin-top: .2rem; letter-spacing: -0.025em; font-variant-numeric: tabular-nums; }
.hot .meta { font-size: .7rem; color: var(--text-3); margin-top: 2px; }

/* ============================================================
   LISTS
   ============================================================ */
.list-row {
    display: flex; align-items: center; gap: .85rem;
    padding: .75rem 0;
    border-bottom: 1px solid var(--border);
    transition: background .12s ease;
    margin: 0 -.35rem; padding-left: .35rem; padding-right: .35rem;
    border-radius: 6px;
}
.list-row:hover { background: var(--surface-2); }
.list-row:last-child { border-bottom: none; }
.list-row .rank {
    width: 30px; height: 30px; border-radius: 8px;
    display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: .76rem;
    background: var(--surface-2);
    color: var(--text-3); flex-shrink: 0;
    font-variant-numeric: tabular-nums;
    border: 1px solid var(--border);
}
.list-row .rank.r1 { background: var(--grad-amber); color: #fff; border-color: transparent; box-shadow: 0 2px 6px color-mix(in srgb, var(--accent-3) 30%, transparent); }
.list-row .rank.r2 { background: linear-gradient(135deg, color-mix(in srgb, var(--text-3) 40%, var(--surface)), var(--text-3)); color: var(--text); border-color: transparent; }
.list-row .rank.r3 { background: linear-gradient(135deg, color-mix(in srgb, var(--accent-3) 30%, var(--surface)), color-mix(in srgb, var(--accent-3) 60%, var(--surface))); color: var(--accent-3); border-color: transparent; }
.list-row .name { font-weight: 600; font-size: .88rem; color: var(--text); }
.list-row .meta { color: var(--text-3); font-size: .78rem; margin-top: 2px; }
.amount-pos { color: var(--good); font-weight: 600; font-variant-numeric: tabular-nums; }
.amount-amber { color: var(--accent-3); font-weight: 600; font-variant-numeric: tabular-nums; }

/* ============================================================
   NOTIFICATION ICON & PANEL
   ============================================================ */
.notif-icon {
    position: relative;
    width: 42px; height: 42px; border-radius: 10px;
    background: var(--surface); border: 1px solid var(--border-strong);
    display: inline-flex; align-items: center; justify-content: center;
    cursor: pointer;
    transition: background .15s ease, border-color .15s ease, transform .12s ease;
    box-shadow: var(--shadow-1);
}
.notif-icon:hover { background: var(--surface-2); border-color: var(--accent); transform: translateY(-1px); }
.notif-icon i { color: var(--text-2); font-size: 16px; }
.notif-badge {
    position: absolute; top: -6px; right: -6px;
    background: var(--bad); color: #fff;
    font-size: .62rem; font-weight: 700;
    padding: 2px 6px; border-radius: 10px; display: none;
    line-height: 1;
    box-shadow: 0 0 0 2px var(--bg-1);
}

.notif-panel {
    position: fixed; top: 5rem; right: 1.5rem;
    width: 380px; max-height: 520px;
    background: var(--surface);
    border: 1px solid var(--border-strong);
    border-radius: 14px;
    box-shadow: var(--shadow-3);
    z-index: 1500;
    display: none;
    flex-direction: column;
    overflow: hidden;
}
.notif-panel.show { display: flex; }
.notif-head {
    display: flex; align-items: center; justify-content: space-between;
    padding: 1rem 1.15rem;
    border-bottom: 1px solid var(--border);
    background: var(--surface-2);
}
.notif-head h3 { margin: 0; font-size: .92rem; font-weight: 700; display: flex; align-items: center; gap: .5rem; }
.notif-head h3 i { color: var(--accent); }
.notif-actions { display: flex; gap: .25rem; align-items: center; }
.notif-action {
    color: var(--text-3); font-size: .76rem; cursor: pointer; font-weight: 500;
    padding: 4px 9px; border-radius: 7px;
    transition: background .15s ease, color .15s ease;
}
.notif-action:hover { color: var(--text); background: var(--surface); }
.notif-tabs { display: flex; padding: .35rem .85rem 0; border-bottom: 1px solid var(--border); gap: .35rem; }
.notif-tab {
    padding: .6rem .9rem; font-size: .77rem; font-weight: 600; color: var(--text-3);
    cursor: pointer; border-bottom: 2px solid transparent;
    transition: color .15s ease, border-color .15s ease;
}
.notif-tab.active { color: var(--text); border-bottom-color: var(--accent); }
.notif-tab .count {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 18px; padding: 0 5px; height: 17px; border-radius: 8px;
    background: var(--surface-2); border: 1px solid var(--border);
    margin-left: .35rem; font-size: .62rem; font-weight: 700;
}
.notif-tab.has-new .count { background: var(--bad); color: #fff; border-color: transparent; box-shadow: 0 0 0 2px var(--bad-soft); }
.notif-body { overflow-y: auto; max-height: 380px; }
.notif-item {
    display: flex; gap: .7rem; padding: .85rem 1.15rem;
    border-bottom: 1px solid var(--border);
    text-decoration: none; color: inherit;
    transition: background .15s ease;
}
.notif-item:hover { background: var(--surface-2); }
.notif-item:last-child { border-bottom: none; }
.notif-item .avi {
    width: 36px; height: 36px; flex-shrink: 0;
    border-radius: 10px;
    background: var(--accent-soft); border: 1px solid color-mix(in srgb, var(--accent) 20%, transparent);
    display: flex; align-items: center; justify-content: center;
    color: var(--accent); font-size: 14px;
}
.notif-item.kind-report .avi { color: var(--bad); background: var(--bad-soft); border-color: color-mix(in srgb, var(--bad) 20%, transparent); }
.notif-item .title { font-weight: 600; font-size: .87rem; color: var(--text); margin-bottom: 3px; }
.notif-item .sub { color: var(--text-3); font-size: .76rem; }
.notif-item .time { color: var(--text-3); font-size: .7rem; margin-top: 5px; display: flex; align-items: center; gap: .3rem; }
.notif-item.is-new { background: linear-gradient(90deg, var(--accent-soft), transparent); border-left: 2px solid var(--accent); }
.notif-empty { padding: 2.5rem 1rem; text-align: center; color: var(--text-3); font-size: .87rem; }
.notif-empty i { font-size: 32px; color: var(--accent); margin-bottom: .75rem; display: block; opacity: .6; }

/* "Clear" action chip in the panel header - danger-tinted variant */
.notif-action.danger { color: var(--bad); }
.notif-action.danger:hover { color: #fff; background: var(--bad); }
.notif-action.danger i { margin-right: 3px; font-size: .7rem; }

/* Activity row wrapper that holds both a clickable link and a × clear button.
   The link fills the whole row; the × button is absolute-positioned in the
   top-right corner and only shown on hover so it doesn't crowd the layout. */
.notif-item.has-clear { position: relative; padding: 0; }
.notif-item.has-clear .notif-item-link {
    display: flex; gap: .7rem; padding: .85rem 2.4rem .85rem 1.15rem;
    flex: 1; text-decoration: none; color: inherit;
    transition: background .15s ease;
}
.notif-item.has-clear .notif-item-link:hover { background: var(--surface-2); }
.notif-clear-one {
    position: absolute; top: 8px; right: 8px;
    width: 24px; height: 24px;
    display: inline-flex; align-items: center; justify-content: center;
    border-radius: 6px; border: 1px solid transparent;
    background: transparent; color: var(--text-3);
    cursor: pointer; opacity: 0;
    transition: all .15s ease;
    font-size: .72rem;
}
.notif-item.has-clear:hover .notif-clear-one { opacity: 1; }
.notif-clear-one:hover {
    background: var(--bad-soft); border-color: color-mix(in srgb, var(--bad) 30%, transparent);
    color: var(--bad);
}

/* ============================================================
   HEATMAP
   ============================================================ */
.heatmap { display: grid; grid-template-columns: auto 1fr; gap: .6rem; }
.heatmap-days { display: flex; flex-direction: column; gap: 4px; padding-top: 2px; }
.heatmap-days span { font-size: .62rem; color: var(--text-3); height: 15px; line-height: 15px; font-weight: 500; }
.heatmap-grid { display: grid; grid-auto-flow: column; grid-template-rows: repeat(7, 15px); gap: 4px; }
.heat-cell {
    width: 15px; height: 15px; border-radius: 4px;
    background: var(--surface-2); border: 1px solid var(--border);
    transition: transform .12s ease, box-shadow .12s ease;
    cursor: pointer;
}
.heat-cell:hover { transform: scale(1.5); box-shadow: 0 4px 12px rgba(0,0,0,0.2); z-index: 2; position: relative; }
.heat-cell.h1 { background: color-mix(in srgb, var(--accent) 22%, var(--surface)); border-color: color-mix(in srgb, var(--accent) 28%, var(--border)); }
.heat-cell.h2 { background: color-mix(in srgb, var(--accent) 45%, var(--surface)); border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); }
.heat-cell.h3 { background: color-mix(in srgb, var(--accent) 70%, var(--surface)); border-color: var(--accent); }
.heat-cell.h4 { background: var(--grad-accent); border-color: var(--accent); }
.heatmap-legend { display: flex; align-items: center; gap: .5rem; font-size: .72rem; color: var(--text-3); margin-top: .85rem; flex-wrap: wrap; }
.heatmap-legend .lg { display: inline-flex; gap: 3px; }
.heatmap-legend .lg span { width: 13px; height: 13px; border-radius: 3px; }

/* ============================================================
   PROGRESS BARS
   ============================================================ */
.bar-row { margin-bottom: 1rem; }
.bar-row:last-child { margin-bottom: 0; }
.bar-row .label { display: flex; justify-content: space-between; font-size: .83rem; margin-bottom: .4rem; }
.bar-row .label .name { color: var(--text); font-weight: 500; }
.bar-row .label .val { color: var(--text-3); font-variant-numeric: tabular-nums; }
.bar {
    height: 8px; background: var(--surface-2);
    border-radius: 999px; overflow: hidden;
    border: 1px solid var(--border);
    position: relative;
}
.bar > span {
    display: block; height: 100%;
    background: var(--grad-accent);
    border-radius: 999px;
    transition: width .5s cubic-bezier(.4,0,.2,1);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.15);
}

/* ============================================================
   NEWS
   ============================================================ */
.news-item { padding: .9rem 0; border-bottom: 1px solid var(--border); display: flex; gap: .8rem; }
.news-item:last-child { border-bottom: none; padding-bottom: 0; }
.news-item:first-child { padding-top: 0; }
.news-item .news-ico {
    width: 36px; height: 36px; border-radius: 10px;
    background: var(--accent-soft);
    border: 1px solid color-mix(in srgb, var(--accent) 20%, transparent);
    display: flex; align-items: center; justify-content: center;
    color: var(--accent); font-size: 13px; flex-shrink: 0;
}
.news-item .title { font-size: .89rem; font-weight: 500; color: var(--text); line-height: 1.5; }
.news-item .time { color: var(--text-3); font-size: .72rem; margin-top: .3rem; display: flex; align-items: center; gap: .3rem; }

/* ============================================================
   PAYMENT GRID
   ============================================================ */
.pay-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: .55rem; }
.pay-grid a {
    display: flex; align-items: center; justify-content: center;
    padding: .65rem; border-radius: 10px;
    background: var(--surface-2); border: 1px solid var(--border);
    transition: border-color .15s ease, transform .12s ease, background .15s ease;
}
.pay-grid a:hover { border-color: var(--accent); transform: translateY(-2px); background: var(--accent-soft); }
.pay-grid img { width: 30px; height: 30px; object-fit: contain; }

/* ============================================================
   REFERRAL - featured card with subtle accent
   ============================================================ */
.referral {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 16px; padding: 1.35rem;
    position: relative; overflow: hidden;
    box-shadow: var(--shadow-1);
}
.referral::before {
    content: ''; position: absolute; top: 0; left: 0;
    width: 100%; height: 3px;
    background: var(--grad-amber);
    border-radius: 16px 16px 0 0;
}
.referral::after {
    content: ''; position: absolute; right: -50px; top: -50px;
    width: 160px; height: 160px; border-radius: 50%;
    background: radial-gradient(circle, var(--accent-3-soft), transparent 70%);
    pointer-events: none;
}
.referral h3 {
    font-size: 1rem; font-weight: 700; margin: 0 0 .4rem;
    color: var(--text); display: flex; align-items: center; gap: .5rem;
    position: relative;
}
.referral h3 i { color: var(--accent-3); }
.referral p { color: var(--text-3); margin: 0 0 1rem; font-size: .85rem; position: relative; line-height: 1.5; }
.referral .actions { display: flex; gap: .55rem; flex-wrap: wrap; align-items: center; position: relative; }

/* ============================================================
   FOOTER
   ============================================================ */
.site-footer { color: var(--text-3); text-align: center; padding: 2.5rem 0 1rem; font-size: .78rem; font-weight: 500; }

/* ============================================================
   CHARTS HEIGHTS
   ============================================================ */
.chart-tall { min-height: 300px; }
.chart-mid  { min-height: 240px; }

/* ============================================================
   EMPTY STATES
   ============================================================ */
.empty {
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    padding: 2rem 1rem; color: var(--text-3); text-align: center; font-size: .85rem;
}
.empty i { font-size: 32px; color: var(--accent); margin-bottom: .65rem; opacity: .5; }

/* ============================================================
   MODAL
   ============================================================ */
.modal-bg { position: fixed; inset: 0; z-index: 2500; display: none; align-items: center; justify-content: center; background: rgba(0,0,0,0.55); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); }
.modal-bg.show { display: flex; }
.modal-card {
    background: var(--surface); border: 1px solid var(--border-strong);
    padding: 1.75rem; border-radius: 16px;
    max-width: 400px; width: 90%; text-align: center;
    box-shadow: var(--shadow-3);
    animation: modalIn .25s cubic-bezier(.4,0,.2,1);
}
@keyframes modalIn { from { opacity: 0; transform: translateY(8px) scale(.98); } to { opacity: 1; transform: translateY(0) scale(1); } }
.modal-card h3 { margin: 0 0 .55rem; font-weight: 700; font-size: 1.1rem; }
.modal-card p { color: var(--text-3); margin: 0 0 1.2rem; font-size: .88rem; line-height: 1.5; }

/* ============================================================
   THEME-STYLED MODAL (used by the bootbox shim in site.js)
   Replaces bootbox.alert / bootbox.confirm so legacy code that
   calls bootbox.* still works, with consistent styling.
   Also hides any orphan bootbox <div class="bootbox modal"> the
   real bootbox.js might still try to render before our shim runs.
   ============================================================ */
.digz-modal-bg {
    position: fixed; inset: 0; z-index: 3500;
    display: flex; align-items: center; justify-content: center;
    background: rgba(0,0,0,0.55);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    opacity: 0; pointer-events: none;
    transition: opacity .18s ease;
    padding: 1rem;
}
.digz-modal-bg.show { opacity: 1; pointer-events: auto; }
.digz-modal-card {
    background: var(--surface);
    border: 1px solid var(--border-strong);
    border-radius: 16px;
    padding: 1.5rem 1.6rem;
    max-width: 720px;
    width: 100%;
    box-shadow: var(--shadow-3);
    transform: scale(.96) translateY(6px);
    transition: transform .22s cubic-bezier(.4,0,.2,1);
    color: var(--text);
    max-height: 90vh;
    overflow-y: auto;
}
/* show_order table-rendered content inside modal */
.digz-modal-body .table-responsive { overflow-x: auto; }
.digz-modal-body table { width: 100%; border-collapse: collapse; }
.digz-modal-body table td {
    padding: .55rem .65rem;
    border-bottom: 1px solid var(--border);
    font-size: .85rem;
    color: var(--text);
    vertical-align: top;
}
.digz-modal-body table tr:last-child td { border-bottom: none; }
.digz-modal-body table td:first-child {
    color: var(--text-3); font-weight: 600;
    font-size: .72rem; text-transform: uppercase; letter-spacing: .08em;
    white-space: nowrap; width: 32%;
}
.digz-modal-body .input-group {
    display: flex; gap: .35rem; align-items: stretch;
}
.digz-modal-body .input-group .form-control {
    flex: 1; background: var(--surface-2); border: 1px solid var(--border);
    border-radius: 8px; padding: .4rem .6rem; color: var(--text); font-size: .82rem;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.digz-modal-body .input-group .btn {
    padding: .4rem .7rem; font-size: .78rem; border-radius: 8px;
    background: var(--accent-soft); color: var(--accent); border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent);
}
.digz-modal-body .input-group .btn:hover { background: var(--accent); color: #fff; }
.digz-modal-body a { color: var(--accent); }
.digz-modal-body .badge { font-size: .72rem; }
.digz-modal-bg.show .digz-modal-card { transform: scale(1) translateY(0); }
.digz-modal-body {
    color: var(--text);
    font-size: .92rem;
    line-height: 1.55;
    margin-bottom: 1.2rem;
}
.digz-modal-body b, .digz-modal-body strong { color: var(--text); font-weight: 700; }
.digz-modal-body center { display: block; text-align: center; }
.digz-modal-body h3, .digz-modal-body h4, .digz-modal-body h5 {
    margin: .35rem 0; color: var(--text); font-weight: 700;
}
.digz-modal-body img { max-width: 80px; height: auto; margin: 0 auto .55rem; display: block; }
.digz-modal-actions {
    display: flex; gap: .55rem; justify-content: flex-end;
}
.digz-modal-btn {
    display: inline-flex; align-items: center; gap: .4rem;
    padding: .55rem 1.05rem;
    border-radius: 10px;
    border: 1px solid transparent;
    font-weight: 600; font-size: .87rem; font-family: inherit;
    cursor: pointer;
    transition: background .15s ease, transform .12s ease, border-color .15s ease;
    line-height: 1.1;
}
.digz-modal-btn.primary {
    background: var(--accent); color: #fff;
    box-shadow: 0 1px 0 rgba(255,255,255,0.10) inset, 0 1px 2px rgba(0,0,0,0.15);
}
.digz-modal-btn.primary:hover { background: var(--accent-hover); transform: translateY(-1px); }
.digz-modal-btn.ghost {
    background: var(--surface-2);
    color: var(--text);
    border-color: var(--border-strong);
}
.digz-modal-btn.ghost:hover { background: var(--surface-3); border-color: var(--accent); }
.digz-modal-btn:focus { outline: 2px solid var(--accent); outline-offset: 2px; }

/* Defensive: hide any orphan bootbox markup the legacy library tries to render
   before our shim takes over. Without Bootstrap's modal CSS these used to leak
   into the page bottom as un-styled buttons. */
body > .bootbox.modal,
body > .modal-backdrop,
body > div.bootbox {
    display: none !important;
}

/* ============================================================
   .custom-alert (used by cpanels.php / shells.php / etc. as
   their inline Buy / SEO modal). Renders themed and centered.
   ============================================================ */
.custom-alert {
    position: fixed; inset: 0; z-index: 3400;
    display: flex; align-items: center; justify-content: center;
    background: rgba(0,0,0,0.55);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    opacity: 0; pointer-events: none;
    padding: 1rem;
    transition: opacity .18s ease;
}
.custom-alert.show { opacity: 1; pointer-events: auto; }
.custom-alert .custom-alert-content {
    background: var(--surface);
    border: 1px solid var(--border-strong);
    border-radius: 16px;
    padding: 1.5rem 1.6rem;
    max-width: 460px;
    width: 100%;
    max-height: 85vh;
    overflow-y: auto;
    box-shadow: var(--shadow-3);
    color: var(--text);
    transform: scale(.96) translateY(6px);
    transition: transform .22s cubic-bezier(.4,0,.2,1);
    position: relative;
}
.custom-alert .custom-alert-close {
    position: absolute; top: .55rem; right: .65rem;
    background: transparent; border: none;
    color: var(--text-3); font-size: 1.55rem; line-height: 1;
    width: 32px; height: 32px;
    display: inline-flex; align-items: center; justify-content: center;
    border-radius: 8px; cursor: pointer;
    transition: background .15s ease, color .15s ease;
}
.custom-alert .custom-alert-close:hover {
    background: var(--surface-2); color: var(--text);
}
.custom-alert .custom-alert-body {
    color: var(--text-2); font-size: .92rem; line-height: 1.55;
    margin: 0 0 1.2rem;
}
.custom-alert .custom-alert-body .table {
    width: 100%; margin: 0; color: var(--text-2);
}
.custom-alert .custom-alert-body .table td {
    padding: .45rem .7rem; border-bottom: 1px solid var(--border);
    font-size: .85rem;
}
.custom-alert .custom-alert-body .seo-empty {
    padding: 1.25rem; text-align: center;
    color: var(--text-3); font-size: .9rem;
    background: var(--surface-2); border-radius: 10px;
    border: 1px dashed var(--border);
}
.custom-alert .custom-alert-body .seo-empty i {
    display: block; font-size: 1.6rem; margin-bottom: .55rem; color: var(--text-3);
}
.custom-alert.show .custom-alert-content { transform: scale(1) translateY(0); }
.custom-alert h3 {
    margin: 0 0 .55rem;
    color: var(--accent);
    font-weight: 700; font-size: 1.05rem;
}
.custom-alert p {
    color: var(--text-2);
    font-size: .92rem;
    line-height: 1.55;
    margin: 0 0 1.2rem;
}
.custom-alert .custom-alert-buttons {
    display: flex; gap: .55rem; justify-content: flex-end;
}
.custom-alert .custom-alert-buttons .btn {
    padding: .55rem 1.05rem;
}

/* ============================================================
   Cart button (auto-bound by site.js bindCartButtons)
   ============================================================ */
.cart-btn {
    background: var(--violet) !important;
    color: #fff !important;
    border: 1px solid transparent !important;
    padding: .35rem .7rem !important;
    font-size: .76rem !important;
    border-radius: 8px !important;
    display: inline-flex !important;
    align-items: center;
    gap: .3rem !important;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s ease, transform .12s ease;
    line-height: 1.1;
    box-shadow: 0 1px 0 rgba(255,255,255,0.10) inset, 0 1px 2px rgba(0,0,0,0.15);
}
.cart-btn:hover { background: color-mix(in srgb, var(--violet) 85%, white) !important; transform: translateY(-1px); }
.cart-btn:disabled { opacity: .8; cursor: default; transform: none; }
.cart-btn.cart-ok  { background: var(--good) !important; }
.cart-btn.cart-err { background: var(--bad) !important; }

/* ============================================================
   .modal - Bootstrap-named modal (used by admin sales Create Report)
   Renders as a centered overlay when .show is added.
   ============================================================ */
.modal {
    position: fixed; inset: 0; z-index: 3300;
    display: none; align-items: center; justify-content: center;
    background: rgba(0,0,0,0.55);
    padding: 1rem;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
}
.modal.show { display: flex; animation: modalFadeIn .18s ease; }
@keyframes modalFadeIn { from { opacity: 0; } to { opacity: 1; } }
.modal .modal-dialog {
    width: 100%; max-width: 520px;
    margin: 0;
    animation: modalSlideIn .22s cubic-bezier(.4,0,.2,1);
}
@keyframes modalSlideIn { from { transform: scale(.96) translateY(8px); opacity: 0; } to { transform: scale(1) translateY(0); opacity: 1; } }
.modal .modal-dialog.modal-lg { max-width: 760px; }
.modal .modal-dialog.modal-sm { max-width: 380px; }
.modal .modal-content {
    background: var(--surface);
    border: 1px solid var(--border-strong);
    border-radius: 16px;
    box-shadow: var(--shadow-3);
    color: var(--text);
    overflow: hidden;
}
.modal .modal-header {
    padding: 1rem 1.25rem;
    border-bottom: 1px solid var(--border);
    display: flex; align-items: center; justify-content: space-between;
    background: var(--surface-2);
}
.modal .modal-header .modal-title {
    margin: 0;
    font-weight: 700;
    font-size: 1rem;
    color: var(--text);
}
.modal .modal-body {
    padding: 1.25rem;
    color: var(--text-2);
    line-height: 1.55;
}
.modal .modal-body .form-control,
.modal .modal-body .form-select { margin-top: .3rem; }
.modal .modal-footer {
    padding: .85rem 1.25rem;
    border-top: 1px solid var(--border);
    display: flex; gap: .5rem; justify-content: flex-end;
    background: var(--surface-2);
}
.modal .btn-close {
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--text-3);
    font-size: 1rem;
    padding: 0;
    width: 28px; height: 28px;
    display: inline-flex; align-items: center; justify-content: center;
    border-radius: 7px;
    transition: background .15s ease, color .15s ease;
}
.modal .btn-close::before {
    content: '\f00d'; font-family: 'Font Awesome 6 Free'; font-weight: 900;
}
.modal .btn-close:hover { background: var(--surface-3); color: var(--text); }
body.modal-open { overflow: hidden; }

/* ============================================================
   Premium crown emoji marker - used wherever we render a premium buyer
   ============================================================ */
.premium-name {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    font-weight: 600;
}
.premium-name::before {
    content: '👑';
    font-size: .9em;
    filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
}
.premium-pill {
    display: inline-flex; align-items: center; gap: .25rem;
    background: linear-gradient(135deg, var(--accent-3-soft), color-mix(in srgb, var(--pink) 12%, transparent));
    color: var(--accent-3);
    border: 1px solid color-mix(in srgb, var(--accent-3) 30%, transparent);
    padding: 2px 7px;
    border-radius: 999px;
    font-size: .65rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
}
.premium-pill::before { content: '👑'; font-size: .9em; }

/* ============================================================
   Premium SELLER ADD form styling - modernizes the "Add cPanels",
   "Add SMTPs", etc. tab panels with a clean card layout.
   ============================================================ */
.tab-pane#menu1 .row,
.tab-pane#menu1 > .container-fluid {
    /* No-op - the styles below target the actual form elements */
}
.tab-pane#menu1 .form-group {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1rem 1.15rem;
    margin-bottom: 1rem;
    transition: border-color .15s ease;
}
.tab-pane#menu1 .form-group:hover { border-color: var(--border-strong); }
.tab-pane#menu1 .form-group > label {
    display: flex;
    align-items: center;
    gap: .4rem;
    font-size: .78rem;
    font-weight: 700;
    color: var(--text);
    text-transform: uppercase;
    letter-spacing: .06em;
    margin-bottom: .55rem;
}
.tab-pane#menu1 .form-group > label::before {
    content: '';
    width: 4px; height: 14px;
    background: var(--grad-accent);
    border-radius: 2px;
    display: inline-block;
}
.tab-pane#menu1 .form-group textarea.form-control {
    min-height: 130px;
    font-family: 'JetBrains Mono', Consolas, Monaco, monospace;
    font-size: .82rem;
    line-height: 1.55;
}
.tab-pane#menu1 .form-group .btn-primary {
    margin-top: .5rem;
    padding: .65rem 1.25rem;
    font-size: .9rem;
}
.tab-pane#menu1 #statistics .alert {
    background: linear-gradient(135deg, var(--accent-soft), transparent);
    border-color: color-mix(in srgb, var(--accent) 28%, transparent);
    color: var(--text);
    font-size: .9rem;
}
.tab-pane#menu1 #statistics .alert b { color: var(--accent); font-variant-numeric: tabular-nums; }
.tab-pane#menu1 #results .alert,
.tab-pane#menu1 #status .alert {
    border-radius: 10px;
    border: 1px solid var(--border);
    padding: .7rem .9rem;
    font-size: .85rem;
    margin-bottom: .5rem;
}
.tab-pane#menu1 #results .alert.bg-success {
    background: var(--good-soft);
    border-color: color-mix(in srgb, var(--good) 28%, transparent);
    color: var(--text);
}
.tab-pane#menu1 #results .alert.bg-danger {
    background: var(--bad-soft);
    border-color: color-mix(in srgb, var(--bad) 28%, transparent);
    color: var(--text);
}
.tab-pane#menu1 #results .alert.bg-warning {
    background: var(--accent-3-soft);
    border-color: color-mix(in srgb, var(--accent-3) 28%, transparent);
    color: var(--text);
}
/* Instruction box (Show Instructions toggle) */
.tab-pane#menu1 > .row > .col-sm:first-child > button.btn-primary:first-child {
    margin-bottom: 1rem;
}
.tab-pane#menu1 h4 {
    font-size: 1.1rem;
    font-weight: 700;
    margin: .85rem 0 .5rem;
    color: var(--text);
}
.tab-pane#menu1 h5 {
    font-size: .9rem;
    font-weight: 600;
    margin: .6rem 0 .35rem;
    color: var(--accent);
}

/* ============================================================
   APEX CHARTS
   ============================================================ */
.apexcharts-toolbar { display: none !important; }
.apexcharts-canvas { font-family: 'Inter', sans-serif; }

/* ============================================================
   COMPAT LAYER - Bootstrap-class replacements
   ============================================================ */

/* Grid */
.row { display: flex; flex-wrap: wrap; margin-left: -.5rem; margin-right: -.5rem; align-items: stretch; }
.row > [class*="col-"] { padding-left: .5rem; padding-right: .5rem; box-sizing: border-box; }
.row.g-1 { margin-left: -.125rem; margin-right: -.125rem; } .row.g-1 > [class*="col-"] { padding: .125rem; }
.row.g-2 { margin-left: -.25rem; margin-right: -.25rem; } .row.g-2 > [class*="col-"] { padding: .25rem; }
.row.g-3 { margin-left: -.5rem; margin-right: -.5rem; } .row.g-3 > [class*="col-"] { padding: .5rem; }
.row.g-4 { margin-left: -.75rem; margin-right: -.75rem; } .row.g-4 > [class*="col-"] { padding: .75rem; }
.col, .col-12 { flex: 1 1 100%; max-width: 100%; }
.col-1  { flex: 0 0 8.333%; max-width: 8.333%; }
.col-2  { flex: 0 0 16.666%; max-width: 16.666%; }
.col-3  { flex: 0 0 25%; max-width: 25%; }
.col-4  { flex: 0 0 33.333%; max-width: 33.333%; }
.col-5  { flex: 0 0 41.666%; max-width: 41.666%; }
.col-6  { flex: 0 0 50%; max-width: 50%; }
.col-7  { flex: 0 0 58.333%; max-width: 58.333%; }
.col-8  { flex: 0 0 66.666%; max-width: 66.666%; }
.col-9  { flex: 0 0 75%; max-width: 75%; }
.col-10 { flex: 0 0 83.333%; max-width: 83.333%; }
.col-11 { flex: 0 0 91.666%; max-width: 91.666%; }
@media (min-width: 576px) {
    .col-sm-3 { flex: 0 0 25%; max-width: 25%; }
    .col-sm-4 { flex: 0 0 33.333%; max-width: 33.333%; }
    .col-sm-6 { flex: 0 0 50%; max-width: 50%; }
    .col-sm-8 { flex: 0 0 66.666%; max-width: 66.666%; }
    .col-sm-12 { flex: 0 0 100%; max-width: 100%; }
}
@media (min-width: 768px) {
    .col-md-3 { flex: 0 0 25%; max-width: 25%; }
    .col-md-4 { flex: 0 0 33.333%; max-width: 33.333%; }
    .col-md-6 { flex: 0 0 50%; max-width: 50%; }
    .col-md-8 { flex: 0 0 66.666%; max-width: 66.666%; }
    .col-md-9 { flex: 0 0 75%; max-width: 75%; }
    .col-md-12 { flex: 0 0 100%; max-width: 100%; }
}
@media (min-width: 992px) {
    .col-lg-3 { flex: 0 0 25%; max-width: 25%; }
    .col-lg-4 { flex: 0 0 33.333%; max-width: 33.333%; }
    .col-lg-6 { flex: 0 0 50%; max-width: 50%; }
    .col-lg-8 { flex: 0 0 66.666%; max-width: 66.666%; }
    .col-lg-9 { flex: 0 0 75%; max-width: 75%; }
    .col-lg-12 { flex: 0 0 100%; max-width: 100%; }
}
.container, .container-fluid { width: 100%; box-sizing: border-box; }
.container { max-width: 1280px; margin-left: auto; margin-right: auto; padding: 0 1rem; }
.container-fluid { padding: 0 1rem; }
.container-fluid.px-4 { padding: 0 1.25rem; }

/* Flex utilities */
.d-flex { display: flex !important; }
.d-inline-flex { display: inline-flex !important; }
.d-block { display: block !important; }
.d-inline-block { display: inline-block !important; }
.d-none { display: none !important; }
.flex-wrap { flex-wrap: wrap !important; }
.flex-column { flex-direction: column !important; }
.justify-content-between { justify-content: space-between !important; }
.justify-content-end { justify-content: flex-end !important; }
.justify-content-center { justify-content: center !important; }
.justify-content-start { justify-content: flex-start !important; }
.align-items-center { align-items: center !important; }
.align-items-start { align-items: flex-start !important; }
.align-items-end { align-items: flex-end !important; }
.align-middle { vertical-align: middle !important; }
.text-center { text-align: center !important; }
.text-start { text-align: left !important; }
.text-end { text-align: right !important; }
.text-nowrap { white-space: nowrap !important; }
.text-break { word-break: break-word !important; }
.w-100 { width: 100% !important; }
.h-100 { height: 100% !important; }
.ms-auto { margin-left: auto !important; }
.me-auto { margin-right: auto !important; }
.mx-auto { margin-left: auto !important; margin-right: auto !important; }
.gap-1 { gap: .25rem !important; }
.gap-2 { gap: .5rem !important; }
.gap-3 { gap: 1rem !important; }
.gap-4 { gap: 1.5rem !important; }
.m-0 { margin: 0 !important; } .m-1 { margin: .25rem !important; } .m-2 { margin: .5rem !important; } .m-3 { margin: 1rem !important; } .m-4 { margin: 1.5rem !important; }
.mt-0 { margin-top: 0 !important; } .mt-1 { margin-top: .25rem !important; } .mt-2 { margin-top: .5rem !important; } .mt-3 { margin-top: 1rem !important; } .mt-4 { margin-top: 1.5rem !important; }
.mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: .25rem !important; } .mb-2 { margin-bottom: .5rem !important; } .mb-3 { margin-bottom: 1rem !important; } .mb-4 { margin-bottom: 1.5rem !important; }
.ms-1 { margin-left: .25rem !important; } .ms-2 { margin-left: .5rem !important; } .ms-3 { margin-left: 1rem !important; } .ms-4 { margin-left: 1.5rem !important; }
.me-1 { margin-right: .25rem !important; } .me-2 { margin-right: .5rem !important; } .me-3 { margin-right: 1rem !important; } .me-4 { margin-right: 1.5rem !important; }
.my-2 { margin-top: .5rem !important; margin-bottom: .5rem !important; }
.my-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; }
.my-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; }
.mx-2 { margin-left: .5rem !important; margin-right: .5rem !important; }
.p-0 { padding: 0 !important; } .p-1 { padding: .25rem !important; } .p-2 { padding: .5rem !important; } .p-3 { padding: 1rem !important; } .p-4 { padding: 1.5rem !important; }
.pt-2 { padding-top: .5rem !important; } .pt-3 { padding-top: 1rem !important; }
.pb-2 { padding-bottom: .5rem !important; } .pb-3 { padding-bottom: 1rem !important; }
.ps-2 { padding-left: .5rem !important; } .ps-3 { padding-left: 1rem !important; } .ps-4 { padding-left: 1.5rem !important; }
.pe-2 { padding-right: .5rem !important; } .pe-3 { padding-right: 1rem !important; } .pe-4 { padding-right: 1.5rem !important; }
.px-2 { padding-left: .5rem !important; padding-right: .5rem !important; }
.px-3 { padding-left: 1rem !important; padding-right: 1rem !important; }
.px-4 { padding-left: 1.5rem !important; padding-right: 1.5rem !important; }
.py-2 { padding-top: .5rem !important; padding-bottom: .5rem !important; }
.py-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; }

/* Text colors */
.text-muted { color: var(--text-3) !important; }
.text-primary { color: var(--accent) !important; }
.text-success { color: var(--good) !important; }
.text-danger  { color: var(--bad) !important; }
.text-warning { color: var(--accent-3) !important; }
.text-info    { color: var(--accent-2) !important; }
.text-light   { color: var(--text) !important; }
.text-dark    { color: var(--text) !important; }
.text-white   { color: #fff !important; }

/* Card pieces */
.card-body { padding: 1.25rem; }
.card-footer {
    background: var(--surface-2);
    border-top: 1px solid var(--border);
    padding: .85rem 1.25rem;
    border-radius: 0 0 16px 16px;
}
.card-box {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: 1.25rem;
    box-shadow: var(--shadow-1);
    position: relative;
    overflow: hidden;
    transition: transform .15s ease, box-shadow .15s ease;
}
.card-box:hover { transform: translateY(-1px); box-shadow: var(--shadow-2); }
.card-box .inner h3 { font-size: 1.55rem; font-weight: 700; margin: 0 0 .25rem; letter-spacing: -0.025em; font-variant-numeric: tabular-nums; }
.card-box .inner p  { font-size: .82rem; margin: 0; opacity: .85; }
.card-box .icon {
    position: absolute;
    top: 1rem; right: 1rem;
    font-size: 2.4rem;
    opacity: .12;
}
.card-box .card-box-footer {
    display: block;
    margin: 1.25rem -1.25rem -1.25rem;
    padding: .75rem;
    text-align: center;
    background: var(--surface-2);
    color: var(--text-2);
    text-decoration: none;
    font-weight: 600;
    font-size: .82rem;
    border-radius: 0 0 14px 14px;
    transition: background .15s ease, color .15s ease;
    border-top: 1px solid var(--border);
}
.card-box .card-box-footer:hover { background: var(--surface-3); color: var(--accent); }
.card-box.bg-primary { background: var(--grad-accent); color: #fff; border-color: transparent; }
.card-box.bg-success, .card-box.bg-green { background: var(--grad-good); color: #fff; border-color: transparent; }
.card-box.bg-warning { background: var(--grad-amber); color: #fff; border-color: transparent; }
.card-box.bg-danger  { background: linear-gradient(135deg, var(--bad), var(--pink)); color: #fff; border-color: transparent; }
.card-box.bg-dark    { background: var(--surface-3); color: var(--text); }
.card-box.bg-info    { background: linear-gradient(135deg, var(--accent-2), var(--accent)); color: #fff; border-color: transparent; }
.card-box.bg-primary .card-box-footer,
.card-box.bg-success .card-box-footer,
.card-box.bg-green .card-box-footer,
.card-box.bg-warning .card-box-footer,
.card-box.bg-danger .card-box-footer,
.card-box.bg-info .card-box-footer {
    background: rgba(0,0,0,0.18); color: #fff; border-top-color: rgba(255,255,255,0.10);
}
.card-box.bg-primary .card-box-footer:hover,
.card-box.bg-success .card-box-footer:hover,
.card-box.bg-green .card-box-footer:hover,
.card-box.bg-warning .card-box-footer:hover,
.card-box.bg-danger .card-box-footer:hover,
.card-box.bg-info .card-box-footer:hover {
    background: rgba(0,0,0,0.28); color: #fff;
}

/* Tables - premium */
.table-responsive {
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    border-radius: 10px;
    /* Subtle scrollbar so users notice horizontal scroll is available */
    scrollbar-width: thin;
}
.table-responsive::-webkit-scrollbar { height: 8px; }
.table-responsive::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 6px; }
.table-responsive::-webkit-scrollbar-thumb:hover { background: var(--muted); }
.table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    color: var(--text);
    font-size: .88rem;
    margin-bottom: 0;
}
.table th, .table td {
    padding: .75rem .9rem;
    border-bottom: 1px solid var(--border);
    text-align: left;
    vertical-align: middle;
}
.table thead th {
    background: var(--surface-2);
    color: var(--text-3);
    font-weight: 600;
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    border-bottom: 1px solid var(--border);
}
.table tbody tr { transition: background .12s ease; }
.table tbody tr:hover td { background: var(--surface-2); }
.table-striped tbody tr:nth-of-type(odd) td { background: color-mix(in srgb, var(--surface-2) 50%, transparent); }
.table-bordered { border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.table-bordered th, .table-bordered td { border: 1px solid var(--border); }

/* Forms - premium */
.form-control, .form-select, input[type="text"].form-control, input[type="email"].form-control,
input[type="password"].form-control, input[type="number"].form-control, textarea.form-control, select.form-control {
    display: block;
    width: 100%;
    padding: .6rem .9rem;
    font-size: .9rem;
    line-height: 1.45;
    color: var(--text);
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 10px;
    transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
    box-sizing: border-box;
    font-family: inherit;
}
.form-control:focus, .form-select:focus {
    outline: none;
    border-color: var(--accent);
    background: var(--surface);
    box-shadow: 0 0 0 3px var(--accent-soft);
}
.form-control[readonly], .form-control:disabled { background: var(--surface-3); color: var(--text-3); cursor: not-allowed; }
.form-control::placeholder { color: var(--text-3); }
.form-label, label { color: var(--text-2); font-weight: 500; font-size: .85rem; display: block; margin-bottom: .4rem; }
.form-group { margin-bottom: 1rem; }

.input-group { display: flex; align-items: stretch; width: 100%; }
.input-group > .form-control { flex: 1 1 auto; min-width: 0; }
.input-group .form-control:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.input-group .form-control:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.input-group > .btn:not(:first-child),
.input-group > .input-group-text:not(:first-child) {
    border-top-left-radius: 0; border-bottom-left-radius: 0;
}
.input-group > .btn { border: 1px solid var(--accent); }
.input-group-text {
    display: flex; align-items: center;
    padding: .6rem .9rem;
    background: var(--surface-3); color: var(--text-2);
    border: 1px solid var(--border);
    border-radius: 10px;
    font-size: .85rem;
}

/* Buttons (Bootstrap-named) */
.btn-primary {
    background: var(--accent) !important;
    color: #fff !important;
    border: 1px solid transparent;
    padding: .6rem 1.05rem;
    border-radius: 10px;
    font-weight: 600;
    font-size: .87rem;
    cursor: pointer;
    display: inline-flex; align-items: center; gap: .5rem;
    text-decoration: none;
    transition: background .15s ease, transform .12s ease;
    box-shadow: 0 1px 0 rgba(255,255,255,0.10) inset, 0 1px 2px rgba(0,0,0,0.15);
}
.btn-primary:hover { background: var(--accent-hover) !important; transform: translateY(-1px); }
.btn-secondary {
    background: var(--surface);
    color: var(--text);
    border: 1px solid var(--border-strong);
    padding: .6rem 1.05rem;
    border-radius: 10px;
    font-weight: 600;
    font-size: .87rem;
    cursor: pointer;
    display: inline-flex; align-items: center; gap: .5rem;
    text-decoration: none;
    transition: background .15s ease, border-color .15s ease;
    box-shadow: var(--shadow-1);
}
.btn-secondary:hover { background: var(--surface-2); border-color: var(--accent); color: var(--text); }
.btn-success {
    background: var(--good); color: #fff; border: 1px solid transparent;
    padding: .6rem 1.05rem; border-radius: 10px; font-weight: 600; font-size: .87rem;
    cursor: pointer; display: inline-flex; align-items: center; gap: .5rem; text-decoration: none;
    transition: background .15s ease, transform .12s ease;
    box-shadow: 0 1px 0 rgba(255,255,255,0.10) inset;
}
.btn-success:hover { background: color-mix(in srgb, var(--good) 88%, #fff); transform: translateY(-1px); }
.btn-danger {
    background: var(--bad); color: #fff; border: 1px solid transparent;
    padding: .6rem 1.05rem; border-radius: 10px; font-weight: 600; font-size: .87rem;
    cursor: pointer; display: inline-flex; align-items: center; gap: .5rem; text-decoration: none;
    transition: background .15s ease, transform .12s ease;
    box-shadow: 0 1px 0 rgba(255,255,255,0.10) inset;
}
.btn-danger:hover { background: color-mix(in srgb, var(--bad) 88%, #fff); transform: translateY(-1px); }
.btn-info, .btn-warning {
    background: var(--accent-2); color: #fff; border: 1px solid transparent;
    padding: .6rem 1.05rem; border-radius: 10px; font-weight: 600; font-size: .87rem;
    cursor: pointer; display: inline-flex; align-items: center; gap: .5rem; text-decoration: none;
}
.btn-warning { background: var(--accent-3); }

/* Alerts */
.alert {
    position: relative;
    padding: .95rem 1.2rem;
    margin-bottom: 1rem;
    border: 1px solid var(--border);
    border-radius: 12px;
    background: var(--surface);
    color: var(--text);
    display: flex; align-items: flex-start; gap: .6rem;
    box-shadow: var(--shadow-1);
}
.alert.bg-info, .alert-info {
    background: var(--accent-soft);
    border-color: color-mix(in srgb, var(--accent) 25%, transparent);
}
.alert.bg-primary {
    background: var(--accent-soft);
    border-color: color-mix(in srgb, var(--accent) 25%, transparent);
    color: var(--text) !important;
}
.alert.bg-success, .alert-success {
    background: var(--good-soft);
    border-color: color-mix(in srgb, var(--good) 25%, transparent);
    color: var(--text) !important;
}
.alert.bg-danger, .alert-danger {
    background: var(--bad-soft);
    border-color: color-mix(in srgb, var(--bad) 25%, transparent);
    color: var(--text) !important;
}
.alert.bg-warning, .alert-warning {
    background: var(--accent-3-soft);
    border-color: color-mix(in srgb, var(--accent-3) 25%, transparent);
    color: var(--text) !important;
}
.alert .text-light { color: var(--text) !important; }
.alert-dismissible .btn-close {
    position: absolute; top: 50%; right: .85rem;
    transform: translateY(-50%);
    width: 24px; height: 24px;
    background: none; border: none;
    color: var(--text-3); cursor: pointer;
    border-radius: 6px;
    display: flex; align-items: center; justify-content: center;
}
.alert-dismissible .btn-close::before { content: '\f00d'; font-family: 'Font Awesome 6 Free'; font-weight: 900; font-size: 13px; }
.alert-dismissible .btn-close:hover { background: var(--surface-2); color: var(--text); }

/* Nav tabs */
.nav-tabs {
    display: flex;
    border-bottom: 1px solid var(--border);
    margin-bottom: 1rem;
    padding: 0;
    list-style: none;
    gap: .25rem;
}
.nav-tabs .nav-item { list-style: none; }
.nav-tabs .nav-link {
    display: inline-block;
    padding: .7rem 1.1rem;
    color: var(--text-3);
    font-weight: 500;
    text-decoration: none;
    border-bottom: 2px solid transparent;
    border-radius: 8px 8px 0 0;
    transition: color .15s ease, border-color .15s ease, background .15s ease;
    cursor: pointer;
    font-size: .87rem;
}
.nav-tabs .nav-link:hover { color: var(--text); background: var(--surface-2); }
.nav-tabs .nav-link.active {
    color: var(--text);
    border-bottom-color: var(--accent);
    background: transparent;
    font-weight: 600;
}
.tab-content > .tab-pane { display: none; }
.tab-content > .tab-pane.active.show, .tab-content > .tab-pane.active { display: block; animation: tabFade .25s ease; }
@keyframes tabFade { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }

/* List groups */
.list-group {
    display: flex;
    flex-direction: column;
    background: transparent;
    border-radius: 10px;
    overflow: hidden;
}
.list-group-item {
    padding: .9rem 1.15rem;
    background: transparent;
    border-bottom: 1px solid var(--border);
    color: var(--text);
}
.list-group-item:last-child { border-bottom: none; }
.list-group-item:hover { background: var(--surface-2); }
.list-group-item-light { background: var(--surface-2); }
.list-group-item-action { cursor: pointer; }

/* dl/dt/dd */
dl { margin: 0; padding: 0; }
dt { font-weight: 700; color: var(--text); margin-bottom: .4rem; font-size: .9rem; }
dd { margin: 0 0 1rem; color: var(--text-2); font-size: .87rem; line-height: 1.6; }
dd:last-child { margin-bottom: 0; }
dt.text-info { color: var(--accent-2); }
dl ul { padding-left: 1.3rem; margin: 0; }
dl ul li { margin-bottom: .35rem; }

/* Sizing helpers */
.btn-sm { padding: .42rem .8rem !important; font-size: .78rem !important; }
.btn-lg { padding: .85rem 1.4rem !important; font-size: .95rem !important; }
.rounded     { border-radius: 10px !important; }
.rounded-0   { border-radius: 0 !important; }
.rounded-pill { border-radius: 999px !important; }
.shadow-sm   { box-shadow: var(--shadow-1) !important; }
.shadow      { box-shadow: var(--shadow-2) !important; }

/* hr */
hr { border: none; border-top: 1px solid var(--border); margin: 1rem 0; opacity: 1; }

/* code */
code, pre { background: var(--surface-2); padding: 2px 7px; border-radius: 5px; font-size: .82em; color: var(--text); font-family: 'JetBrains Mono', Consolas, Monaco, monospace; }
pre { padding: .9rem 1rem; border-radius: 10px; overflow-x: auto; border: 1px solid var(--border); }

/* DataTables - premium tweaks (high specificity to outrank per-page inline CSS) */
body .dataTables_wrapper { color: var(--text-3); padding: .35rem 0; }
body .dataTables_wrapper .dataTables_length,
body .dataTables_wrapper .dataTables_filter {
    padding: .5rem 0; font-size: .82rem;
    color: var(--text-3);
}
body .dataTables_filter input,
body .dataTables_length select {
    background: var(--surface-2) !important; color: var(--text) !important;
    border: 1px solid var(--border) !important;
    border-radius: 8px !important; padding: .4rem .7rem !important;
    margin-left: .5rem;
    font-size: .82rem !important;
    font-family: inherit;
    transition: border-color .15s ease, box-shadow .15s ease;
}
body .dataTables_filter input:focus,
body .dataTables_length select:focus {
    outline: none; border-color: var(--accent) !important;
    box-shadow: 0 0 0 3px var(--accent-soft) !important;
}

/* Paginate container - premium Next / Previous pill bar */
body .dataTables_wrapper .dataTables_paginate {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: .35rem;
    margin-top: 1rem !important;
    padding: 0 !important;
}
body .dataTables_wrapper .dataTables_paginate .paginate_button {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    background: var(--surface-2) !important;
    color: var(--text-2) !important;
    border: 1px solid var(--border) !important;
    border-radius: 9px !important;
    padding: .5rem .95rem !important;
    margin: 0 2px !important;
    font-size: .82rem !important;
    font-weight: 600 !important;
    text-decoration: none !important;
    box-shadow: var(--shadow-1) !important;
    cursor: pointer !important;
    transition: background .15s ease, transform .12s ease, border-color .15s ease, color .15s ease !important;
    min-width: 38px;
    line-height: 1.2;
    background-image: none !important; /* defeat any gradient set by per-page CSS */
}
body .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
    background: var(--surface-3) !important;
    color: var(--text) !important;
    border-color: var(--border-strong) !important;
    transform: translateY(-1px) !important;
    background-image: none !important;
}
body .dataTables_wrapper .dataTables_paginate .paginate_button.current,
body .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
    background: var(--grad-accent) !important;
    color: #fff !important;
    border-color: transparent !important;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.15), 0 4px 12px var(--accent-soft) !important;
    background-image: var(--grad-accent) !important;
}
body .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
body .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover {
    opacity: .35 !important;
    pointer-events: none !important;
    background: var(--surface-2) !important;
    color: var(--text-3) !important;
    border-color: var(--border) !important;
    transform: none !important;
}
/* Re-show number buttons (some per-page CSS hid them) and label prev/next with arrows */
body .dataTables_wrapper .dataTables_paginate .paginate_button.previous,
body .dataTables_wrapper .dataTables_paginate .paginate_button.next {
    display: inline-flex !important;
    gap: .35rem;
}
body .dataTables_wrapper .dataTables_paginate .paginate_button:not(.previous):not(.next):not(.first):not(.last) {
    display: inline-flex !important;
}
body .dataTables_wrapper .dataTables_paginate .paginate_button.previous::before {
    content: '\f053'; font-family: 'Font Awesome 6 Free'; font-weight: 900; font-size: .7rem;
}
body .dataTables_wrapper .dataTables_paginate .paginate_button.next::after {
    content: '\f054'; font-family: 'Font Awesome 6 Free'; font-weight: 900; font-size: .7rem;
}
body .dataTables_wrapper .dataTables_paginate .ellipsis {
    color: var(--text-3) !important;
    padding: .5rem .35rem;
    font-weight: 700;
}
body .dataTables_wrapper .dataTables_info {
    color: var(--text-3) !important;
    padding-top: .75rem !important;
    font-size: .82rem !important;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

/* Generic site-wide pagination component (when you build your own) */
.pager {
    display: flex; justify-content: center; align-items: center; gap: .35rem;
    margin: 1.25rem 0;
}
.pager a, .pager span {
    display: inline-flex; align-items: center; justify-content: center; gap: .35rem;
    background: var(--surface-2);
    color: var(--text-2);
    border: 1px solid var(--border);
    border-radius: 9px;
    padding: .5rem .95rem;
    font-size: .82rem; font-weight: 600;
    text-decoration: none;
    box-shadow: var(--shadow-1);
    cursor: pointer;
    transition: background .15s ease, transform .12s ease, border-color .15s ease;
    min-width: 38px; line-height: 1.2;
}
.pager a:hover { background: var(--surface-3); color: var(--text); border-color: var(--border-strong); transform: translateY(-1px); }
.pager .current,
.pager .active {
    background: var(--grad-accent);
    color: #fff;
    border-color: transparent;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.15), 0 4px 12px var(--accent-soft);
}
.pager .disabled {
    opacity: .35; pointer-events: none;
}

.form-inline { display: flex; gap: .5rem; align-items: center; }

/* ============================================================
   TAILWIND-LIKE GRID UTILITIES (only the ones the legacy
   user-facing filter forms still depend on)
   ============================================================ */
.grid { display: grid; }
.grid.gap-1 { gap: .25rem; }
.grid.gap-2 { gap: .5rem; }
.grid.gap-3 { gap: .75rem; }
.grid.gap-4 { gap: 1rem; }
.grid-cols-1 { grid-template-columns: repeat(1, minmax(0,1fr)); }
.grid-cols-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.grid-cols-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.grid-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
.grid-cols-5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
.grid-cols-6 { grid-template-columns: repeat(6, minmax(0,1fr)); }
.grid-cols-7 { grid-template-columns: repeat(7, minmax(0,1fr)); }
.grid-cols-8 { grid-template-columns: repeat(8, minmax(0,1fr)); }
@media (min-width: 576px) {
    .sm\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0,1fr)); }
    .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
    .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
    .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
}
@media (min-width: 992px) {
    .lg\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0,1fr)); }
    .lg\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
    .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
    .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
    .lg\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
    .lg\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0,1fr)); }
    .lg\:grid-cols-7 { grid-template-columns: repeat(7, minmax(0,1fr)); }
    .lg\:grid-cols-8 { grid-template-columns: repeat(8, minmax(0,1fr)); }
}

/* Tiny utilities the legacy markup uses */
.block { display: block; }
.text-xs { font-size: .72rem; }
.font-semibold { font-weight: 600; }
.text-gray-700 { color: var(--text-2); }
.text-transparent { color: transparent; }
.bg-clip-text { -webkit-background-clip: text; background-clip: text; }
.bg-gradient-to-r { background-image: linear-gradient(to right, var(--accent), var(--violet)); }
.from-primary { /* legacy: accent-start */ }
.to-purple-500 { /* legacy: violet */ }
.flex { display: flex !important; }
.items-center { align-items: center !important; }
.whitespace-nowrap { white-space: nowrap !important; }
.w-full { width: 100% !important; }
/* Override legacy min-width: 1200px that was used on item tables. The
   .table-responsive wrapper handles horizontal scrolling now. */
.min-w-\[1200px\] { min-width: 0; }
.text-2xl { font-size: 1.55rem; }
.font-bold { font-weight: 700; }
.mr-1 { margin-right: .25rem !important; }
.mr-2 { margin-right: .5rem !important; }
.mr-3 { margin-right: 1rem !important; }
.mb-1 { margin-bottom: .25rem !important; }
.mb-4 { margin-bottom: 1rem !important; }
.mt-4 { margin-top: 1rem !important; }
.ml-4 { margin-left: 1rem !important; }
.p-4 { padding: 1rem !important; }

/* ============================================================
   FILTER-COLLAPSE  -  expandable filter panel (auto-applied by
   site.js to any <form> that contains a .grid filter)
   ============================================================ */
.filter-collapse {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 12px;
    margin-bottom: 1rem;
    overflow: hidden;
    transition: border-color .15s ease;
}
.filter-collapse:hover { border-color: var(--border-strong); }
.filter-collapse .fc-head {
    display: flex; align-items: center; justify-content: space-between;
    gap: .55rem;
    padding: .75rem 1.05rem;
    cursor: pointer;
    user-select: none;
    background: transparent;
    border: none;
    width: 100%; text-align: left;
    color: var(--text);
    font-family: inherit;
    transition: background .15s ease;
}
.filter-collapse .fc-head:hover { background: var(--surface-3); }
.filter-collapse .fc-head .fc-title {
    display: inline-flex; align-items: center; gap: .55rem;
    font-weight: 600; font-size: .92rem;
}
.filter-collapse .fc-head .fc-title i.fc-icon {
    width: 28px; height: 28px; border-radius: 8px;
    background: var(--accent-soft); color: var(--accent);
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 12px;
}
.filter-collapse .fc-head .fc-meta {
    color: var(--text-3); font-size: .76rem; font-weight: 500;
    display: inline-flex; align-items: center; gap: .35rem;
}
.filter-collapse .fc-head .fc-chevron {
    color: var(--text-3);
    transition: transform .25s cubic-bezier(.4,0,.2,1);
    font-size: 12px;
}
.filter-collapse.open .fc-head .fc-chevron { transform: rotate(180deg); color: var(--accent); }
.filter-collapse .fc-body {
    display: none;
    padding: 0 1.05rem 1.05rem;
    border-top: 1px solid var(--border);
    background: var(--surface);
}
.filter-collapse.open .fc-body { display: block; animation: fcSlide .25s ease; }
@keyframes fcSlide {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}
.filter-collapse .fc-body > .grid { padding-top: 1rem; }
.filter-collapse-applied-badge {
    background: var(--accent-soft); color: var(--accent);
    border: 1px solid color-mix(in srgb, var(--accent) 25%, transparent);
    padding: 2px 8px; border-radius: 999px;
    font-size: .68rem; font-weight: 700;
    font-variant-numeric: tabular-nums;
}

/* ============================================================
   BUTTON GROUPS  +  TOOLBARS  +  EXPANDABLE FILTER BAR
   Replaces the Bootstrap .btn-group / .btn-toolbar look so the
   filter rows on cpanels / shells / leads / etc. don't fall apart.
   ============================================================ */
.btn-group {
    display: inline-flex;
    align-items: stretch;
    vertical-align: middle;
    position: relative;
}
.btn-group > .btn,
.btn-group > .form-control,
.btn-group > .form-select,
.btn-group > select {
    position: relative;
}
.btn-group > .btn + .btn,
.btn-group > .btn + .form-control,
.btn-group > .btn + .form-select,
.btn-group > .form-control + .btn,
.btn-group > .form-select + .btn,
.btn-group > select + .btn { margin-left: -1px; }
.btn-group > :not(:first-child):not(:last-child) { border-radius: 0; }
.btn-group > :first-child { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.btn-group > :last-child  { border-top-left-radius:  0; border-bottom-left-radius:  0; }
.btn-group > .btn:hover,
.btn-group > .btn:focus { z-index: 2; }

.btn-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: .55rem;
    align-items: center;
    margin-bottom: 1rem;
}
.btn-toolbar form { display: inline-flex; margin: 0; }
.btn-toolbar .btn-group { gap: 0; }

/* Filter bar - premium expandable filter strip used above tables */
.filter-bar {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: .85rem 1rem;
    margin-bottom: 1rem;
    display: flex;
    align-items: center;
    gap: .55rem;
    flex-wrap: wrap;
    box-shadow: var(--shadow-1);
    transition: border-color .15s ease;
}
.filter-bar:hover { border-color: var(--border-strong); }
.filter-bar .filter-label {
    display: inline-flex; align-items: center; gap: .4rem;
    font-size: .73rem; font-weight: 700; color: var(--text-3);
    text-transform: uppercase; letter-spacing: .12em;
    padding: 0 .5rem 0 0; border-right: 1px solid var(--border); margin-right: .25rem;
    height: 36px;
}
.filter-bar .filter-label i { color: var(--accent); font-size: 13px; }
.filter-bar .filter-group {
    display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; flex: 1;
}
.filter-bar .filter-toggle {
    display: none;
    background: var(--surface-2);
    border: 1px solid var(--border);
    color: var(--text);
    padding: .55rem .9rem;
    border-radius: 9px;
    font-weight: 600; font-size: .82rem;
    cursor: pointer;
    width: 100%;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
}
.filter-bar .filter-toggle i.toggle-ico { transition: transform .2s ease; color: var(--accent); }

/* Mobile collapse */
@media (max-width: 720px) {
    .filter-bar { flex-direction: column; align-items: stretch; padding: .65rem; }
    .filter-bar .filter-label { display: none; }
    .filter-bar .filter-toggle { display: inline-flex; }
    .filter-bar .filter-group {
        display: none;
        flex-direction: column; align-items: stretch;
        gap: .5rem; margin-top: .55rem;
    }
    .filter-bar.expanded .filter-group { display: flex; }
    .filter-bar .filter-group > .btn,
    .filter-bar .filter-group > .btn-group,
    .filter-bar .filter-group > form { width: 100%; }
    .filter-bar .filter-group > form { display: flex !important; }
    .filter-bar .filter-group > .btn-group { display: flex; }
    .filter-bar .filter-group > .btn-group > * { flex: 1; }
}

/* When a plain Bootstrap-style row of buttons appears above a table,
   keep them visually grouped + spaced even without .filter-bar wrapper. */
.container-fluid > .mb-2 > .btn-group,
.container-fluid > .mb-2 > form {
    margin-right: .55rem;
    margin-bottom: .55rem;
}

/* The "tabs" component  - make sure tabs look right even when site.js hasn't run yet */
.nav-tabs { gap: .15rem; }
.nav-tabs .nav-item { list-style: none; }
.nav-tabs .nav-link {
    border-bottom: 2px solid transparent;
    color: var(--text-3);
    background: transparent;
    cursor: pointer;
    user-select: none;
}
.nav-tabs .nav-link.active {
    color: var(--text);
    background: var(--surface);
    border-bottom-color: var(--accent);
    font-weight: 600;
}

/* Tab pane visibility - works whether or not the .fade class is present */
.tab-content > .tab-pane { display: none; }
.tab-content > .tab-pane.active,
.tab-content > .tab-pane.show.active,
.tab-content > .tab-pane.active.show { display: block; animation: tabFade .2s ease; }

/* ============================================================
   v14 PREMIUM POLISH -- refined shadows, snappier tap targets,
   mobile table stacking, glassy hover. Additive only.
   ============================================================ */
.card {
    transition: transform .12s ease, box-shadow .15s ease, border-color .15s ease;
}
.card:hover { box-shadow: var(--shadow-2); border-color: var(--border-strong); }
.btn { transition: transform .1s ease, box-shadow .12s ease, background .15s ease, border-color .15s ease; }
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }

.kpi .value { letter-spacing: -0.02em; }
.kpi .icon-box { box-shadow: var(--shadow-1); }

/* Tighter scrollbar inside report-thread & replace-log */
.report-thread::-webkit-scrollbar,
.replace-log::-webkit-scrollbar { width: 6px; }
.report-thread::-webkit-scrollbar-thumb,
.replace-log::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 4px; }

/* Tap targets -- buttons hit min 40px on touch devices */
@media (pointer: coarse) {
    .btn, .form-control, select.form-control { min-height: 42px; }
    .btn-sm { min-height: 34px; padding: .35rem .7rem; }
}

/* Mobile-first: stack legacy DataTable rows into cards on narrow screens */
@media (max-width: 720px) {
    .dataTable, table.table { display: block; width: 100%; }
    .dataTable thead, table.table thead { display: none; }
    .dataTable tbody, .dataTable tr, .dataTable td,
    table.table tbody, table.table tr, table.table td { display: block; width: 100%; }
    .dataTable tr, table.table tr {
        margin-bottom: .75rem;
        background: var(--surface);
        border: 1px solid var(--border);
        border-radius: 12px;
        padding: .55rem .85rem;
        box-shadow: var(--shadow-1);
    }
    .dataTable td, table.table td {
        padding: .4rem 0;
        border: none;
        border-bottom: 1px dashed var(--border);
        text-align: right;
        font-size: .85rem;
    }
    .dataTable td:last-child, table.table td:last-child { border-bottom: none; }
    .dataTable td::before, table.table td::before {
        content: attr(data-label);
        float: left;
        color: var(--text-3);
        font-weight: 600;
        font-size: .72rem;
        text-transform: uppercase;
        letter-spacing: .06em;
    }
}

/* Form controls -- sharper focus ring */
.form-control:focus, select.form-control:focus, textarea.form-control:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}

/* Card-header refinement so two-row card-title + meta lines up nicely */
.card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .65rem;
    flex-wrap: wrap;
    margin-bottom: .85rem;
}
.card-title { display: inline-flex; align-items: center; gap: .5rem; font-weight: 700; }

/* Premium pill -- more refined */
.premium-pill {
    background: linear-gradient(135deg, #f59e0b, #d97706);
    color: #fff;
    font-size: .62rem;
    font-weight: 700;
    padding: 2px 7px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: .08em;
    box-shadow: 0 1px 0 rgba(255,255,255,.18) inset, 0 2px 6px rgba(245,158,11,.25);
    vertical-align: middle;
}
.premium-name::before {
    content: "\1F451";
    margin-right: .25rem;
    font-size: .9em;
}

/* ============================================================
   v14: SELLER ADD-FORM AUTO-STYLE
   Legacy add-item tabs in seller/* use Bootstrap row/col-sm.
   These rules give them a modern card look without per-page edits.
   ============================================================ */
.seller-content .tab-content,
.seller-content .tab-pane { padding-top: .85rem; }

/* Each col-sm inside a tab pane row becomes a card */
.seller-content .tab-pane .row > .col-sm {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1.1rem 1.1rem 1rem;
    box-shadow: var(--shadow-1);
    transition: border-color .15s ease, box-shadow .15s ease;
}
.seller-content .tab-pane .row > .col-sm:hover {
    border-color: var(--border-strong);
    box-shadow: var(--shadow-2);
}
.seller-content .tab-pane .row { gap: 1rem; }
.seller-content .tab-pane .row > .col-sm { flex: 1 1 0; min-width: 280px; }

/* Form-group spacing tightened */
.seller-content .form-group { margin-bottom: .85rem; }
.seller-content .form-group label b,
.seller-content .form-group label strong { font-weight: 700; }
.seller-content .form-group label {
    font-size: .8rem;
    color: var(--text-2);
    font-weight: 600;
    margin-bottom: .35rem;
    display: inline-block;
}
.seller-content textarea.form-control,
.seller-content input.form-control,
.seller-content select.form-control,
.seller-content select.form-select {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 9px;
    padding: .55rem .75rem;
    font-size: .92rem;
    color: var(--text);
    width: 100%;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.seller-content textarea.form-control:focus,
.seller-content input.form-control:focus,
.seller-content select.form-control:focus,
.seller-content select.form-select:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}

/* Replace ugly bg-dark alert in add-form status with theme card */
.seller-content .alert.bg-dark {
    background: var(--surface-2) !important;
    color: var(--text) !important;
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: .65rem .85rem;
    font-size: .85rem;
    margin-top: .85rem;
}
.seller-content .alert.bg-dark i.fa-check { color: var(--good); margin-right: .3rem; }
.seller-content .alert.bg-dark i.fa-close,
.seller-content .alert.bg-dark i.fa-times { color: var(--bad); margin-right: .3rem; }

/* Tab-pane "Notes" dt -- modern callout */
.seller-content .tab-pane dl dt.text-info {
    color: var(--accent) !important;
    font-weight: 700;
    font-size: .78rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    margin-bottom: .5rem;
}
.seller-content .tab-pane dl dd { color: var(--text-2); }
.seller-content .tab-pane dl dd li { margin-bottom: .35rem; line-height: 1.55; font-size: .9rem; }

/* General info tab inner col-md-8 -- give it card treatment too */
.seller-content .tab-pane > .col-md-8 {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 1.1rem 1.25rem;
    box-shadow: var(--shadow-1);
    max-width: 100%;
}

/* Add buttons in form-group inside seller add tabs */
.seller-content .tab-pane .form-group .btn-primary {
    background: var(--grad-accent);
    border: none;
    color: #fff;
    padding: .55rem 1.15rem;
    border-radius: 9px;
    font-weight: 600;
    font-size: .9rem;
}


/* =========================================================================
 * Responsive hardening (PC | laptop | tablet | phone)
 * -------------------------------------------------------------------------
 * The panels already collapse the sidebar at <=1024px and ship a hamburger
 * via navbar_top.php. This block fixes the long tail of small-screen
 * regressions that aren't tied to any single page:
 *
 *   - tables that overflow horizontally and break the page layout
 *   - form inputs that trigger iOS auto-zoom because their font-size < 16px
 *   - modal cards that overflow the viewport
 *   - images / iframes blowing out their column
 *   - grids that don't collapse to a single column on phone
 *   - tap targets smaller than the iOS-recommended 44x44 minimum
 *
 * Everything here is a no-op on >=1024px screens — the desktop layout
 * is untouched.
 * ========================================================================= */

/* Pictures should never bust their container, no matter what width they
 * claim. Safe at every width — desktop layouts already implicitly assume
 * this via Bootstrap/Tailwind base. */
img, video, canvas { max-width: 100%; height: auto; }
iframe { max-width: 100%; }

@media (max-width: 1024px) {
    /* Tables that haven't been wrapped explicitly still get horizontal
     * scroll via their parent — but ONLY on small screens. At desktop
     * widths the natural table layout is what we want; forcing
     * display:block here at every width breaks cell-width auto-sizing
     * and leaves desktop tables looking awkwardly stretched / scrolled.
     *
     * The buyer/seller/admin/support panels mostly already wrap tables
     * in .table-responsive, so this just catches stragglers on mobile. */
    .admin-content table:not(.dt-no-overflow),
    .seller-content table:not(.dt-no-overflow),
    .support-content table:not(.dt-no-overflow),
    .content-container table:not(.dt-no-overflow) {
        display: block;
        max-width: 100%;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }
    /* And if the table IS already inside a .table-responsive /
     * .dataTables_wrapper, the wrapper handles scroll — leave the table
     * itself as a proper <table>. */
    .table-responsive > table,
    .dataTables_wrapper table {
        display: table !important;
        overflow: visible !important;
    }

    /* iOS zooms when an input has computed font-size < 16px and the user
     * taps it. Lock everything to >=16px on mobile so the keyboard pops
     * without a janky zoom-in. */
    input[type="text"], input[type="email"], input[type="password"],
    input[type="number"], input[type="search"], input[type="tel"],
    input[type="url"], input[type="datetime-local"], input[type="date"],
    input[type="time"], textarea, select {
        font-size: 16px !important;
    }

    /* Make modals usable on phones: full viewport minus a small margin,
     * scroll inside the card if the content is taller than the screen. */
    .modal-dialog,
    .digz-modal-card,
    .pick-rep-card {
        max-width: calc(100vw - 1rem);
        margin: .5rem auto;
        max-height: calc(100vh - 1rem);
    }
    .modal-body, .digz-modal-body { max-height: 70vh; overflow-y: auto; }

    /* Bigger tap targets on touchscreens — iOS HIG / Material guidance is
     * 44px minimum. Buttons get min-height; tiny ones (.btn-sm) stay smaller
     * but with extra hit padding so they're still tappable. */
    .btn, button:not(.theme-toggle):not(.support-opener):not(.seller-opener):not(.sidebar-opener) {
        min-height: 40px;
    }
    .btn-sm { min-height: 34px; padding: 6px 10px; }

    /* Common grid patterns collapse to one column on phone. The pages set
     * these classes directly via Tailwind-ish utility names. */
    .grid-4 { grid-template-columns: 1fr 1fr !important; }
    .grid-2 { grid-template-columns: 1fr !important; }

    /* Page-head bars stack vertically so action buttons don't get squashed. */
    .page-head { flex-direction: column; align-items: stretch; gap: .75rem; }
    .page-head .actions { display: flex; flex-wrap: wrap; gap: .5rem; }

    /* Cards/containers: tighten padding so content doesn't sit a finger-width
     * inside the screen edge. */
    .card { padding: 1rem; }
}

@media (max-width: 600px) {
    .grid-4 { grid-template-columns: 1fr !important; }

    /* On phones, give the date/time KPI lines room — they were truncating
     * on iPhone SE viewports. */
    .kpi .value { font-size: 1.1rem; word-break: break-word; }
    .kpi .label { font-size: .68rem; }

    /* Sidebar takes ~88% of the viewport when open so users can still see
     * the page peeking under it (and tap the backdrop to close). */
    .sidebar.open, .admin-sidebar.open,
    .seller-sidebar.open, .support-sidebar.open {
        width: min(88vw, 320px) !important;
    }
}

/* Tablet: 2-column KPI grids work better than 4 columns. */
@media (max-width: 900px) and (min-width: 601px) {
    .grid-4 { grid-template-columns: repeat(2, 1fr) !important; }
}

/* High-DPI / Retina: nothing to do — modern browsers handle this. */