/* =============================================================================
   Qeyro design system — single CSS entry point for the AdminLTE app.
   Load AFTER adminlte.css / Bootstrap so these overrides win the cascade.

   Canonieke bron: design/tokens/ + design/styles.css
   Alle waarden hier zijn letterlijk overgenomen uit de design-tokens.
   ============================================================================= */

/* ── Self-hosted fonts ──────────────────────────────────────────────────────── */
@font-face {
    font-family: 'Montserrat';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('/fonts/montserrat-latin-ext-normal.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
                   U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF,
                   U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB,
                   U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'Montserrat';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('/fonts/montserrat-latin-normal.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
                   U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F,
                   U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF,
                   U+FFFD;
}
@font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 100 900;
    font-display: swap;
    src: url('/fonts/montserrat-latin-ext-italic.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
                   U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF,
                   U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB,
                   U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'Montserrat';
    font-style: italic;
    font-weight: 100 900;
    font-display: swap;
    src: url('/fonts/montserrat-latin-italic.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
                   U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F,
                   U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF,
                   U+FFFD;
}
@font-face {
    font-family: 'JetBrains Mono';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('/fonts/jetbrains-mono-latin-400.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
                   U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F,
                   U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF,
                   U+FFFD;
}


/* ── Design tokens ──────────────────────────────────────────────────────────── */
:root {
    /* Ink — cool navy neutrals */
    --qy-ink-950: #0C121B;
    --qy-ink-900: #14181D;
    --qy-ink-800: #1D2530;
    --qy-ink-700: #2C3644;
    --qy-ink-600: #3E4A59;
    --qy-ink-500: #5A6673;
    --qy-ink-400: #7A828C;
    --qy-ink-300: #9AA1A9;
    --qy-ink-200: #C9CDD2;
    --qy-ink-100: #E4E6E9;
    --qy-ink-50:  #F2F3F5;
    --qy-white:   #FFFFFF;

    /* Accent — cerulean. One hue, used sparingly. */
    --qy-accent-700: #085D80;
    --qy-accent-600: #0B7CAA;
    --qy-accent-500: #0E9BD0;
    --qy-accent-400: #29B6E8;
    --qy-accent-300: #7DD3F0;
    --qy-accent-100: #DCF1FA;

    /* Teal — second stop of the brand gradient only. Never a flat fill. */
    --qy-teal-400: #22D3EE;
    --qy-gradient-accent: linear-gradient(135deg, var(--qy-teal-400) 0%, var(--qy-accent-500) 100%);

    /* Semantic */
    --qy-positive-600: #0E7A62;
    --qy-positive-500: #12A184;
    --qy-positive-100: #DCF2EC;
    --qy-negative-600: #B03A41;
    --qy-negative-500: #D14C53;
    --qy-negative-100: #FBE6E7;
    --qy-warning-600:  #9C6614;
    --qy-warning-500:  #C4841E;
    --qy-warning-100:  #FAEEDA;

    /* Semantic aliases */
    --qy-text-primary:   var(--qy-ink-900);
    --qy-text-secondary: var(--qy-ink-500);
    --qy-text-muted:     var(--qy-ink-400);
    --qy-text-inverse:   var(--qy-ink-50);
    --qy-text-link:      var(--qy-accent-600);

    --qy-surface-page:       #F7F8F9;
    --qy-surface-card:       var(--qy-white);
    --qy-surface-sunken:     var(--qy-ink-50);
    --qy-surface-nav:        var(--qy-ink-900);
    --qy-surface-nav-active: #1F2937;
    --qy-surface-inverse:    var(--qy-ink-900);

    --qy-border-subtle: var(--qy-ink-100);
    --qy-border-strong: var(--qy-ink-200);
    --qy-border:        var(--qy-ink-200);
    --qy-border-focus:  var(--qy-accent-500);
    --qy-border-hairline: 1px solid var(--qy-border-subtle);

    /* Typography */
    --qy-font-sans:      "Montserrat", system-ui, -apple-system, sans-serif;
    --qy-font-mono:      "JetBrains Mono", ui-monospace, "SFMono-Regular", monospace;
    --qy-font-wordmark:  "Montserrat", system-ui, sans-serif; /* Instrument Sans when self-hosted */

    --qy-weight-regular:  400;
    --qy-weight-medium:   500;
    --qy-weight-semibold: 600;
    --qy-weight-bold:     700;

    --qy-text-display:     600 40px/1.1   var(--qy-font-sans);
    --qy-text-h1:          600 28px/1.2   var(--qy-font-sans);
    --qy-text-h2:          600 20px/1.3   var(--qy-font-sans);
    --qy-text-h3:          600 16px/1.35  var(--qy-font-sans);
    --qy-text-body:        400 14px/1.55  var(--qy-font-sans);
    --qy-text-body-strong: 600 14px/1.55  var(--qy-font-sans);
    --qy-text-small:       400 13px/1.5   var(--qy-font-sans);
    --qy-text-label:       500 11px/1.2   var(--qy-font-mono);
    --qy-text-metric:      600 30px/1.05  var(--qy-font-sans);
    --qy-text-data:        400 13px/1.4   var(--qy-font-mono);

    --qy-tracking-tight:  -0.025em;
    --qy-tracking-normal:  0;
    --qy-tracking-label:   0.1em;

    /* Spacing */
    --qy-space-1:  2px;
    --qy-space-2:  4px;
    --qy-space-3:  6px;
    --qy-space-4:  8px;
    --qy-space-5:  12px;
    --qy-space-6:  16px;
    --qy-space-7:  20px;
    --qy-space-8:  24px;
    --qy-space-9:  32px;
    --qy-space-10: 40px;
    --qy-space-11: 48px;
    --qy-space-12: 64px;

    --qy-radius-xs:   2px;
    --qy-radius-sm:   4px;
    --qy-radius-md:   6px;
    --qy-radius-lg:   10px;
    --qy-radius-xl:   14px;
    --qy-radius-full: 999px;

    --qy-sidebar-width:     232px;
    --qy-topbar-height:     60px;
    --qy-content-max:       1280px;
    --qy-control-height:    36px;
    --qy-control-height-sm: 28px;
    --qy-control-height-lg: 44px;

    /* Elevation */
    --qy-shadow-none: none;
    --qy-shadow-xs:   0 1px 2px rgba(12, 18, 27, 0.05);
    --qy-shadow-sm:   0 1px 3px rgba(12, 18, 27, 0.07), 0 1px 1px rgba(12, 18, 27, 0.04);
    --qy-shadow-md:   0 4px 12px rgba(12, 18, 27, 0.08);
    --qy-shadow-lg:   0 16px 40px rgba(12, 18, 27, 0.14);
    --qy-focus-ring:  0 0 0 3px rgba(14, 155, 208, 0.22);

    /* Motion */
    --qy-duration-instant: 80ms;
    --qy-duration-fast:  140ms;
    --qy-duration-base:  220ms;
    --qy-duration-slow:  360ms;
    --qy-ease-standard:  cubic-bezier(0.4, 0, 0.2, 1);
    --qy-ease-out:       cubic-bezier(0.16, 1, 0.3, 1);

    --qy-transition-control:
        background-color var(--qy-duration-fast) var(--qy-ease-standard),
        border-color     var(--qy-duration-fast) var(--qy-ease-standard),
        color            var(--qy-duration-fast) var(--qy-ease-standard),
        box-shadow       var(--qy-duration-fast) var(--qy-ease-standard);

    /* ── AdminLTE 4 variable overrides ────────────────────────────────────── */
    --lte-sidebar-bg:    var(--qy-surface-nav);
    --lte-sidebar-color: var(--qy-text-inverse);
    --lte-header-bg:     var(--qy-white);
    --lte-primary:       var(--qy-accent-500);
    --lte-brand-color:   var(--qy-teal-400);

    /* Bootstrap primary sync */
    --bs-primary:     var(--qy-accent-500);
    --bs-primary-rgb: 14, 155, 208;
    --bs-body-bg:     var(--qy-surface-page);
    --bs-body-color:  var(--qy-text-primary);
    --bs-border-color: var(--qy-border-subtle);
    --bs-border-radius: var(--qy-radius-md);
    --bs-border-radius-sm: var(--qy-radius-sm);
    --bs-border-radius-lg: var(--qy-radius-lg);
}

@keyframes qy-fade-up {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: translateY(0); }
}


/* ── Global type ────────────────────────────────────────────────────────────── */
body,
.app-wrapper,
.app-sidebar,
.app-header,
.app-content {
    font-family: var(--qy-font-sans);
}

h1, h2, h3, h4, h5, h6 {
    letter-spacing: var(--qy-tracking-tight);
    font-family: var(--qy-font-sans);
}

/* Monospace utility — numbers, timestamps, ids */
.qy-mono, .font-monospace {
    font-family: var(--qy-font-mono) !important;
    font-variant-numeric: tabular-nums;
}


/* ── Sidebar logo ───────────────────────────────────────────────────────────── */
.qy-sidebar-logo {
    height: 28px;
    width: auto;
    display: block;
}

/* ── Sidebar background ──────────────────────────────────────────────────────
   AdminLTE uses Bootstrap's bg-body-secondary class for the sidebar background,
   not a CSS variable we can override via :root. Set it directly here. */
.app-sidebar {
    background-color: var(--qy-surface-nav) !important;
}

/* ── Active sidebar nav item: cerulean left-border ──────────────────────────── */
/* DOM: UL.sidebar-menu > LI.nav-item > A.nav-link.active — no .nav-sidebar ancestor.
   border-left beats inset box-shadow here: the nav-link has border-radius:6px so an
   inset shadow curves at the corners, and .sidebar-wrapper has overflow:hidden. */
.sidebar-menu .nav-item > .nav-link.active {
    border-left: 2px solid var(--qy-accent-400);
    padding-left: calc(1rem - 2px); /* compensate so text doesn't shift */
}


/* ── Component classes ──────────────────────────────────────────────────────── */

/* Button */
.qy-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: var(--qy-space-3);
    height: var(--qy-control-height); padding: 0 var(--qy-space-6);
    border-radius: var(--qy-radius-md); border: 1px solid transparent;
    font: var(--qy-text-body-strong); cursor: pointer; white-space: nowrap;
    transition: var(--qy-transition-control); text-decoration: none;
}
.qy-btn:focus-visible { outline: none; box-shadow: var(--qy-focus-ring); }
.qy-btn[disabled]     { opacity: .45; cursor: not-allowed; }
.qy-btn--sm  { height: var(--qy-control-height-sm); padding: 0 var(--qy-space-5); font: var(--qy-text-small); font-weight: 600; }
.qy-btn--primary   { background: var(--qy-ink-900); color: var(--qy-white); }
.qy-btn--primary:hover { background: var(--qy-ink-700); color: var(--qy-white); }
.qy-btn--accent    { background: var(--qy-accent-600); color: var(--qy-white); }
.qy-btn--accent:hover  { background: var(--qy-accent-700); color: var(--qy-white); }
.qy-btn--secondary { background: var(--qy-white); color: var(--qy-ink-900); border-color: var(--qy-border-strong); }
.qy-btn--secondary:hover { background: var(--qy-ink-50); color: var(--qy-ink-900); }
.qy-btn--ghost     { background: transparent; color: var(--qy-ink-600); }
.qy-btn--ghost:hover    { background: var(--qy-ink-50); color: var(--qy-ink-900); }
.qy-btn--danger    { background: var(--qy-white); color: var(--qy-negative-600); border-color: var(--qy-negative-100); }
.qy-btn--danger:hover   { background: var(--qy-negative-100); }

/* Card */
.qy-card {
    background: var(--qy-surface-card);
    border: var(--qy-border-hairline);
    border-radius: var(--qy-radius-lg);
    box-shadow: var(--qy-shadow-xs);
}
.qy-card__header {
    display: flex; align-items: center; justify-content: space-between; gap: var(--qy-space-5);
    padding: var(--qy-space-6) var(--qy-space-7);
    border-bottom: var(--qy-border-hairline);
}
.qy-card__title { font: var(--qy-text-h3); letter-spacing: var(--qy-tracking-tight); }
.qy-card__sub   { font: var(--qy-text-small); color: var(--qy-text-secondary); margin-top: 2px; }
.qy-card__body  { padding: var(--qy-space-7); }
/* --flush historically used overflow:hidden to clip its square-cornered content
   against the card's rounded bottom. That also clipped wide tables on narrow
   screens. Rounding is now delegated to the inner .qy-table-wrap (see below);
   the flush body itself no longer clips. */
.qy-card__body--flush { padding: 0; border-radius: 0 0 var(--qy-radius-lg) var(--qy-radius-lg); }
.qy-card__footer {
    padding: var(--qy-space-4) var(--qy-space-7);
    border-top: var(--qy-border-hairline);
    font: var(--qy-text-small);
    color: var(--qy-text-muted);
}

/* Badge */
.qy-badge {
    display: inline-flex; align-items: center; gap: var(--qy-space-2);
    height: 22px; padding: 0 var(--qy-space-4);
    border-radius: var(--qy-radius-full);
    font: var(--qy-text-label); letter-spacing: 0.06em; text-transform: uppercase;
    background: var(--qy-ink-50); color: var(--qy-ink-600);
}
.qy-badge--accent    { background: var(--qy-accent-100);   color: var(--qy-accent-700); }
.qy-badge--positive  { background: var(--qy-positive-100); color: var(--qy-positive-600); }
.qy-badge--negative  { background: var(--qy-negative-100); color: var(--qy-negative-600); }
.qy-badge--warning   { background: var(--qy-warning-100);  color: var(--qy-warning-600); }
.qy-badge--solid     { background: var(--qy-ink-900);       color: var(--qy-white); }

/* StatCard */
.qy-stat { display: flex; flex-direction: column; gap: var(--qy-space-4); padding: var(--qy-space-7); }
.qy-stat__label {
    font: var(--qy-text-label); letter-spacing: var(--qy-tracking-label);
    text-transform: uppercase; color: var(--qy-text-muted);
}
.qy-stat__value {
    font: var(--qy-text-metric); letter-spacing: var(--qy-tracking-tight);
    font-variant-numeric: tabular-nums;
}
.qy-stat__foot {
    display: flex; align-items: center; gap: var(--qy-space-4);
    font: var(--qy-text-small); color: var(--qy-text-secondary);
}

/* TrendDelta */
.qy-trend { display: inline-flex; align-items: center; gap: var(--qy-space-2); font: var(--qy-text-data); font-weight: 500; }
.qy-trend--up   { color: var(--qy-positive-600); }
.qy-trend--down { color: var(--qy-negative-600); }
.qy-trend--flat { color: var(--qy-ink-400); }
.qy-trend__arrow { font-size: 11px; line-height: 1; }

/* ProgressBar */
.qy-progress { height: 6px; border-radius: var(--qy-radius-full); background: var(--qy-ink-100); overflow: hidden; }
.qy-progress__fill {
    height: 100%; border-radius: var(--qy-radius-full);
    background: var(--qy-ink-800);
    transition: width var(--qy-duration-slow) var(--qy-ease-out);
}
.qy-progress__fill--accent   { background: var(--qy-gradient-accent); }
.qy-progress__fill--positive { background: var(--qy-positive-500); }

/* DataTable */
.qy-table { width: 100%; border-collapse: collapse; font: var(--qy-text-body); }
.qy-table th {
    text-align: left; padding: var(--qy-space-4) var(--qy-space-7);
    font: var(--qy-text-label); letter-spacing: var(--qy-tracking-label); text-transform: uppercase;
    color: var(--qy-text-muted); background: var(--qy-surface-sunken);
    border-bottom: var(--qy-border-hairline); white-space: nowrap;
}
.qy-table td {
    padding: var(--qy-space-5) var(--qy-space-7);
    border-bottom: var(--qy-border-hairline);
    vertical-align: middle;
}
.qy-table tbody tr:last-child td { border-bottom: 0; }
.qy-table tbody tr:hover { background: #FBFCFC; }
.qy-table td.qy-num, .qy-table th.qy-num { text-align: right; font-variant-numeric: tabular-nums; }
.qy-table td.qy-mono { font: var(--qy-text-data); }
.qy-table td.qy-rank { font: var(--qy-text-h2); letter-spacing: var(--qy-tracking-tight); color: var(--qy-ink-800); }

/* Row highlight — own brand */
.qy-row--own { background: var(--qy-accent-100) !important; }
.qy-row--own:hover { background: color-mix(in srgb, var(--qy-accent-100) 70%, var(--qy-accent-300)) !important; }

/* Table scroll container — wide tables scroll inside their own box, never the
   page. Wrap every <table class="qy-table"> in <div class="qy-table-wrap">.
   min-width:max-content lets the table keep its natural width so the wrap
   (not the viewport) is what scrolls. */
.qy-table-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior-x: contain;
}
.qy-table-wrap > .qy-table {
    min-width: max-content;
}
/* Customer groups share column widths regardless of their content. Optional
   columns add to the minimum width; the name column takes the remaining space. */
.qy-table--fixed { table-layout: fixed; }
.qy-table-wrap > .qy-table--customers {
    --qy-customers-costs-width: 0px;
    --qy-customers-active-width: 0px;
    --qy-customers-actions-width: 0px;
    min-width: calc(860px + var(--qy-customers-costs-width) + var(--qy-customers-active-width) + var(--qy-customers-actions-width));
}
.qy-table-wrap > .qy-table--customers-costs { --qy-customers-costs-width: 120px; }
.qy-table-wrap > .qy-table--customers-active { --qy-customers-active-width: 100px; }
.qy-table-wrap > .qy-table--customers-actions { --qy-customers-actions-width: 200px; }
.qy-customers-col--contact { width: 140px; }
.qy-customers-col--email { width: 180px; }
.qy-customers-col--plan, .qy-customers-col--prompts { width: 110px; }
.qy-customers-col--costs { width: 120px; }
.qy-customers-col--status, .qy-customers-col--active { width: 100px; }
.qy-customers-col--actions { width: 200px; }
.qy-table--customers th, .qy-table--customers td {
    padding-left: var(--qy-space-5);
    padding-right: var(--qy-space-5);
}
.qy-table--customers td { overflow: hidden; }
.qy-customers-name { min-width: 0; }
.qy-customers-text {
    display: block; min-width: 0; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap;
}
.qy-customers-actions { white-space: nowrap; }
.qy-customers-actions .qy-btn, .qy-customers-actions form { flex-shrink: 0; }
/* Inside a flush card body, inherit the card's rounded bottom corners. */
.qy-card__body--flush > .qy-table-wrap {
    border-radius: inherit;
}

/* StatusDot */
.qy-status { display: inline-flex; align-items: center; gap: var(--qy-space-4); font: var(--qy-text-body); }
.qy-status__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--qy-ink-300); flex: none; }
.qy-status--ok   .qy-status__dot { background: var(--qy-positive-500); }
.qy-status--warn .qy-status__dot { background: var(--qy-warning-500); }
.qy-status--down .qy-status__dot { background: var(--qy-negative-500); }

/* EmptyState */
.qy-empty {
    display: flex; flex-direction: column; align-items: center; gap: var(--qy-space-5);
    padding: var(--qy-space-12) var(--qy-space-9); text-align: center;
}
.qy-empty__title { font: var(--qy-text-h3); }
.qy-empty__body  { font: var(--qy-text-body); color: var(--qy-text-secondary); max-width: 380px; }

/* Filter bar */
.qy-filterbar {
    display: flex; flex-wrap: wrap; gap: var(--qy-space-5); align-items: flex-end;
    padding: var(--qy-space-5) var(--qy-space-7);
    border-bottom: var(--qy-border-hairline);
}
.qy-filterbar__group { display: flex; flex-direction: column; gap: var(--qy-space-2); }
.qy-filterbar__label { font: var(--qy-text-label); letter-spacing: var(--qy-tracking-label); text-transform: uppercase; color: var(--qy-text-muted); }

/* Input / Select — matches design/tokens/components.css exactly */
.qy-input, .qy-select {
    width: 100%; height: var(--qy-control-height); padding: 0 var(--qy-space-5);
    background: var(--qy-white); color: var(--qy-text-primary);
    border: 1px solid var(--qy-border-strong); border-radius: var(--qy-radius-md);
    font: var(--qy-text-body); transition: var(--qy-transition-control);
}
.qy-input::placeholder { color: var(--qy-ink-300); }
.qy-input:hover, .qy-select:hover { border-color: var(--qy-ink-300); }
.qy-input:focus, .qy-select:focus { outline: none; border-color: var(--qy-border-focus); box-shadow: var(--qy-focus-ring); }
.qy-input--invalid { border-color: var(--qy-negative-500); }
.qy-select {
    appearance: none; padding-right: var(--qy-space-9);
    background-image:
        linear-gradient(45deg,  transparent 50%, var(--qy-ink-400) 50%),
        linear-gradient(135deg, var(--qy-ink-400) 50%, transparent 50%);
    background-position: right 17px center, right 12px center;
    background-size: 5px 5px, 5px 5px;
    background-repeat: no-repeat;
}
.qy-select--sm { height: var(--qy-control-height-sm); font: var(--qy-text-small); }

/* Page fade-in */
.qy-fadein { animation: qy-fade-up var(--qy-duration-base) var(--qy-ease-out) both; }

/* ── Bootstrap form-control focus/border alignment ─────────────────────────── */
.form-control:focus,
.form-select:focus,
.form-check-input:focus {
    border-color: var(--qy-border-focus);
    box-shadow: var(--qy-focus-ring);
    outline: none;
}

/* ── Bootstrap checkbox/radio checked + indeterminate → Qeyro accent ────────
   Bootstrap hardcodes background-color: #0d6efd directly (not via CSS variable)
   on .form-check-input:checked, so :root overrides have no effect. */
.form-check-input:checked,
.form-check-input[type=checkbox]:indeterminate {
    background-color: var(--qy-accent-600);
    border-color:     var(--qy-accent-600);
}

/* ── Bootstrap dropdown active state → Qeyro accent ─────────────────────────
   Bootstrap hardcodes --bs-dropdown-link-active-bg: #0d6efd at component level. */
.dropdown-item.active,
.dropdown-item:active {
    --bs-dropdown-link-active-bg:    var(--qy-accent-600);
    --bs-dropdown-link-active-color: var(--qy-white);
}
.form-control:hover,
.form-select:hover {
    border-color: var(--qy-ink-300);
}
.form-control,
.form-select {
    border-color: var(--qy-border-strong);
    border-radius: var(--qy-radius-md);
    font-family: var(--qy-font-sans);
    font-size: 14px;
    color: var(--qy-text-primary);
    transition: var(--qy-transition-control);
}

/* ── Bootstrap .btn-primary → Qeyro accent ──────────────────────────────────
   Bootstrap bakes --bs-btn-bg: #0d6efd directly on .btn-primary, so overriding
   --bs-primary-rgb in :root has no effect. Override the component-level vars here. */
.btn-primary {
    --bs-btn-bg:                  var(--qy-accent-600);
    --bs-btn-border-color:        var(--qy-accent-600);
    --bs-btn-hover-bg:            var(--qy-accent-700);
    --bs-btn-hover-border-color:  var(--qy-accent-700);
    --bs-btn-active-bg:           var(--qy-accent-700);
    --bs-btn-active-border-color: var(--qy-accent-700);
    --bs-btn-disabled-bg:         var(--qy-accent-600);
    --bs-btn-disabled-border-color: var(--qy-accent-600);
    --bs-btn-focus-shadow-rgb:    11, 124, 170; /* qy-accent-600 RGB */
}
.btn-outline-primary {
    --bs-btn-color:               var(--qy-accent-600);
    --bs-btn-border-color:        var(--qy-accent-600);
    --bs-btn-hover-bg:            var(--qy-accent-600);
    --bs-btn-hover-border-color:  var(--qy-accent-600);
    --bs-btn-active-bg:           var(--qy-accent-700);
    --bs-btn-active-border-color: var(--qy-accent-700);
    --bs-btn-focus-shadow-rgb:    11, 124, 170;
}

/* ── Topbar / App header ────────────────────────────────────────────────────── */
.app-header {
    background: var(--qy-white) !important;
    border-bottom: var(--qy-border-hairline) !important;
    box-shadow: var(--qy-shadow-xs) !important;
}

/* Nav icon buttons (search trigger, notifications, etc.) */
.app-header .nav-link,
.app-header .btn-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px; height: 34px;
    padding: 0;
    border-radius: var(--qy-radius-md);
    color: var(--qy-ink-500) !important;
    background: transparent;
    border: none;
    transition: var(--qy-transition-control);
}
/* Text nav-links (Home, FAQ) — override the icon-button sizing */
.app-header .nav-item.d-md-block .nav-link {
    width: auto;
    padding: 0.375rem 0.5rem;
    gap: 0.25rem;
    font-size: 13px;
}
.app-header .nav-link:hover,
.app-header .btn-link:hover {
    background: var(--qy-ink-50);
    color: var(--qy-ink-900) !important;
}

/* Search form / pill */
.app-header .adminlte-search-trigger,
.app-header form.d-flex,
.app-header .navbar-search {
    background: var(--qy-surface-sunken) !important;
    border: 1px solid var(--qy-border-subtle) !important;
    border-radius: var(--qy-radius-full) !important;
    overflow: hidden;
}
.app-header .adminlte-search-trigger input,
.app-header form.d-flex input[type="search"],
.app-header .navbar-search input {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    font: var(--qy-text-small);
    color: var(--qy-text-primary);
    padding-left: var(--qy-space-4);
}
.app-header .adminlte-search-trigger input::placeholder,
.app-header form.d-flex input[type="search"]::placeholder,
.app-header .navbar-search input::placeholder {
    color: var(--qy-ink-400);
}

/* User menu / avatar area */
.app-header .user-menu .nav-link,
.app-header .dropdown-toggle.nav-link {
    width: auto !important;
    padding: 0 var(--qy-space-4) !important;
    gap: var(--qy-space-3);
    font: var(--qy-text-small);
    font-weight: 500;
    border-radius: var(--qy-radius-md);
}
.app-header .user-menu img,
.app-header .user-image {
    width: 28px; height: 28px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--qy-border-subtle);
}

/* Dropdown from topbar */
.app-header .dropdown-menu {
    border: var(--qy-border-hairline);
    border-radius: var(--qy-radius-lg);
    box-shadow: var(--qy-shadow-md);
    padding: var(--qy-space-2);
}
.app-header .dropdown-item {
    border-radius: var(--qy-radius-sm);
    font: var(--qy-text-small);
    color: var(--qy-text-primary);
    padding: var(--qy-space-3) var(--qy-space-4);
}
.app-header .dropdown-item:hover {
    background: var(--qy-ink-50);
    color: var(--qy-ink-900);
}

/* ── Letter-avatar fallback ─────────────────────────────────────────────────── */
.qy-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--qy-accent-600, #0B7CAA);
    color: #fff;
    font-family: var(--qy-font-wordmark, 'Montserrat', system-ui, sans-serif);
    font-weight: 600;
    line-height: 1;
    flex-shrink: 0;
    user-select: none;
    vertical-align: middle;
}


/* ── Mobile / narrow-viewport adjustments ──────────────────────────────────
   The app is desktop-first (data tables). Bootstrap's grid already stacks the
   .row/.col-* layouts; these rules cover the Qeyro components the grid doesn't
   touch. Wide tables are handled by .qy-table-wrap above — never the page.
   Aanpak: Optie A (scroll binnen de tabel-container). Zie docs/BRIEF.md §10. */

@media (max-width: 767.98px) {
    /* Compacter: brede tabellen passen zo met minder scroll, smalle zonder. */
    .qy-table th,
    .qy-table td { padding: var(--qy-space-4) var(--qy-space-5); }

    .qy-card__body   { padding: var(--qy-space-6); }
    .qy-card__header { padding: var(--qy-space-5) var(--qy-space-6); flex-wrap: wrap; }
    .qy-filterbar    { padding: var(--qy-space-5) var(--qy-space-6); }

    /* Page-header (titel + primaire actieknop) breekt af i.p.v. te knellen. */
    .app-content-header .container-fluid > .d-flex { flex-wrap: wrap; gap: var(--qy-space-4); }
}

@media (max-width: 575.98px) {
    .qy-stat        { padding: var(--qy-space-6); }
    .qy-stat__value { font-size: 24px; }

    /* Filter-/kiezer-controls (o.a. de klant/project-picker) op eigen volle
       regel i.p.v. shrink-to-fit smal. */
    .qy-filterbar__group { flex: 1 1 100%; }
}
