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: 20px;
    margin-bottom: 14px;
    border-radius: 14px;
}

.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: #1d4ed8;
}

/* 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: 12px;
    margin-bottom: 14px;
}

.drawer-section-header > i {
    font-size: 24px;
    color: #0071e3;
    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: 12px 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: #0071e3;
    box-shadow: 0 0 0 2px rgba(0, 113, 227, 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: "An error has occurred."
}

/* 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 #e4e6ef;
    border-radius: 3px;
    background: #fff;
    color: #a1a5b7;
    font-size: 11px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.15s ease;
}

.ls-relay-btn:hover {
    border-color: #3699ff;
    color: #3699ff;
}

/* 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: 4px;
    background: transparent;
    color: #a1a5b7;
    cursor: pointer;
    transition: all 0.15s ease;
}

.ls-delete:hover {
    background: #fff5f8;
    color: #f1416c;
}

/* 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(29, 78, 216, 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(29, 78, 216, 0.08) !important;
    color: #1d4ed8 !important;
    font-weight: 600 !important;
    border-radius: 6px !important;
    padding: 4px 9px !important;
    font-size: 11.5px !important;
    border: 1px solid rgba(29, 78, 216, 0.15) !important;
}

.dashboard-card .badge.badge-light i,
.dashboard-card .badge.badge-light-primary i {
    color: #1d4ed8 !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(91, 108, 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(91, 108, 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: 12.5px;
    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: #5b6cff;
    background: #f4f6ff;
    box-shadow: 0 0 0 3px rgba(91, 108, 255, 0.12);
}

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

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

.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: 11.5px;
    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: 12.5px;
    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: 13.5px;
    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: 11.5px;
    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: 12.5px;
    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%, #0a84ff 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: #d8dde4;
}

.jb-tabcontrol-toolbar > .k-button:hover {
    background: #ffffff;
    border-color: #b8c0cb;
    box-shadow: 0 1px 3px rgba(15, 23, 42, 0.06);
}

/* 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: #0a84ff !important;
    border-color: #0a84ff !important;
    color: #ffffff !important;
    box-shadow: 0 1px 2px rgba(10, 132, 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;
}

