body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
}

/* ==========================================================================
   Drawer section card — Premium iOS/macOS-inspired
   --------------------------------------------------------------------------
   Designprinciper:
   - Vit bakgrund med tunn (4% opacity) border = "raised" känsla mot drawer-bg
   - 14px radius matchar grid + dashboard-card för enhetlig rytm
   - 20px padding ger generös andningsmarginal (var 16px = klaustrofobiskt)
   - 14px margin-bottom = tydlig separation mellan sektioner
   - Inputs inuti får tonad (#dde2eb) border som STÅR UT mot vit kort-bg
   ========================================================================== */

.drawer-section {
    background: #f7f8fb;
    border: 1px solid rgba(15, 23, 42, 0.05);
    padding: 16px 18px;
    margin-bottom: 12px;
    border-radius: 12px;
}

.drawer-section:last-child {
    margin-bottom: 0;
}

/* Warning variant — amber tint för incomplete-state banners */
.drawer-section.drawer-section--warning {
    background: #fffaf0;
    border: 1px solid #fee9b8;
}

.drawer-section.drawer-section--warning .drawer-section-header > i {
    color: #b45309;
}

/* Info variant — blå-tonad för informationsbanners */
.drawer-section.drawer-section--info {
    background: #f0f6ff;
    border: 1px solid #d6e3fc;
}

.drawer-section.drawer-section--info .drawer-section-header > i {
    color: #6d27ff;
}

/* Empty-state inom drawer-section — Mjuk tonad sub-card för "ingen data"-state */
.drawer-section .drawer-section-empty {
    background: #f8f9fb;
    border: 1px dashed rgba(0, 0, 0, 0.08);
    border-radius: 10px;
    margin-top: 8px;
}

/* Empty-state inside a drawer-section: centered icon + title + subtitle.
   Used when a card has no data to show (e.g. no productkopplingar). */
.drawer-section-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 28px 16px 8px;
}

.drawer-section-empty > i {
    font-size: 40px;
    color: #b0b0b8;
    margin-bottom: 12px;
}

.drawer-section-empty .empty-title {
    font-weight: 600;
    font-size: 14px;
    color: #1d1d1f;
    letter-spacing: -0.01em;
    margin-bottom: 4px;
}

.drawer-section-empty .empty-subtitle {
    font-size: 12px;
    color: #86868b;
    line-height: 1.5;
    max-width: 360px;
}

.drawer-section-empty .empty-action {
    margin-top: 12px;
}

/* Drawer section header with icon */
.drawer-section-header {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin-bottom: 10px;
}

.drawer-section-header > i {
    font-size: 24px;
    color: #5b1fd9;
    flex-shrink: 0;
    margin-top: 2px;
}

.drawer-section-header .drawer-section-title {
    margin-bottom: 2px;
}

.drawer-section-title {
    font-weight: 600;
    font-size: 14px;
    color: #1d1d1f;
    text-transform: none;
    letter-spacing: -0.01em;
    margin-bottom: 12px;
    display: block;
}

.drawer-section-subtitle {
    font-size: 12px;
    color: #86868b;
    font-weight: 400;
    line-height: 1.4;
}

/* Legacy support for old title format */
.drawer-section-title i {
    font-size: 16px;
    color: #86868b;
}

.drawer-section-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 8px 0;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
    gap: 16px;
}

.drawer-section-row:last-child {
    border-bottom: none;
    padding-bottom: 0;
}

.drawer-section-row:first-child {
    padding-top: 0;
}

/* När det finns helper-text under labeln vill vi att hela texten
   stackas vertikalt och inte krockar med switchen till höger. */
.drawer-section-row--with-help {
    align-items: flex-start;
}

.drawer-section-row--with-help .form-check-switch,
.drawer-section-row--with-help .form-switch {
    margin-top: 2px;
    flex-shrink: 0;
}

.drawer-section-row-text {
    display: flex;
    flex-direction: column;
    gap: 3px;
    flex: 1;
    min-width: 0;
}

.drawer-section-label {
    font-size: 14px;
    font-weight: 400;
    color: #1d1d1f;
    letter-spacing: -0.01em;
}

/* Helper-text under en toggle-label. Förklarar VAD inställningen gör
   så admin inte behöver gissa. iOS-Settings-stil: smaller secondary text. */
.drawer-section-help {
    font-size: 12px;
    color: #6e6e73;
    line-height: 1.4;
    letter-spacing: -0.005em;
}

/* Pseudo-section "Avancerat" — kollapsibel detail/summary för sällan-använda toggles
   så de inte tar fokus från huvud-inställningarna. */
.drawer-advanced-toggle {
    margin-top: 14px;
}

.drawer-advanced-toggle > summary {
    cursor: pointer;
    list-style: none;
    padding: 10px 0;
    font-size: 13px;
    font-weight: 500;
    color: #6e6e73;
    display: flex;
    align-items: center;
    gap: 6px;
    user-select: none;
}

.drawer-advanced-toggle > summary::-webkit-details-marker {
    display: none;
}

.drawer-advanced-toggle > summary::before {
    content: '\203A';
    font-size: 16px;
    transition: transform 200ms ease;
}

.drawer-advanced-toggle[open] > summary::before {
    transform: rotate(90deg);
}

.drawer-advanced-toggle > summary:hover {
    color: #1d1d1f;
}

/* Compact form controls in drawers - iOS style */
.card-body .form-control,
.card-body .form-select {
    padding: 6px 10px;
    font-size: 13px;
    border-radius: 6px;
    border: 1px solid #d2d2d7;
    background-color: #fff;
    color: #1d1d1f;
    transition: border-color 0.15s ease;
}

.card-body .form-control:focus,
.card-body .form-select:focus {
    border-color: #5b1fd9;
    box-shadow: 0 0 0 2px rgba(109, 39, 255, 0.12);
}

.card-body .form-control::placeholder {
    color: #86868b;
}

.card-body textarea.form-control {
    padding: 8px 10px;
}

/* Disabled state for form controls */
.card-body .form-control:disabled,
.card-body .form-select:disabled,
.card-body .form-control[readonly] {
    background-color: #f5f5f7;
    color: #86868b;
    border-color: #e5e5e7;
    cursor: not-allowed;
    opacity: 0.8;
}

.card-body .form-label {
    font-size: 13px;
    margin-bottom: 6px;
    font-weight: 400;
    color: #1d1d1f;
    letter-spacing: -0.01em;
}

.card-body textarea.form-control {
    padding: 0.5rem 0.65rem;
}

/* Compact grid rows inside drawer sections */
.drawer-section .k-grid td,
.drawer-section .k-grid th {
    padding: 8px 10px;
    vertical-align: middle;
}

.drawer-section .k-grid .k-table-row {
    height: auto;
}

.drawer-section .k-grid .k-command-cell {
    padding: 4px 6px;
    vertical-align: middle;
}

/* OBS: Tidigare regel `.drawer-section .k-grid .k-command-cell .k-button
   { padding: 2px 4px; min-width: unset; min-height: unset }` har TAGITS BORT
   eftersom den krockade med icon-button-centreringen i sektion 5 av
   jobbs-ui.css. Den gjorde knapparna 32×28 (asymmetri) → ikonen blev
   visuellt off-center i kvadrat-knappen.

   All icon-button-storlek/centrering hanteras nu i jobbs-ui.css sektion 5
   ("ICON-BUTTON CENTRERING"). Lägg INTE tillbaka padding/height-overrides
   för dessa knappar här. */

/* Badge text colors */
.badge.bg-success,
.badge.bg-primary,
.badge.bg-danger,
.badge.bg-info {
    color: #fff !important;
}

/* Compact toolbar buttons in drawer sections */
.drawer-section .k-toolbar .btn {
    padding: 4px 10px;
    font-size: 12px;
    font-weight: 500;
}

.drawer-section .k-toolbar .btn-outline-secondary {
    border-color: #c4c4c4;
    color: #444;
}

.drawer-section .k-toolbar .btn-outline-secondary:hover {
    background-color: #f5f5f5;
    border-color: #aaa;
}

/* `.card-footer .btn`-block borttaget — gradient-bg, egen padding och radius (5px)
   som krockade med iOS-knappsystemet i jobbs-ui.css. Alla footer-knappar (Stäng + Spara)
   stylas nu enhetligt av `.jb-buttons .btn`-bas + `.jb-footer-btn`-klass där.

   `.card-footer .btn-primary`-block borttagen — hade lila gradient
   (linear-gradient(180deg, #7c5cff, #6b4ce6)) som gjorde Spara-knappen
   visuellt olik resten av admin. iOS-knappsystemet i jobbs-ui.css ersätter:
   alla footer-knappar är nu enhetligt grå med svart text via
   `.jb-buttons .card-footer .btn-primary` + `.jb-footer-btn`-klassen. */

.customCardInput {
    height: 3rem;
    width: 100%;
    box-sizing: border-box;
    background-color: #fff;
    border-radius: 3px;
    color: #000;
    border: 2px solid #0a0c0d;
    text-indent: 8px;
    font-size: 1.2rem;
    margin-bottom: 8px;
    padding: 10px;
}

.customCardInput input {
    border: 2px solid #0a0c0d;
    color: #FFFFFF;
    padding: 10px;
    font-size: 1.2rem;
}

.hover-scroll-overlay-y {
    overflow-y: auto !important;
    overflow-x: hidden !important;
    max-height: 100% !important;
}


.k-checkbox-md {
    width: 1.3rem !important;
    height: 1.3rem !important;
}

.k-button-text {
    font-weight: 600;
}

.k-column-title, .k-header {
    font-size: 94%;
    font-weight: 600;
}

#console {
    color: white;
    font-family: monospace;
    height: 600px;
    width: 100%;
    position:relative;
    background-color: black;
    margin: 0 auto;
}

#console .jqconsole {
    padding: 10px;
}

#console .jqconsole-cursor {
    background-color: gray;
}

#console .jqconsole-blurred .jqconsole-cursor {
    background-color: #666;
}

#console .jqconsole-prompt {
    color: #0d0;
}

#console .jqconsole-old-prompt {
    color: #0b0;
    font-weight: normal;
}

#console .jqconsole-input {
    color: #dd0;
}

#console .jqconsole-old-input {
    color: #bb0;
    font-weight: normal;
}

#console .jqconsole-output {
    color: white;
}

::placeholder { /* Chrome, Firefox, and Safari */
    color: #d3d3d3 !important;
    opacity: 1 !important; /* Firefox */
}

:-ms-input-placeholder { /* Internet Explorer 10-11 */
    color: #d3d3d3 !important;
}

::-ms-input-placeholder { /* Microsoft Edge */
    color: #d3d3d3 !important;
}


#blazor-error-ui {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

#blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 3.5rem;
    top: 0.5rem;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

.blazor-error-boundary::after {
    content: "Ett oväntat fel. Ladda om sidan.";
}

/* Lockswitch Grid Styling */

/* Grid container */
.ls-grid {
    margin: 0;
}

.ls-table {
    margin: 0;
    font-size: 13px;
}

.ls-table thead th {
    font-weight: 600;
    font-size: 12px;
    color: #5e6278;
    padding: 8px 10px;
    border-bottom: 1px solid #e4e6ef;
    background: transparent;
}

.ls-table tbody td {
    padding: 6px 10px;
    vertical-align: middle;
    border-bottom: 1px solid #f1f1f4;
}

.ls-table tbody tr:hover {
    background: #f9fafb;
}

.ls-table tbody tr.deleted {
    opacity: 0.4;
    text-decoration: line-through;
}

/* Port number */
.ls-port {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    background: #3699ff;
    color: #fff;
    font-weight: 600;
    font-size: 12px;
    border-radius: 4px;
}

.ls-port.blocked {
    background: #f1416c;
}

/* Status toggle */
.ls-status {
    display: inline-block;
    padding: 3px 8px;
    border-radius: 4px;
    font-weight: 500;
    font-size: 11px;
    cursor: pointer;
    transition: all 0.15s ease;
    user-select: none;
}

.ls-status.on {
    background: #e8fff3;
    color: #50cd89;
}

.ls-status.off {
    background: #f5f8fa;
    color: #a1a5b7;
}

.ls-status:hover {
    transform: scale(1.05);
}

/* Text input */
.ls-input {
    width: 100%;
    padding: 4px 8px;
    border: 1px solid transparent;
    border-radius: 4px;
    font-size: 13px;
    background: transparent;
    transition: all 0.15s ease;
}

.ls-input:hover {
    background: #f5f8fa;
}

.ls-input:focus {
    outline: none;
    border-color: #3699ff;
    background: #fff;
}

/* Time input */
.ls-time-input {
    display: flex;
    align-items: center;
    gap: 4px;
}

.ls-time-input input {
    width: 50px;
    padding: 4px 6px;
    border: 1px solid transparent;
    border-radius: 4px;
    font-size: 13px;
    text-align: right;
    background: transparent;
    transition: all 0.15s ease;
}

.ls-time-input input:hover {
    background: #f5f8fa;
}

.ls-time-input input:focus {
    outline: none;
    border-color: #3699ff;
    background: #fff;
}

.ls-time-input span {
    color: #a1a5b7;
    font-size: 12px;
}

/* Hide number input spinners */
.ls-time-input input::-webkit-outer-spin-button,
.ls-time-input input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.ls-time-input input[type=number] {
    -moz-appearance: textfield;
    appearance: textfield;
}

/* Relay selector buttons */
.ls-relay-select {
    display: flex;
    gap: 2px;
}

.ls-relay-btn {
    width: 22px;
    height: 22px;
    padding: 0;
    border: 1px solid #c9ced8;
    border-radius: 6px;
    background: #fff;
    color: #a1a5b7;
    font-size: 11px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.15s ease;
}

.ls-relay-btn:hover {
    border-color: #6d27ff;
    color: #6d27ff;
}

/* Aktiv state: fylld bakgrund + vit text så det syns tydligt mot inaktiva
   gråa knappar. Tidigare subtil tint (#e8fff3 / #fff5f8) blev visuellt
   svår att skilja från inaktiv vit bakgrund vid snabb scanning av griden. */
.ls-relay-btn.active.trigger {
    background: #50cd89;
    border-color: #50cd89;
    color: #fff;
    font-weight: 600;
}

.ls-relay-btn.active.block {
    background: #f1416c;
    border-color: #f1416c;
    color: #fff;
    font-weight: 600;
}

/* Checkbox */
.ls-checkbox {
    width: 16px;
    height: 16px;
    cursor: pointer;
    accent-color: #3699ff;
}

/* Delete button */
.ls-delete {
    padding: 4px 6px;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: #a1a5b7;
    cursor: pointer;
    transition: all 0.15s ease;
}

.ls-delete:hover {
    background: #fff0ef;
    color: #ff3b30;
}

/* Section header badge */
.section-header-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    background: #f5f8fa;
    color: #7e8299;
    font-weight: 600;
    font-size: 11px;
    border-radius: 10px;
    margin-left: 8px;
}

.section-header-badge.configured {
    background: #e8fff3;
    color: #50cd89;
}

/* ==========================================================================
   Dashboard Enterprise Styling
   iOS/Apple-inspired design system for KPI dashboards
   ========================================================================== */

/* ==========================================================================
   Dashboard KPI Cards — iOS/macOS-stil
   --------------------------------------------------------------------------
   Mönstret: vit card med soft shadow, tonad accent-färg på ikon + värdesiffra.
   Tidigare hade vi mättade gradient-backgrunds som skrek "Metronic 2017".
   Nu känns det som en modern fintech-dashboard (Linear/Notion/Stripe).

   Färgvarianterna ändrar bara accent-färg och ikon-bg, inte hela kortet.
   Detta gör dashboarden lugn och scanbar utan färgbrus.
   ========================================================================== */

.dashboard-card {
    background-color: #ffffff !important;
    background-image: none !important;
    border-radius: 14px;
    border: 1px solid rgba(0, 0, 0, 0.06);
    box-shadow:
        0 1px 2px rgba(15, 23, 42, 0.03),
        0 1px 3px rgba(15, 23, 42, 0.04);
    min-height: 160px;
    transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
    text-decoration: none;
    overflow: hidden;
    position: relative !important;
}

.dashboard-card:hover {
    transform: translateY(-1px);
    border-color: rgba(109, 39, 255, 0.18);
    box-shadow:
        0 4px 12px rgba(15, 23, 42, 0.06),
        0 1px 3px rgba(15, 23, 42, 0.05);
    text-decoration: none;
}

.dashboard-card:active {
    transform: translateY(0);
}

/* KPI value — stor, mörk, tabular numbers */
.dashboard-kpi-value {
    font-size: 1.85rem;
    font-weight: 700;
    letter-spacing: -0.025em;
    line-height: 1.1;
    margin-bottom: 4px;
    color: #1c1e22 !important;
    font-feature-settings: "tnum" 1;
}

.dashboard-kpi-label {
    font-size: 0.82rem;
    font-weight: 500;
    letter-spacing: -0.005em;
    color: #6b7280 !important;
}

/* Stor ikon-badge i hörnet — accent-tonad istället för glow-i-mörker */
.dashboard-card .dashboard-card-icon {
    position: absolute !important;
    top: 18px !important;
    right: 18px !important;
    width: 40px !important;
    height: 40px !important;
    font-size: 22px !important;
    line-height: 1;
    z-index: 1;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    border-radius: 10px !important;
    opacity: 1 !important;
}

/* Färgvarianter — endast accent (ikon-bg + KPI-värdesiffra) ändras */
.dashboard-card-primary .dashboard-card-icon {
    background: #eef1f6;
    color: #3b4554;
}

.dashboard-card-danger .dashboard-card-icon {
    background: #fde0dd;
    color: #b42318;
}

.dashboard-card-danger-alt .dashboard-card-icon {
    background: #fee4e2;
    color: #c81e1e;
}

.dashboard-card-warning .dashboard-card-icon {
    background: #fcefd6;
    color: #b45309;
}

.dashboard-card-purple .dashboard-card-icon {
    background: #ece9fc;
    color: #6941c6;
}

.dashboard-card-success .dashboard-card-icon {
    background: #d6f0df;
    color: #1f6b40;
}

.dashboard-card-info .dashboard-card-icon {
    background: #dde9fc;
    color: #1d4f8c;
}

/* Override Metronic-text-vit → mörk text på vita kort */
.dashboard-card .text-white,
.dashboard-card .dashboard-kpi-value.text-white,
.dashboard-card .dashboard-kpi-label.text-white,
.dashboard-card .text-gray-400 {
    color: #6b7280 !important;
}

.dashboard-card .dashboard-kpi-value.text-white {
    color: #1c1e22 !important;
}

/* Progress-bar (säljkort med tid på dygnet) — använd accent istället för success-grön */
.dashboard-card .bg-gray-700 {
    background-color: #eef0f3 !important;
}

.dashboard-card .bg-success {
    background-color: #1f6b40 !important;
}

/* Badges i kort (månad-namn, år etc) — soft tinted istället för full-färg */
.dashboard-card .badge.badge-light,
.dashboard-card .badge.badge-light-primary {
    background-color: rgba(109, 39, 255, 0.08) !important;
    color: #6d27ff !important;
    font-weight: 600 !important;
    border-radius: 6px !important;
    padding: 4px 9px !important;
    font-size: 12px !important;
    border: 1px solid rgba(109, 39, 255, 0.15) !important;
}

.dashboard-card .badge.badge-light i,
.dashboard-card .badge.badge-light-primary i {
    color: #6d27ff !important;
}

/* Ikoner i body-rad får mjuk accent-färg i stället för text-white */
.dashboard-card .card-body i.ph-duotone {
    color: #6b7280 !important;
}

/* Dashboard Chart Cards */
.dashboard-chart-card {
    border-radius: 16px;
    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.06);
    background: #ffffff;
    border: 1px solid rgba(0, 0, 0, 0.04);
    display: flex;
    flex-direction: column;
}

.dashboard-chart-card .card-header {
    border-bottom: none;
    padding-bottom: 0;
    flex-shrink: 0;
}

.dashboard-chart-card .card-body {
    padding: 20px 24px 24px 24px;
    flex: 1;
    min-height: 300px;
}

.dashboard-chart-card .card-body .k-chart {
    height: 100% !important;
    min-height: 250px;
}

/* Dashboard Table Styling */
.dashboard-table {
    margin: 0;
}

.dashboard-table thead th {
    border-bottom: 1px solid #f1f3f5;
    padding: 12px 8px;
    font-size: 0.8rem;
    font-weight: 600;
    color: #6c757d;
    text-transform: uppercase;
    letter-spacing: 0.02em;
}

.dashboard-table tbody tr {
    transition: background-color 0.15s ease;
}

.dashboard-table tbody tr:hover {
    background-color: #f8f9fa;
}

.dashboard-table tbody tr.cursor-pointer {
    cursor: pointer;
}

.dashboard-table tbody tr.cursor-pointer:hover {
    background-color: #e9ecef;
}

/* Utility class */
.cursor-pointer {
    cursor: pointer;
}

.dashboard-table tbody td {
    padding: 14px 8px;
    border-bottom: 1px solid #f1f3f5;
    vertical-align: middle;
}

.dashboard-table tbody tr:last-child td {
    border-bottom: none;
}

/* Dashboard Status Badges - Pill design */
.dashboard-badge {
    display: inline-flex;
    align-items: center;
    padding: 5px 12px;
    border-radius: 20px;
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.01em;
}

.dashboard-badge-success {
    background-color: #d4edda;
    color: #155724;
}

.dashboard-badge-warning {
    background-color: #fff3cd;
    color: #856404;
}

.dashboard-badge-danger {
    background-color: #f8d7da;
    color: #721c24;
}

.dashboard-badge-info {
    background-color: #d1ecf1;
    color: #0c5460;
}

/* Responsive adjustments for dashboard cards */
@media (max-width: 1400px) {
    .dashboard-kpi-value {
        font-size: 1.75rem;
    }

    .dashboard-card {
        min-height: 160px;
    }
}

@media (max-width: 768px) {
    .dashboard-card {
        min-height: 140px;
        border-radius: 12px;
    }

    .dashboard-kpi-value {
        font-size: 1.5rem;
    }

    .dashboard-chart-card {
        border-radius: 12px;
    }
}

/* ============================================================
   STATISTIK (2026-05-16) — sektioner och topp-N rank-cards
   för /sales/statistics. Matchar dashboard-card-paletten
   (iOS-tinted) men i mindre, mer "list"-vänligt format.
   ============================================================ */

/* Sektionsrubrik-ikon: rund tinted badge med phosphor-ikon i mitten. */
.jb-stat-section-icon {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    background: linear-gradient(135deg, #eef1f6 0%, #e5e9f0 100%);
    color: #3b4554;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    flex-shrink: 0;
}

/* Topp-N kort (kund/artikel) — kompakt, klickbart, med rang-badge. */
.jb-stat-rank-card {
    position: relative;
    background: #fafbfc;
    border: 1px solid rgba(0, 0, 0, 0.05);
    border-radius: 12px;
    padding: 16px 14px 14px;
    height: 100%;
    transition: transform 120ms ease, border-color 120ms ease, box-shadow 120ms ease;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

.jb-stat-rank-card:hover {
    transform: translateY(-1px);
    border-color: rgba(109, 39, 255, 0.25);
    box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
    background: #ffffff;
}

.jb-stat-rank-badge {
    position: absolute;
    top: 10px;
    right: 12px;
    min-width: 22px;
    height: 22px;
    border-radius: 999px;
    background: rgba(109, 39, 255, 0.12);
    color: #4338ca;
    font-size: 11px;
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 7px;
    letter-spacing: 0.02em;
}

.jb-stat-rank-icon {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    background: #ece9fc;
    color: #6941c6;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    margin-bottom: 10px;
}

.jb-stat-rank-value {
    font-size: 1.25rem;
    font-weight: 700;
    color: #1c1e22;
    letter-spacing: -0.02em;
    line-height: 1.1;
    margin-bottom: 4px;
    font-variant-numeric: tabular-nums;
}

.jb-stat-rank-label {
    font-size: 13px;
    color: #6b7280;
    font-weight: 500;
    line-height: 1.3;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    word-break: break-word;
    max-width: 100%;
}

/* Phosphor-ikoner ska respektera duotone-färgen där den är satt på <i>. */
.jb-stat-section-icon i.ph-duotone,
.jb-stat-rank-icon i.ph-duotone {
    line-height: 1;
}

/* ============================================================
   ORIGIN-TYPE-TOGGLE (2026-05-17) — i Skapa bokning-drawer.
   Visas för User-bokningar så intern personal kan välja mellan
   resurs-blockering och produkt-bokning. Två stora kort med
   ikon + titel + subtitel, klick fyller hela kortet.
   ============================================================ */
.jb-origin-toggle {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
}

.jb-origin-toggle-btn {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: #ffffff;
    border: 1px solid #d8dde4;
    border-radius: 12px;
    cursor: pointer;
    transition: border-color 120ms ease, box-shadow 120ms ease, background 120ms ease;
    text-align: left;
    font-family: inherit;
    color: #1f2937;
}

.jb-origin-toggle-btn:hover {
    border-color: #b8c0cb;
    background: #fafbfc;
}

.jb-origin-toggle-btn--active {
    border-color: #6d27ff;
    background: #eef5ff;
    box-shadow: 0 0 0 3px rgba(109, 39, 255, 0.15);
}

.jb-origin-toggle-btn i.ph-duotone {
    font-size: 22px;
    color: #6b7280;
    flex-shrink: 0;
}

.jb-origin-toggle-btn--active i.ph-duotone {
    color: #6d27ff;
}

.jb-origin-toggle-text {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
}

.jb-origin-toggle-title {
    font-size: 14px;
    font-weight: 600;
    line-height: 1.2;
}

.jb-origin-toggle-subtitle {
    font-size: 12px;
    color: #6b7280;
    line-height: 1.2;
}

/* Topp-N-sektion (rank-cards) — kompakt variant av dashboard-chart-card. Den
   generiska .dashboard-chart-card har min-height: 300px på card-body för att
   diagram inte ska kollapsa, men för rank-card-listor (~120px innehåll) blir
   det 180px tom whitespace. Override så card-body bara tar plats den behöver. */
.jb-stat-rank-section .card-body {
    min-height: 0 !important;
    padding-bottom: 18px !important;
}

/* Lika höjd på alla rank-cards (5 i bredd) så de linjerar perfekt
   även om en kund/artikel-titel wrap:ar till 2 rader. */
.jb-stat-rank-card {
    min-height: 132px;
}

/* ============================================================
   TRANSAKTIONER (2026-05-16) — drawer för enskild transaktion.
   Header-card med status+total, KPI-rad, definition-list-card,
   moms-tabell. Matchar iOS-paletten.
   ============================================================ */

/* Header-card: stort status + datum vänster, total höger. Ger snabb scan. */
.jb-receipt-header {
    background: linear-gradient(135deg, #fbfcfe 0%, #f4f6fa 100%);
    border: 1px solid #e5e9f0;
    border-radius: 14px;
    padding: 16px 20px;
}

.jb-receipt-header-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}

.jb-receipt-header-status {
    display: flex;
    align-items: center;
    gap: 8px;
}

.jb-receipt-header-total {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
}

.jb-receipt-header-total-label {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #6b7280;
    font-weight: 600;
}

.jb-receipt-header-total-value {
    font-size: 1.7rem;
    font-weight: 700;
    color: #1c1e22;
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
    line-height: 1.1;
}

.jb-receipt-header-meta {
    margin-top: 10px;
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    font-size: 13px;
    color: #4b5563;
}

.jb-receipt-header-meta span {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.jb-receipt-header-meta i.ph-duotone {
    color: #6b7280;
    font-size: 16px;
}

/* KPI-card i drawer: kompakt variant av dashboard-card för att passa
   inom drawer-bredden (4 i rad). Vit bg, tintad ikon-pill, värde + label. */
.jb-receipt-kpi {
    background: #ffffff;
    border: 1px solid #e5e9f0;
    border-radius: 12px;
    padding: 14px 16px 12px;
    height: 100%;
    position: relative;
    overflow: hidden;
}

.jb-receipt-kpi-icon {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    margin-bottom: 8px;
}

.jb-receipt-kpi-icon--info { background: #dde9fc; color: #1d4f8c; }
.jb-receipt-kpi-icon--success { background: #d6f0df; color: #1f6b40; }
.jb-receipt-kpi-icon--warn { background: #fdf2c7; color: #856300; }
.jb-receipt-kpi-icon--danger { background: #fde0dd; color: #a82318; }

.jb-receipt-kpi-value {
    font-size: 1.25rem;
    font-weight: 700;
    color: #1c1e22;
    letter-spacing: -0.02em;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
    margin-bottom: 2px;
}

.jb-receipt-kpi-label {
    font-size: 13px;
    color: #6b7280;
    font-weight: 500;
    line-height: 1.3;
}

/* Detalj-card: vit bakgrund, rubrik högst upp, definition-grid i 2 kolumner.
   Ersätter de gamla disabled-input-fälten som var visuellt tunga. */
.jb-receipt-detail-card {
    background: #ffffff;
    border: 1px solid #e5e9f0;
    border-radius: 12px;
    overflow: hidden;
}

.jb-receipt-detail-card-header {
    padding: 12px 18px;
    background: #fafbfc;
    border-bottom: 1px solid #eef0f4;
    font-weight: 600;
    color: #1f2937;
    font-size: 13px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.jb-receipt-detail-card-header i.ph-duotone {
    color: #6b7280;
    font-size: 17px;
}

.jb-receipt-detail-card--settlement .jb-receipt-detail-card-header {
    background: #f4f8ff;
    border-bottom-color: #d8e4fa;
    color: #1d4f8c;
}

.jb-receipt-detail-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 0;
}

.jb-receipt-detail-item {
    padding: 12px 18px;
    border-bottom: 1px solid #f1f3f7;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.jb-receipt-detail-item:nth-last-child(-n+2) {
    border-bottom: none;
}

.jb-receipt-detail-item:nth-child(odd) {
    border-right: 1px solid #f1f3f7;
}

.jb-receipt-detail-label {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #6b7280;
    font-weight: 600;
}

.jb-receipt-detail-value {
    font-size: 14px;
    color: #1c1e22;
    font-weight: 500;
    word-break: break-word;
}

@media (max-width: 768px) {
    .jb-receipt-detail-grid {
        grid-template-columns: 1fr;
    }
    .jb-receipt-detail-item:nth-child(odd) {
        border-right: none;
    }
    .jb-receipt-detail-item:nth-last-child(2) {
        border-bottom: 1px solid #f1f3f7;
    }
}

/* Moms-tabell — ren, tabular-nums, högerjusterade siffror. Wrapper-padding
   ger luft mellan kortets kant och tabellens rader (tidigare gick texten
   ända ut i kanten). */
.jb-vat-table-wrap {
    padding: 4px 8px 8px;
}

.jb-vat-table thead th {
    background: transparent;
    border-bottom: 1px solid #eef0f4 !important;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: #6b7280;
    font-weight: 600;
    padding: 12px 12px;
}

/* !important behövs eftersom Bootstrap .table > :not(caption) > * > * sätter
   padding-shorthand som vinner på specificitet i vissa rendering-paths. */
.jb-vat-table thead th:first-child,
.jb-vat-table tbody td:first-child,
.jb-vat-table tfoot td:first-child {
    padding-left: 18px !important;
}

.jb-vat-table thead th:last-child,
.jb-vat-table tbody td:last-child,
.jb-vat-table tfoot td:last-child {
    padding-right: 18px !important;
}

.jb-vat-table tbody td {
    padding: 11px 12px;
    border-bottom: 1px solid #f4f5f8;
    font-variant-numeric: tabular-nums;
    color: #1f2937;
}

.jb-vat-table tbody tr:last-child td {
    border-bottom: none;
}

.jb-vat-table tfoot td {
    padding: 12px 12px;
    border-top: 2px solid #e5e9f0;
    background: #fafbfc;
    color: #1c1e22;
    font-variant-numeric: tabular-nums;
}

/* Grid-footer-sum: matchande typografi för aggregat-rader i Telerik-grids. */
.jb-grid-footer-sum {
    font-size: 13px;
    font-weight: 600;
    text-align: right;
    color: #1f2937;
    font-variant-numeric: tabular-nums;
}

/* ============================================================
   RETURN/ÅTERBETALNING (2026-05-16) — summary-rad i _Refund-drawer.
   Visar kvittots total / att återbetala / återstår — så admin alltid
   ser den ekonomiska balansen.
   ============================================================ */
.jb-refund-summary {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 0;
    background: #ffffff;
    border: 1px solid #e5e9f0;
    border-radius: 12px;
    overflow: hidden;
}

.jb-refund-summary-item {
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    gap: 4px;
    border-right: 1px solid #f1f3f7;
}

.jb-refund-summary-item:last-child {
    border-right: none;
}

.jb-refund-summary-label {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #6b7280;
    font-weight: 600;
}

.jb-refund-summary-value {
    font-size: 1.15rem;
    font-weight: 700;
    color: #1c1e22;
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
}

.jb-refund-summary-value--accent {
    color: #a82318;
}

@media (max-width: 768px) {
    .jb-refund-summary {
        grid-template-columns: 1fr;
    }
    .jb-refund-summary-item {
        border-right: none;
        border-bottom: 1px solid #f1f3f7;
    }
    .jb-refund-summary-item:last-child {
        border-bottom: none;
    }
}

/* ============================================================
   KLIPPKORT (2026-05-16) — progress-bar och besöks-historik
   för multi-visit bookings i admin (_ResourceBookingUpdate).
   ============================================================ */
/* ============================================================
   Check-in-historik (2026-05-18)
   Visas i Status-sektionen i _ResourceBookingUpdate.razor.
   Stilen speglar .jb-clipcard-visits för visuell konsistens
   med klippkort-besökslistan ovanför.
   ============================================================ */
.jb-checkin-log {
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-height: 220px;
    overflow-y: auto;
    border: 1px solid #efeff2;
    border-radius: 8px;
    padding: 8px;
    background: #fafafb;
}
.jb-checkin-log-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 8px 6px;
    border-bottom: 1px solid #f3f3f5;
}
.jb-checkin-log-row:last-child { border-bottom: none; }
.jb-checkin-log-row > i {
    font-size: 18px;
    color: #6e6e73;
    flex-shrink: 0;
    margin-top: 2px;
}
.jb-checkin-log-text { flex: 1; min-width: 0; }
.jb-checkin-log-when {
    font-size: 0.9rem;
    font-weight: 600;
    color: #1f2937;
    line-height: 1.2;
}
.jb-checkin-log-meta {
    font-size: 0.8rem;
    color: #6e6e73;
    margin-top: 2px;
    line-height: 1.4;
    word-break: break-word;
}

.jb-clipcard-progress {
    height: 8px;
    background: #efeff2;
    border-radius: 4px;
    overflow: hidden;
}
.jb-clipcard-progress-bar {
    height: 100%;
    background: linear-gradient(90deg, #34c759 0%, #6d27ff 100%);
    border-radius: 4px;
    transition: width 300ms cubic-bezier(0.34, 1.56, 0.64, 1);
}
.jb-clipcard-visits {
    display: flex;
    flex-direction: column;
    gap: 4px;
    max-height: 280px;
    overflow-y: auto;
    border: 1px solid #efeff2;
    border-radius: 8px;
    padding: 8px;
    background: #fafafb;
}
.jb-clipcard-visit-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 6px 10px;
    background: #ffffff;
    border-radius: 6px;
    font-size: 0.85rem;
}
.jb-clipcard-visit-no {
    font-weight: 700;
    color: #6e6e73;
    min-width: 28px;
}
.jb-clipcard-visit-date {
    font-weight: 500;
    color: #1d1d1f;
}
/* TabControl-toolbar (drawer-header) — knapparna som "Skicka påminnelse",
   "Duplicera", "Återbetala", "Ta bort" m.m. Tidigare ramade de in titeln
   och wrap:ade naivt — nu får de en egen rad med flex-wrap så de alltid
   linjerar prydligt oavsett antal eller bredd. (2026-05-16) */
/*
 * Toolbar i TabControl-header (Händelselogg / Skicka kvitto / Återbetala etc).
 *
 * 2026-05-16: Användarfeedback — knapparna ligger för nära flikarna under
 * och blandar ihop sig visuellt. Lägg på subtil tonad bakgrund + tunn ram +
 * border-radius så toolbaren känns som ett separat "actions"-kort, tydligt
 * skilt från nav-tabs (Översikt/Artikelrader/Moms-uppdelning) som följer.
 */
.jb-tabcontrol-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    padding: 10px 12px;
    background: #f7f8fa;
    border: 1px solid #e5e9f0;
    border-radius: 10px;
    margin-bottom: 14px;
}

.jb-tabcontrol-toolbar > .k-button {
    background: #ffffff;
    border-color: #c2c9d2;            /* mörkare kant än förr (#d8dde4) — vita knappar
                                          syntes knappt mot den ljusgrå toolbar-bakgrunden */
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.10); /* subtil lyft så de läses som knappar */
    color: #1f2937;
    font-weight: 600;
}

.jb-tabcontrol-toolbar > .k-button:hover {
    background: #f3f4f6;              /* lätt ton på hover så hover-läget syns tydligt */
    border-color: #94a3b8;
    box-shadow: 0 2px 6px rgba(15, 23, 42, 0.14);
}

/* Klippkort admin-actions — Kreditera/Återställ/Ändra quota (2026-05-16).
   `btn-light` försvann mot drawer-bg (#f5f5f7) — dessa knappar har synlig
   border + subtil skugga så de tydligt avgränsas från sektionen. */
.jb-clipcard-actions {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 10px;
}

.jb-clipcard-action-btn {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 10px 14px !important;
    background: #ffffff !important;
    border: 1px solid #d2d2d7 !important;
    border-radius: 10px !important;
    color: #1d1d1f !important;
    font-size: 0.88rem !important;
    font-weight: 500 !important;
    cursor: pointer;
    height: auto !important;
    line-height: 1.4 !important;
    transition: background 120ms ease, border-color 120ms ease, transform 80ms ease, box-shadow 120ms ease;
    box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
    -webkit-tap-highlight-color: transparent;
    width: 100%;
}

.jb-clipcard-action-btn:hover:not(:disabled) {
    background: #fafafb !important;
    border-color: #b0b0b8 !important;
    box-shadow: 0 2px 4px rgba(16, 24, 40, 0.06);
}

.jb-clipcard-action-btn:active:not(:disabled) {
    transform: scale(0.985);
}

.jb-clipcard-action-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.jb-clipcard-action-btn i {
    font-size: 1rem;
    color: #6e6e73;
}

/* Ändra-quota-prompt — vita knappar med tydlig kontrast mot grå inset-panel.
   `btn-primary` (Bootstrap default-blå) saknade synbarhet och rätt iOS-känsla. */
.jb-clipcard-prompt {
    background: #f0f0f3;
    border: 1px solid #e0e0e5;
    border-radius: 10px;
    padding: 14px 16px;
}

/* Prompt-knapparna åsidosätter Bootstrap/Keenicons default-styling som
   råkar applicera grå bakgrund på button:not(:disabled). !important
   gör att vår styling vinner mot tredjeparts CSS-kaskaden. */
.jb-clipcard-prompt-btn {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    padding: 8px 18px !important;
    background: #ffffff !important;
    border: 1px solid #d2d2d7 !important;
    border-radius: 8px !important;
    color: #1d1d1f !important;
    font-size: 0.85rem !important;
    font-weight: 500 !important;
    cursor: pointer;
    height: auto !important;
    line-height: 1.4 !important;
    transition: background 120ms ease, transform 80ms ease;
    -webkit-tap-highlight-color: transparent;
}

.jb-clipcard-prompt-btn:hover {
    background: #fafafb !important;
}

.jb-clipcard-prompt-btn:active {
    transform: scale(0.97);
}

.jb-clipcard-prompt-btn--primary,
.jb-clipcard-prompt-btn.jb-clipcard-prompt-btn--primary {
    background: #6d27ff !important;
    border-color: #6d27ff !important;
    color: #ffffff !important;
    box-shadow: 0 1px 2px rgba(109, 39, 255, 0.18);
}

.jb-clipcard-prompt-btn--primary:hover,
.jb-clipcard-prompt-btn.jb-clipcard-prompt-btn--primary:hover {
    background: #0066d6 !important;
    border-color: #0066d6 !important;
}

.jb-clipcard-visit-times {
    color: #6e6e73;
    font-size: 0.78rem;
    margin-left: auto;
}


/* ============================================================
   LOGGSIDAN (/Logs) — 2026-07-22
   Ligger HÄR och inte i en .razor.css: Jobbs.Server har ingen scoped-CSS-bundle
   inkopplad. Elementen får visserligen sitt b-xxxxx-attribut, men ingen
   {AssemblyName}.styles.css laddas i _Host, så reglerna nådde aldrig sidan —
   korten renderades helt ostilade. Kontrollerat i webbläsaren: regeln fanns inte
   i någon laddad stilmall. Alla andra komponenter här stylas via global.css.
   ============================================================ */

/* ── Nyckeltalskort ───────────────────────────────────────── */
.jb-log-stat {
    background: #fafbfc;
    border: 1px solid rgba(0, 0, 0, 0.05);
    border-radius: 12px;
    padding: 16px 14px 14px;
    height: 100%;
    min-height: 118px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    transition: transform 120ms ease, border-color 120ms ease, box-shadow 120ms ease;
}

.jb-log-stat:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
    background: #ffffff;
}

.jb-log-stat-icon {
    width: 40px;
    height: 40px;
    border-radius: 11px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 12px;
    flex: 0 0 auto;
}

/* Ikonstorleken sätts på <i>, inte på plattan: Phosphor är ett IKONTYPSNITT, så
   glyfen styrs av font-size. Ärvde den sidans 12px blev ikonen ett grus i ett
   tomt kort — precis det som såg trasigt ut innan. */
.jb-log-stat-icon i {
    font-size: 22px;
    line-height: 1;
}

.jb-log-stat-value {
    font-size: 28px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: -0.02em;
    color: #181c32;
}

.jb-log-stat-label {
    margin-top: 2px;
    font-size: 13px;
    font-weight: 600;
    color: #7e8299;
}

.jb-log-stat--neutral .jb-log-stat-icon { background: #ece9fc; color: #6941c6; }
.jb-log-stat--danger  .jb-log-stat-icon { background: rgba(255, 59, 48, 0.10); color: #d92d20; }
.jb-log-stat--warning .jb-log-stat-icon { background: rgba(255, 159, 10, 0.14); color: #b54708; }

.jb-log-stat--danger .jb-log-stat-value { color: #d92d20; }
/* En nolla i rött läser som ett larm fast den betyder motsatsen. */
.jb-log-stat--danger .jb-log-stat-value.is-zero { color: #181c32; }

/* ── Anropsstack i fel-drawern ────────────────────────────── */
.jb-stack {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.78rem;
    line-height: 1.45;
    max-height: 420px;
    overflow: auto;
    border: 1px solid #e4e6ef;
    border-radius: 0.475rem;
    padding: 0.5rem 0.25rem;
}

.jb-stack-frame {
    padding: 3px 8px;
    border-left: 3px solid transparent;
    color: #7e8299;
    overflow-wrap: anywhere;
}

/* Egen kod framhävd: en .NET-stack är 30+ ramar där bara ett fåtal är våra. */
.jb-stack-frame--ours {
    color: #181c32;
    border-left-color: #6d27ff;
    background-color: rgba(109, 39, 255, 0.04);
}

.jb-stack-method { font-weight: 500; }
.jb-stack-file { color: #a1a5b7; font-size: 0.72rem; }
.jb-stack-frame--ours .jb-stack-file { color: #6d27ff; }

/* ============================================================
   JOBBS AI (/system/ai) — 2026-09-30
   Systemsidan för Jobbs AI. Nyckeltalen återanvänder .jb-log-stat
   ovan; här bara verktygsraden, notisen, tabellerna och staplarna.
   Staplarna är dekoration bredvid talet (aria-hidden) — talet står
   alltid som text, så färgen bär aldrig betydelsen ensam.
   ============================================================ */
.jb-ai-insights { --jb-ai-accent: #6941c6; --jb-ai-good: #067647; --jb-ai-bad: #d92d20; --jb-ai-track: #eef0f4; }

.jb-ai-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
    margin-bottom: 16px;
}

.jb-ai-period {
    display: inline-flex;
    padding: 3px;
    border-radius: 10px;
    background: var(--jb-ai-track);
}

.jb-ai-period-btn {
    border: 0;
    background: transparent;
    color: #4b5563;
    font-weight: 600;
    font-size: 13px;
    padding: 6px 14px;
    border-radius: 8px;
    cursor: pointer;
}

.jb-ai-period-btn.is-active {
    background: #ffffff;
    color: #181c32;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12);
}

.jb-ai-period-btn:focus-visible,
.jb-ai-gap summary:focus-visible {
    outline: 2px solid var(--jb-ai-accent);
    outline-offset: 2px;
}

.jb-ai-period-btn:disabled { cursor: progress; opacity: 0.7; }

.jb-ai-muted { color: #5e6278; font-size: 13px; }

.jb-ai-notice {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    background: #f4f1fd;
    border: 1px solid #e2dafb;
    color: #3b2a73;
    border-radius: 10px;
    padding: 12px 14px;
    font-size: 13px;
    line-height: 1.5;
    margin-bottom: 20px;
}

.jb-ai-notice i { font-size: 20px; color: var(--jb-ai-accent); flex: 0 0 auto; margin-top: 1px; }

.jb-ai-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    min-height: 240px;
    color: #5e6278;
}

.jb-ai-stat-detail { margin-top: 2px; font-size: 12px; color: #5e6278; }

.jb-ai-heading { font-size: 15px; font-weight: 700; margin: 20px 0 8px; color: #181c32; }

.jb-ai-empty {
    padding: 28px 16px;
    text-align: center;
    color: #5e6278;
    border: 1px dashed #e4e6ef;
    border-radius: 10px;
    margin-top: 12px;
}

.jb-ai-table { font-size: 13px; margin-bottom: 0; }
.jb-ai-table th { font-weight: 600; color: #5e6278; white-space: nowrap; border-bottom-width: 1px; }
.jb-ai-table td { vertical-align: middle; }
.jb-ai-num { font-variant-numeric: tabular-nums; white-space: nowrap; }
.jb-ai-bad { color: var(--jb-ai-bad); font-weight: 600; }
.jb-ai-col-bar { min-width: 180px; }

.jb-ai-chip {
    display: inline-block;
    margin: 2px 4px 2px 0;
    padding: 1px 8px;
    border-radius: 999px;
    background: var(--jb-ai-track);
    color: #3f4254;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 12px;
    overflow-wrap: anywhere;
}

.jb-ai-code { font-size: 12px; color: #3f4254; background: transparent; padding: 0; }

.jb-ai-gap { max-width: 520px; overflow-wrap: anywhere; }
.jb-ai-gap details { margin-top: 4px; }
.jb-ai-gap summary { cursor: pointer; color: #5e6278; font-size: 12px; }
.jb-ai-gap ul { margin: 4px 0 0; padding-left: 18px; color: #5e6278; }

.jb-ai-barcell { display: flex; align-items: center; gap: 10px; }

.jb-ai-bar,
.jb-ai-rating {
    flex: 1 1 auto;
    min-width: 80px;
    max-width: 220px;
    height: 8px;
    border-radius: 4px;
    background: var(--jb-ai-track);
    overflow: hidden;
    display: flex;
    gap: 2px;
}

.jb-ai-bar > span { display: block; height: 100%; border-radius: 4px; background: var(--jb-ai-accent); }
.jb-ai-rating-good { display: block; height: 100%; background: var(--jb-ai-good); }
.jb-ai-rating-bad { display: block; height: 100%; background: var(--jb-ai-bad); }

@media (max-width: 575.98px) {
    .jb-ai-col-bar { min-width: 140px; }
    .jb-ai-bar, .jb-ai-rating { min-width: 56px; }
}
