/* ==========================================================================
   TradeSphere — premium fintech design system
   Dark + light themes, no external fonts or network dependencies.
   ========================================================================== */

:root {
    --ts-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --ts-radius: 14px;
    --ts-radius-sm: 10px;
    --ts-border-width: 1px;
    --ts-transition: 160ms cubic-bezier(.4, 0, .2, 1);
    --ts-shadow-sm: 0 1px 2px rgba(16, 20, 28, .06);
    --ts-shadow: 0 8px 24px rgba(16, 20, 28, .08);
    --ts-shadow-lg: 0 24px 64px rgba(16, 20, 28, .16);

    /* Fluid scale: every dimension below is continuous — the layout adapts to
       whatever the viewport is instead of jumping at fixed widths. */
    --ts-topbar-h: clamp(52px, 3.6vw, 60px);
    --ts-gutter: clamp(1rem, 4vw, 2.25rem);
    --ts-gutter-wide: clamp(.75rem, 3vw, 2rem);
    --ts-sidebar-w: clamp(216px, 17vw, 280px);
    --ts-sidebar-w-open: clamp(248px, 30vw, 312px);
    --ts-block-pad: clamp(.9rem, 1.6vw, 1.5rem);
    --ts-section-pad: clamp(2.25rem, 5vw, 4rem);
}

/* ------------------------------- Dark theme ------------------------------ */
:root,
[data-theme="dark"] {
    --ts-bg: #0a0d13;
    --ts-bg-alt: #0e121a;
    --ts-surface: #131824;
    --ts-surface-2: #182031;
    --ts-surface-3: #1e2739;
    --ts-border: rgba(255, 255, 255, .08);
    --ts-border-strong: rgba(255, 255, 255, .14);
    --ts-text: #e8ebf2;
    --ts-text-muted: #8d96ab;
    --ts-heading: #ffffff;
    --ts-accent: #4f8cff;
    --ts-accent-soft: rgba(79, 140, 255, .14);
    --ts-success: #2ee08f;
    --ts-success-soft: rgba(46, 224, 143, .14);
    --ts-danger: #ff5f6d;
    --ts-danger-soft: rgba(255, 95, 109, .14);
    --ts-warning: #ffb020;
    --ts-warning-soft: rgba(255, 176, 32, .14);
    --ts-info: #58c8ff;
    --ts-info-soft: rgba(88, 200, 255, .14);
    --ts-grid: rgba(255, 255, 255, .06);
    --ts-glass: rgba(19, 24, 36, .78);
    color-scheme: dark;
}

[data-theme="light"] {
    --ts-bg: #f5f7fb;
    --ts-bg-alt: #eef1f7;
    --ts-surface: #ffffff;
    --ts-surface-2: #f4f6fa;
    --ts-surface-3: #e9edf5;
    --ts-border: #e2e6ee;
    --ts-border-strong: #cfd6e4;
    --ts-text: #1b2231;
    --ts-text-muted: #5d6679;
    --ts-heading: #0d1220;
    --ts-accent: #2563eb;
    --ts-accent-soft: rgba(37, 99, 235, .10);
    --ts-success: #0f9d63;
    --ts-success-soft: rgba(15, 157, 99, .10);
    --ts-danger: #d92d3c;
    --ts-danger-soft: rgba(217, 45, 60, .10);
    --ts-warning: #b5720a;
    --ts-warning-soft: rgba(181, 114, 10, .10);
    --ts-info: #0a80b8;
    --ts-info-soft: rgba(10, 128, 184, .10);
    --ts-grid: rgba(16, 20, 28, .07);
    --ts-glass: rgba(255, 255, 255, .82);
    --ts-shadow: 0 8px 24px rgba(16, 20, 28, .06);
    color-scheme: light;
}

/* --------------------------------- Base ---------------------------------- */
* { box-sizing: border-box; }

html, body {
    padding: 0;
    margin: 0;
    min-height: 100%;
}

body {
    font-family: var(--ts-font);
    background: var(--ts-bg);
    color: var(--ts-text);
    font-size: .945rem;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
    transition: background-color var(--ts-transition), color var(--ts-transition);
}

h1, h2, h3, h4, h5, h6 {
    color: var(--ts-heading);
    font-weight: 650;
    letter-spacing: -.015em;
    margin-bottom: .5rem;
}

a { color: var(--ts-accent); text-decoration: none; transition: color var(--ts-transition); }
a:hover { color: var(--ts-text); }

.text-muted { color: var(--ts-text-muted) !important; }
.text-success { color: var(--ts-success) !important; }
.text-danger { color: var(--ts-danger) !important; }
.text-warning { color: var(--ts-warning) !important; }
.text-info { color: var(--ts-info) !important; }
.text-accent { color: var(--ts-accent) !important; }

.mono { font-family: "JetBrains Mono", "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; font-variant-numeric: tabular-nums; }
.num { font-variant-numeric: tabular-nums; }

hr { border: 0; border-top: 1px solid var(--ts-border); opacity: 1; }

::selection { background: var(--ts-accent); color: #fff; }

/* ------------------------------- Scrollbars ------------------------------ */
* { scrollbar-width: thin; scrollbar-color: var(--ts-border-strong) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--ts-border-strong); border-radius: 8px; border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: var(--ts-text-muted); background-clip: padding-box; }

/* -------------------------------- Layout --------------------------------- */
.ts-container { width: 100%; max-width: 1320px; margin: 0 auto; padding: 0 var(--ts-gutter); }
.ts-container-wide { width: 100%; max-width: 1560px; margin: 0 auto; padding: 0 var(--ts-gutter-wide); }

/* Views use `min-width-0` to let a flex child shrink below its content width
   (long trader names, emails). Without it a flex item refuses to shrink and the
   row pushes the page sideways on narrow screens. */
.min-width-0 { min-width: 0; }

/* --------------------------------- Cards --------------------------------- */
.ts-card {
    background: var(--ts-surface);
    border: var(--ts-border-width) solid var(--ts-border);
    border-radius: var(--ts-radius);
    box-shadow: var(--ts-shadow-sm);
    transition: border-color var(--ts-transition), box-shadow var(--ts-transition), transform var(--ts-transition);
}
.ts-card-hover:hover { border-color: var(--ts-border-strong); box-shadow: var(--ts-shadow); transform: translateY(-1px); }
.ts-card-header {
    padding: 1rem 1.25rem;
    border-bottom: 1px solid var(--ts-border);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
}
.ts-card-title { font-size: .95rem; font-weight: 650; color: var(--ts-heading); margin: 0; }
.ts-card-subtitle { font-size: .8rem; color: var(--ts-text-muted); margin: 0; }
.ts-card-body { padding: 1.25rem; }

.ts-stat {
    background: var(--ts-surface);
    border: 1px solid var(--ts-border);
    border-radius: var(--ts-radius);
    padding: 1.15rem 1.25rem;
    position: relative;
    overflow: hidden;
}
.ts-stat::after {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 2px;
    background: var(--ts-accent);
    opacity: .55;
}
.ts-stat.is-success::after { background: var(--ts-success); }
.ts-stat.is-danger::after { background: var(--ts-danger); }
.ts-stat.is-warning::after { background: var(--ts-warning); }
.ts-stat-label { font-size: .74rem; text-transform: uppercase; letter-spacing: .09em; color: var(--ts-text-muted); font-weight: 600; }
.ts-stat-value { font-size: 1.6rem; font-weight: 680; letter-spacing: -.02em; color: var(--ts-heading); font-variant-numeric: tabular-nums; }
.ts-stat-meta { font-size: .8rem; color: var(--ts-text-muted); }
.ts-stat-icon {
    width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center;
    background: var(--ts-accent-soft); color: var(--ts-accent); font-size: 1.15rem; flex: 0 0 auto;
}

/* -------------------------------- Navbar --------------------------------- */
.ts-navbar {
    position: sticky; top: 0; z-index: 1030;
    background: var(--ts-glass);
    backdrop-filter: saturate(180%) blur(14px);
    border-bottom: 1px solid var(--ts-border);
}
.ts-navbar .navbar-brand { font-weight: 700; letter-spacing: -.02em; color: var(--ts-heading); display: flex; align-items: center; gap: .6rem; }
.ts-logo-mark {
    width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center;
    background: var(--ts-accent); color: #fff; font-weight: 800; font-size: .95rem;
}
.ts-navbar .nav-link { color: var(--ts-text-muted); font-weight: 500; font-size: .9rem; padding: .45rem .75rem; border-radius: 8px; }
.ts-navbar .nav-link:hover, .ts-navbar .nav-link.active { color: var(--ts-heading); background: var(--ts-surface-2); }

/* -------------------------------- Buttons -------------------------------- */
.btn { border-radius: 10px; font-weight: 570; font-size: .875rem; padding: .5rem 1rem; transition: all var(--ts-transition); }
.btn-sm { border-radius: 8px; font-size: .8rem; padding: .335rem .7rem; }
.btn-lg { border-radius: 12px; padding: .7rem 1.4rem; font-size: .95rem; }
.btn-primary { background: var(--ts-accent); border-color: var(--ts-accent); color: #fff; }
.btn-primary:hover { filter: brightness(1.08); color: #fff; }
.btn-outline-secondary { border-color: var(--ts-border-strong); color: var(--ts-text); }
.btn-outline-secondary:hover { background: var(--ts-surface-2); color: var(--ts-text); border-color: var(--ts-border-strong); }

.ts-btn-ghost {
    background: transparent; border: 1px solid var(--ts-border); color: var(--ts-text);
    border-radius: 10px; padding: .5rem 1rem; font-size: .875rem; font-weight: 550;
}
.ts-btn-ghost:hover { background: var(--ts-surface-2); color: var(--ts-text); }

/* --------------------------------- Badges -------------------------------- */
.ts-badge {
    display: inline-flex; align-items: center; gap: .3rem;
    padding: .22rem .55rem; border-radius: 7px; font-size: .72rem; font-weight: 620;
    letter-spacing: .01em; text-transform: capitalize;
    background: var(--ts-surface-2); color: var(--ts-text-muted); border: 1px solid var(--ts-border);
}
.ts-badge-success { background: var(--ts-success-soft); color: var(--ts-success); border-color: transparent; }
.ts-badge-danger { background: var(--ts-danger-soft); color: var(--ts-danger); border-color: transparent; }
.ts-badge-warning { background: var(--ts-warning-soft); color: var(--ts-warning); border-color: transparent; }
.ts-badge-info { background: var(--ts-info-soft); color: var(--ts-info); border-color: transparent; }
.ts-badge-accent { background: var(--ts-accent-soft); color: var(--ts-accent); border-color: transparent; }

/* --------------------------------- Tables -------------------------------- */
.ts-table { width: 100%; border-collapse: separate; border-spacing: 0; }
.ts-table thead th {
    font-size: .72rem; text-transform: uppercase; letter-spacing: .07em; color: var(--ts-text-muted);
    font-weight: 650; padding: .7rem .85rem; border-bottom: 1px solid var(--ts-border);
    background: var(--ts-surface-2); white-space: nowrap;
}
.ts-table tbody td { padding: .7rem .85rem; border-bottom: 1px solid var(--ts-border); vertical-align: middle; font-size: .875rem; }
.ts-table tbody tr:hover { background: var(--ts-surface-2); }
.ts-table tbody tr:last-child td { border-bottom: 0; }
.table-responsive { scrollbar-width: thin; }

/* -------------------------------- Sidebar -------------------------------- */
.ts-sidebar {
    width: var(--ts-sidebar-w); flex: 0 0 var(--ts-sidebar-w);
    background: var(--ts-surface);
    border-right: 1px solid var(--ts-border);
    min-height: calc(100dvh - var(--ts-topbar-h));
    padding: clamp(.75rem, 1.2vw, 1rem) clamp(.5rem, 1vw, .75rem);
    position: sticky; top: var(--ts-topbar-h);
    overflow-y: auto;
    max-height: calc(100dvh - var(--ts-topbar-h));
}
.ts-sidebar-section {
    font-size: .68rem; text-transform: uppercase; letter-spacing: .1em; color: var(--ts-text-muted);
    font-weight: 700; padding: .85rem .75rem .4rem;
}
.ts-sidebar .nav-link {
    display: flex; align-items: center; gap: .65rem;
    color: var(--ts-text-muted); padding: .5rem .75rem; border-radius: 9px;
    font-size: .875rem; font-weight: 500; margin-bottom: 1px;
    transition: background-color var(--ts-transition), color var(--ts-transition);
}
.ts-sidebar .nav-link i { font-size: 1.05rem; width: 20px; text-align: center; }
.ts-sidebar .nav-link:hover { background: var(--ts-surface-2); color: var(--ts-text); }
.ts-sidebar .nav-link.active { background: var(--ts-accent-soft); color: var(--ts-accent); font-weight: 600; }
.ts-sidebar .nav-link .badge { margin-left: auto; }
.ts-sidebar-count {
    margin-left: auto; font-size: .7rem; font-weight: 700; padding: .1rem .4rem; border-radius: 6px;
    background: var(--ts-danger); color: #fff;
}
.ts-layout { display: flex; align-items: flex-start; }
.ts-main { flex: 1 1 auto; min-width: 0; padding: var(--ts-block-pad); }
.ts-topbar {
    height: var(--ts-topbar-h); border-bottom: 1px solid var(--ts-border); background: var(--ts-glass);
    backdrop-filter: blur(14px); position: sticky; top: 0; z-index: 1020;
    display: flex; align-items: center; gap: clamp(.5rem, 1.2vw, 1rem);
    padding: 0 clamp(.7rem, 2vw, 1.25rem);
}

/* --------------------------------- Forms --------------------------------- */
.form-control, .form-select {
    background: var(--ts-surface-2);
    border: 1px solid var(--ts-border);
    color: var(--ts-text);
    border-radius: 10px;
    padding: .55rem .8rem;
    font-size: .9rem;
}
.form-control:focus, .form-select:focus {
    background: var(--ts-surface-2); color: var(--ts-text);
    border-color: var(--ts-accent); box-shadow: 0 0 0 3px var(--ts-accent-soft);
}
.form-control::placeholder { color: var(--ts-text-muted); opacity: .8; }
.form-label { font-size: .82rem; font-weight: 600; color: var(--ts-text); margin-bottom: .3rem; }
.form-text, .form-hint { font-size: .78rem; color: var(--ts-text-muted); }
.invalid-feedback { font-size: .78rem; }
.input-group-text { background: var(--ts-surface-2); border-color: var(--ts-border); color: var(--ts-text-muted); }

.form-check-input { background-color: var(--ts-surface-2); border-color: var(--ts-border-strong); }
.form-check-input:checked { background-color: var(--ts-accent); border-color: var(--ts-accent); }
.form-switch .form-check-input { width: 2.4em; }
.form-switch .form-check-input:focus { border-color: var(--ts-accent); box-shadow: none; }

/* --------------------------------- Alerts -------------------------------- */
.alert { border-radius: 12px; border: 1px solid transparent; font-size: .875rem; }
.alert-success { background: var(--ts-success-soft); color: var(--ts-success); border-color: transparent; }
.alert-danger { background: var(--ts-danger-soft); color: var(--ts-danger); border-color: transparent; }
.alert-warning { background: var(--ts-warning-soft); color: var(--ts-warning); border-color: transparent; }
.alert-info { background: var(--ts-info-soft); color: var(--ts-info); border-color: transparent; }

/* --------------------------------- Toasts -------------------------------- */
.ts-toast-container { position: fixed; top: 1rem; right: 1rem; z-index: 1080; width: 360px; max-width: calc(100vw - 2rem); }
.ts-toast {
    background: var(--ts-surface); border: 1px solid var(--ts-border); border-radius: 12px;
    box-shadow: var(--ts-shadow); padding: .85rem 1rem; margin-bottom: .6rem;
    display: flex; gap: .75rem; align-items: flex-start;
    animation: ts-slide-in .25s ease;
}
.ts-toast.is-out { animation: ts-slide-out .2s ease forwards; }
.ts-toast-icon { width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center; flex: 0 0 auto; }
@keyframes ts-slide-in { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: translateX(0); } }
@keyframes ts-slide-out { to { opacity: 0; transform: translateX(16px); } }

/* -------------------------------- Hero ----------------------------------- */
.ts-hero { position: relative; padding: clamp(2.6rem, 6vw, 5rem) 0 clamp(1.7rem, 4vw, 3.5rem); overflow: hidden; }
.ts-hero::before {
    content: ""; position: absolute; inset: -30% 40% auto -20%; height: 620px;
    background: radial-gradient(circle at 30% 30%, var(--ts-accent-soft), transparent 62%);
    pointer-events: none;
}
.ts-hero h1 { font-size: clamp(2.1rem, 4.4vw, 3.5rem); line-height: 1.1; font-weight: 720; letter-spacing: -.03em; }
.ts-hero p.lead { color: var(--ts-text-muted); font-size: 1.075rem; max-width: 46rem; }
.ts-eyebrow {
    display: inline-flex; align-items: center; gap: .5rem; font-size: .75rem; font-weight: 650;
    text-transform: uppercase; letter-spacing: .12em; color: var(--ts-accent);
    background: var(--ts-accent-soft); padding: .3rem .75rem; border-radius: 999px; margin-bottom: 1.1rem;
}

/* ------------------------------- Sections -------------------------------- */
.ts-section { padding: var(--ts-section-pad) 0; }
.ts-section-alt { background: var(--ts-bg-alt); }

/* -------------------------------- Avatars -------------------------------- */
.ts-avatar {
    width: 38px; height: 38px; border-radius: 50%; object-fit: cover; display: inline-grid; place-items: center;
    color: #fff; font-weight: 650; font-size: .85rem; flex: 0 0 auto; background: var(--ts-surface-3);
}
.ts-avatar-sm { width: 30px; height: 30px; font-size: .75rem; }
.ts-avatar-lg { width: 58px; height: 58px; font-size: 1.1rem; }
.ts-avatar-xl { width: 84px; height: 84px; font-size: 1.5rem; }
.ts-avatar-group { display: flex; }
.ts-avatar-group .ts-avatar { margin-left: -10px; border: 2px solid var(--ts-surface); }
.ts-avatar-group .ts-avatar:first-child { margin-left: 0; }

/* ------------------------------- Sparkline -------------------------------- */
.ts-sparkline { display: block; width: 100%; height: 34px; }

/* -------------------------------- Charts --------------------------------- */
.ts-chart { width: 100%; min-height: 260px; }
.ts-chart-sm { min-height: 200px; }
.ts-chart-lg { min-height: 380px; }

/* ------------------------------ Progress ---------------------------------- */
.ts-progress { height: 6px; background: var(--ts-surface-3); border-radius: 99px; overflow: hidden; }
.ts-progress > span { display: block; height: 100%; border-radius: 99px; background: var(--ts-accent); transition: width .6s cubic-bezier(.4,0,.2,1); }

/* --------------------------------- Misc ---------------------------------- */
.ts-divider { height: 1px; background: var(--ts-border); margin: 1.25rem 0; }
.ts-empty { text-align: center; padding: 3rem 1.5rem; color: var(--ts-text-muted); }
.ts-empty i { font-size: 2.4rem; opacity: .45; display: block; margin-bottom: .75rem; }
.ts-skeleton { background: linear-gradient(90deg, var(--ts-surface-2) 25%, var(--ts-surface-3) 37%, var(--ts-surface-2) 63%); background-size: 400% 100%; animation: ts-shimmer 1.4s ease infinite; border-radius: 8px; }
@keyframes ts-shimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
.ts-skeleton-line { height: 12px; margin-bottom: .6rem; }
.ts-copy { cursor: pointer; }
.ts-kv { display: flex; justify-content: space-between; gap: 1rem; padding: .45rem 0; border-bottom: 1px dashed var(--ts-border); font-size: .875rem; }
.ts-kv:last-child { border-bottom: 0; }
.ts-kv dt, .ts-kv .k { color: var(--ts-text-muted); }
.ts-kv .v { font-weight: 600; color: var(--ts-text); font-variant-numeric: tabular-nums; text-align: right; }

.ts-risk-bar { display: flex; gap: 3px; }
.ts-risk-bar span { flex: 1; height: 5px; border-radius: 2px; background: var(--ts-surface-3); }
.ts-risk-bar span.on { background: var(--ts-accent); }
.ts-risk-low .on { background: var(--ts-success); }
.ts-risk-medium .on { background: var(--ts-info); }
.ts-risk-high .on { background: var(--ts-warning); }
.ts-risk-extreme .on { background: var(--ts-danger); }

.ts-ticker-row { display: flex; align-items: center; gap: .75rem; padding: .6rem .85rem; border-bottom: 1px solid var(--ts-border); }
.ts-ticker-row:last-child { border-bottom: 0; }

.ts-demo-banner {
    background: var(--ts-warning-soft); color: var(--ts-warning);
    border-bottom: 1px solid var(--ts-border); font-size: .82rem; padding: .4rem 1rem; text-align: center;
}

.ts-footer { border-top: 1px solid var(--ts-border); padding: 3rem 0 2rem; background: var(--ts-bg-alt); }
.ts-footer h6 { font-size: .78rem; text-transform: uppercase; letter-spacing: .09em; color: var(--ts-text-muted); margin-bottom: .9rem; }
.ts-footer a { color: var(--ts-text-muted); font-size: .875rem; display: block; padding: .18rem 0; }
.ts-footer a:hover { color: var(--ts-text); }

.ts-nav-pills .nav-link { border-radius: 9px; font-size: .85rem; color: var(--ts-text-muted); padding: .4rem .8rem; }
.ts-nav-pills .nav-link.active { background: var(--ts-accent-soft); color: var(--ts-accent); font-weight: 600; }

.ts-timeline { position: relative; padding-left: 1.5rem; }
.ts-timeline::before { content: ""; position: absolute; left: 5px; top: 6px; bottom: 6px; width: 2px; background: var(--ts-border); }
.ts-timeline-item { position: relative; padding-bottom: 1.1rem; }
.ts-timeline-item::before {
    content: ""; position: absolute; left: -1.5rem; top: .45rem; width: 12px; height: 12px; border-radius: 50%;
    background: var(--ts-surface); border: 2px solid var(--ts-accent);
}

.ts-code {
    background: var(--ts-surface-2); border: 1px solid var(--ts-border); border-radius: 10px;
    padding: .85rem 1rem; font-size: .8rem; overflow-x: auto;
    font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
}

/* Button groups wrap instead of overflowing on narrow screens. */
.btn-group { flex-wrap: wrap; }

/* ------------------------ Bootstrap component polish ------------------------ */
.pagination { flex-wrap: wrap; gap: .25rem; margin: 0; }
.pagination .page-link {
    background: var(--ts-surface-2);
    border: 1px solid var(--ts-border);
    color: var(--ts-text);
    border-radius: 9px;
    padding: .35rem .7rem;
    font-size: .85rem;
}
.pagination .page-link:hover { background: var(--ts-surface-3); color: var(--ts-text); }
.pagination .page-item.active .page-link { background: var(--ts-accent); border-color: var(--ts-accent); color: #fff; }
.pagination .page-item.disabled .page-link { background: var(--ts-surface-2); color: var(--ts-text-muted); opacity: .55; }

.dropdown-menu {
    background: var(--ts-surface);
    border: 1px solid var(--ts-border);
    border-radius: 12px;
    box-shadow: var(--ts-shadow);
    padding: .35rem;
}
.dropdown-item { color: var(--ts-text); border-radius: 8px; font-size: .875rem; padding: .45rem .7rem; }
.dropdown-item:hover, .dropdown-item:focus { background: var(--ts-surface-2); color: var(--ts-text); }
.dropdown-divider { border-color: var(--ts-border); }

.nav-tabs { border-bottom-color: var(--ts-border); }
.nav-tabs .nav-link { color: var(--ts-text-muted); border-radius: 9px 9px 0 0; }
.nav-tabs .nav-link.active { color: var(--ts-heading); }

/* --------------------------- DataTables overrides ------------------------- */
div.dt-container { font-size: .875rem; }
div.dt-container .dt-search input, div.dt-container .dt-input { background: var(--ts-surface-2); border: 1px solid var(--ts-border); color: var(--ts-text); border-radius: 8px; padding: .35rem .6rem; }
div.dt-container .dt-paging .dt-paging-button { color: var(--ts-text) !important; }
div.dt-container .dt-paging .dt-paging-button.current { background: var(--ts-accent) !important; border-color: var(--ts-accent) !important; color: #fff !important; }
table.dataTable { color: var(--ts-text); border-color: var(--ts-border) !important; }
table.dataTable thead th { color: var(--ts-text-muted) !important; border-bottom: 1px solid var(--ts-border) !important; }
table.dataTable tbody tr { background: transparent !important; }
table.dataTable tbody tr:hover td { background: var(--ts-surface-2) !important; }
table.dataTable td { border-color: var(--ts-border) !important; }

/* ----------------------------- Offcanvas nav ------------------------------ */
.offcanvas { background: var(--ts-surface); color: var(--ts-text); }
.offcanvas-header { border-bottom: 1px solid var(--ts-border); }

/* -------------------------------- Modals ---------------------------------- */
.modal-content { background: var(--ts-surface); border: 1px solid var(--ts-border); border-radius: var(--ts-radius); color: var(--ts-text); }
.modal-header, .modal-footer { border-color: var(--ts-border); }
.btn-close { filter: invert(1) grayscale(1) brightness(1.4); opacity: .6; }
[data-theme="light"] .btn-close { filter: none; }

/* ------------------------------- Breadcrumb -------------------------------- */
.breadcrumb { font-size: .82rem; }
.breadcrumb-item, .breadcrumb-item a { color: var(--ts-text-muted); }
.breadcrumb-item.active { color: var(--ts-text); }

/* Filter bars wrap and shrink instead of pushing the page sideways. */
.ts-filter-bar { flex-wrap: wrap; }
.ts-filter-select { width: auto; min-width: 0; max-width: 100%; }

/* --------------------------- Search / form sizing ---------------------------- */
.ts-search { min-width: 0; flex: 1 1 180px; max-width: 260px; }

/* ------------------------------ Auth pages ---------------------------------- */
.ts-auth-main {
    position: relative;
    overflow: hidden;
}
.ts-auth-main::before {
    content: "";
    position: absolute;
    inset: -20% auto auto -10%;
    width: 620px;
    height: 620px;
    background: radial-gradient(circle at 40% 40%, var(--ts-accent-soft), transparent 62%);
    pointer-events: none;
}
.ts-auth-card {
    position: relative;
    border-radius: 18px;
    box-shadow: var(--ts-shadow);
    overflow: hidden;
}
.ts-auth-card::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    background: linear-gradient(90deg, var(--ts-accent), var(--ts-success));
    opacity: .85;
}
.ts-auth-card .form-control,
.ts-auth-card .form-select { padding: .7rem .9rem; }
.ts-auth-card .btn { padding: .7rem 1.1rem; }
.ts-auth-aside { padding-left: 1.5rem; }

/* ------------------------------ Responsive --------------------------------- */

/* Fluid media: nothing may ever push the page wider than the viewport. */
img, svg, video, canvas, iframe, embed, pre, table, .mono { max-width: 100%; }
html { -webkit-text-size-adjust: 100%; }

/* Long values (emails, hashes, UUIDs) wrap instead of overflowing. */
td, th, .mono, .ts-kv .v, .ts-code { overflow-wrap: anywhere; }

/* Flex children must be allowed to shrink, otherwise a single long word
   stretches the whole row horizontally. */
.ts-card-header > *,
.ts-topbar > *,
.ts-stat .d-flex > *,
.ts-ticker-row > * { min-width: 0; }

/* Nav pills scroll sideways instead of wrapping into a tall stack. */
.ts-nav-pills { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.ts-nav-pills::-webkit-scrollbar { display: none; }
.ts-nav-pills .nav-link { white-space: nowrap; }

.table-responsive { -webkit-overflow-scrolling: touch; overscroll-behavior-x: contain; }

/* Inputs are 16 px so iOS Safari does not zoom the page on focus. */
.form-control, .form-select { font-size: 1rem; }

/* ---------------------------------- ≤ 1400 px -------------------------------- */
@media (max-width: 1399.98px) {
    .ts-navbar .nav-link { padding: .4rem .55rem; font-size: .875rem; }
}

/* Drawer header: only visible while the sidebar is off-canvas. */
.ts-sidebar-head {
    display: none;
    align-items: center;
    gap: .6rem;
    padding: .35rem .5rem .85rem;
    margin-bottom: .5rem;
    border-bottom: 1px solid var(--ts-border);
}
.ts-sidebar-head .ts-btn-ghost { padding: .35rem .6rem; }

/* ---------------------------------- ≥ 1200 px -------------------------------- */
@media (min-width: 1200px) {
    /* On desktop the topbar button collapses the sidebar (drawer above is
       off-canvas only below 1200 px). Collapsed, the content takes the width. */
    .ts-layout.is-collapsed .ts-sidebar { display: none; }
}

/* ---------------------------------- ≤ 1200 px -------------------------------- */
/* Below `xl` the sidebar is *revealed in the layout* — never as an overlay on
   top of the page. Tapping the menu button shows it and the content gives up
   the space; tapping it again, tapping a link, the ✕ or Escape hides it. */
@media (max-width: 1199.98px) {
    .ts-sidebar { display: none; }

    .ts-layout.sidebar-open .ts-sidebar {
        display: block;
        width: var(--ts-sidebar-w-open);
        flex: 0 0 var(--ts-sidebar-w-open);
        max-height: calc(100dvh - var(--ts-topbar-h));
        border-right: 1px solid var(--ts-border);
        animation: ts-sidebar-reveal .18s ease-out;
    }
    /* The sidebar header (brand + close) only exists to dismiss it here. */
    .ts-layout.sidebar-open .ts-sidebar-head { display: flex; }
}

@keyframes ts-sidebar-reveal {
    from { opacity: 0; transform: translateX(-8px); }
    to   { opacity: 1; transform: translateX(0); }
}

/* On phones the navigation takes the whole width while it is open — a 264px
   panel would leave the content unreadable — so the content is hidden until
   the sidebar is dismissed again. */
@media (max-width: 767.98px) {
    .ts-layout.sidebar-open .ts-sidebar {
        width: 100%;
        flex: 0 0 100%;
        max-height: calc(100dvh - var(--ts-topbar-h));
        border-right: 0;
    }
    .ts-layout.sidebar-open .ts-main { display: none; }
}

@media (max-width: 991.98px) {
    .ts-sidebar { top: 0; }
    .ts-stat { padding: .95rem 1rem; }
    .ts-avatar-xl { width: 68px; height: 68px; font-size: 1.25rem; }
}

/* Wide-gutter rows (.g-5) use a 3rem gutter. The wide container only has ~1.25rem
   of padding, so the row's negative margins reach past the viewport and every
   laptop at ~1024 px gets a stray horizontal scrollbar. From `lg` up, trim the
   gutter to 2rem; below `lg` the caps in the responsive blocks below apply. */
@media (min-width: 992px) {
    .row.g-5 { --bs-gutter-x: 2rem; }
}

/* ------------------------------- ≤ 992 px (below lg) ------------------------- */
@media (max-width: 991.98px) {
    /* Below `lg` the col-lg-* columns stack. Wide gutters (g-4/g-5) are then
       wider than the container padding, which pushes the row past the viewport
       and creates a horizontal scrollbar. Cap them while columns are stacked. */
    .row { --bs-gutter-x: 1.25rem; }
}

/* Ticker rows: the symbol sizes to its own text so long tickers are never
   clipped; the price column (flex-grow-1) gives up the space instead. */
.ts-ticker-symbol { flex: 0 0 auto; min-width: 76px; white-space: nowrap; }

/* Link rows that are whole-line tap targets get real height, not just text height. */
.ts-footer a { display: inline-block; padding: .3rem 0; }
.ts-name-link { display: inline-block; padding: .3rem 0; }
.ts-auth-link, form a.small { display: inline-block; padding: .35rem 0; }
.ts-topbar .navbar-brand { min-height: 36px; display: inline-flex; align-items: center; }

/* Comfortable touch targets on phones (Bootstrap's defaults are desktop-sized). */
.navbar-toggler, [data-ts-sidebar-toggle] { min-width: 42px; min-height: 38px; }
.btn-sm { min-height: 32px; min-width: 32px; }
.form-check { min-height: 34px; align-items: center; }
.form-check-input { width: 1.2em; height: 1.2em; margin-top: 0; }
.form-check-label { padding-top: .15rem; }

/* ---------------------------------- ≤ 768 px --------------------------------- */
@media (max-width: 767.98px) {

    .ts-stat-value { font-size: 1.3rem; }
    .ts-stat-icon { width: 34px; height: 34px; font-size: 1rem; }

    .ts-card-header { padding: .85rem .95rem; gap: .6rem; }
    .ts-card-body { padding: .95rem; }
    .ts-card-title { font-size: .9rem; }

    /* Tables stay readable: tighter cells, horizontal scroll where wrapped. */
    .ts-table thead th { padding: .55rem .6rem; font-size: .68rem; letter-spacing: .05em; }
    .ts-table tbody td { padding: .55rem .6rem; font-size: .82rem; }

    /* Inline label/value rows stack instead of squeezing. */
    .ts-kv { gap: .5rem; font-size: .84rem; }

    .ts-footer { padding: 2.25rem 0 1.5rem; }
    .ts-footer .col-6 { flex: 0 0 50%; }
}

/* ---------------------------------- ≤ 576 px --------------------------------- */
@media (max-width: 575.98px) {
    body { font-size: .925rem; }
    .row { --bs-gutter-x: 1rem; }

    /* Comfortable tap targets. */
    .btn { padding: .62rem 1.05rem; }
    .btn-sm { padding: .45rem .8rem; font-size: .82rem; }
    .ts-btn-ghost { padding: .45rem .75rem; }

    .ts-stat { padding: .85rem .9rem; }
    .ts-stat-value { font-size: 1.22rem; }

    .ts-card-header { padding: .8rem .85rem; }
    .ts-card-body { padding: .85rem; }

    /* Modals and toasts use the whole screen. */
    .modal-dialog { margin: .5rem; }
    .modal-footer > * { margin: .25rem 0 0; width: 100%; }
    .ts-toast-container { top: .5rem; left: .5rem; right: .5rem; width: auto; max-width: none; }

    .pagination .page-link { padding: .35rem .6rem; font-size: .82rem; }

    /* Trader profile header stacks the avatar above the name. */
    .ts-profile-head { flex-direction: column; align-items: flex-start !important; gap: .75rem !important; }
    .ts-avatar-xl { width: 60px; height: 60px; font-size: 1.15rem; }
}

@media print { .ts-sidebar, .ts-topbar, .ts-navbar { display: none !important; } }
