/* ==========================================================================
   Fonts — Cairo (self-hosted, Arabic subset only)
   ========================================================================== */
@font-face {
    font-family: 'Cairo';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('/vendor/fonts/cairo/cairo-arabic-400-normal.woff2') format('woff2'),
        url('/vendor/fonts/cairo/cairo-arabic-400-normal.woff') format('woff');
}

@font-face {
    font-family: 'Cairo';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('/vendor/fonts/cairo/cairo-arabic-600-normal.woff2') format('woff2'),
        url('/vendor/fonts/cairo/cairo-arabic-600-normal.woff') format('woff');
}

@font-face {
    font-family: 'Cairo';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('/vendor/fonts/cairo/cairo-arabic-700-normal.woff2') format('woff2'),
        url('/vendor/fonts/cairo/cairo-arabic-700-normal.woff') format('woff');
}

/* ==========================================================================
   Plantos Admin — Design Tokens
   Every color/radius/shadow in this file should come from one of these
   variables. Don't hardcode a color in a component rule or in a Blade
   view — add or reuse a token here instead.
   ========================================================================== */
:root {
    --plantos-primary: #176b3a;
    --plantos-primary-dark: #10542d;
    --plantos-primary-soft: #eaf5ee;

    --plantos-bg: #f7f9f7;
    --plantos-surface: #ffffff;

    --plantos-text: #1d2922;
    --plantos-muted: #7a857d;

    --plantos-border: #e7ece8;

    --plantos-success: #18864b;
    --plantos-success-soft: #eaf7ef;

    --plantos-warning: #d99016;
    --plantos-warning-soft: #fff6e5;

    --plantos-danger: #d64545;
    --plantos-danger-soft: #fdeeee;

    --plantos-info: #3b82f6;
    --plantos-info-soft: #eef5ff;

    --plantos-neutral-soft: #f1f2f0;

    --plantos-radius-sm: 8px;
    --plantos-radius: 12px;
    --plantos-radius-lg: 16px;

    --plantos-shadow-sm: 0 2px 8px rgba(16, 50, 30, 0.04);
    --plantos-shadow: 0 8px 24px rgba(16, 50, 30, 0.06);

    --plantos-font: 'Cairo', 'Segoe UI', Tahoma, Arial, sans-serif;

    /* Retint Bootstrap's own CSS variables so built-in utilities/components
       (btn-primary, bg-primary, links, form focus rings, …) follow the brand. */
    --bs-primary: var(--plantos-primary);
    --bs-primary-rgb: 23, 107, 58;
    --bs-success: var(--plantos-success);
    --bs-success-rgb: 24, 134, 75;
    --bs-danger: var(--plantos-danger);
    --bs-danger-rgb: 214, 69, 69;
    --bs-warning: var(--plantos-warning);
    --bs-warning-rgb: 217, 144, 22;
    --bs-info: var(--plantos-info);
    --bs-info-rgb: 59, 130, 246;
    --bs-body-bg: var(--plantos-bg);
    --bs-body-color: var(--plantos-text);
    --bs-border-color: var(--plantos-border);
    --bs-link-color: var(--plantos-primary);
    --bs-link-hover-color: var(--plantos-primary-dark);
    --bs-body-font-family: var(--plantos-font);
}

* {
    outline-color: var(--plantos-primary);
}

body {
    background-color: var(--plantos-bg);
    color: var(--plantos-text);
    font-family: var(--plantos-font);
}

a {
    text-decoration: none;
}

/* ==========================================================================
   Typography scale — keep to these few sizes everywhere
   ========================================================================== */
.admin-page-title,
h1 {
    font-size: 1.375rem;
    font-weight: 700;
    color: var(--plantos-text);
}

.admin-card-title {
    font-size: 0.9rem;
    font-weight: 700;
    color: var(--plantos-text);
}

.admin-page-subtitle,
.admin-card-hint,
.text-muted-plantos {
    color: var(--plantos-muted);
}

.admin-page-subtitle {
    font-size: 0.875rem;
}

.admin-card-hint {
    font-size: 0.75rem;
}

/* ==========================================================================
   Buttons — retint Bootstrap instead of fighting it; `admin-btn-*` are
   plain aliases future pages can reach for explicitly.
   ========================================================================== */
.btn {
    font-weight: 600;
    border-radius: var(--plantos-radius-sm);
}

.btn-primary,
.admin-btn-primary {
    --bs-btn-bg: var(--plantos-primary);
    --bs-btn-border-color: var(--plantos-primary);
    --bs-btn-hover-bg: var(--plantos-primary-dark);
    --bs-btn-hover-border-color: var(--plantos-primary-dark);
    --bs-btn-active-bg: var(--plantos-primary-dark);
    --bs-btn-active-border-color: var(--plantos-primary-dark);
    --bs-btn-focus-shadow-rgb: 23, 107, 58;
}

.btn-outline-primary {
    --bs-btn-color: var(--plantos-primary);
    --bs-btn-border-color: var(--plantos-primary);
    --bs-btn-hover-bg: var(--plantos-primary);
    --bs-btn-hover-border-color: var(--plantos-primary);
    --bs-btn-active-bg: var(--plantos-primary);
    --bs-btn-active-border-color: var(--plantos-primary);
}

.btn-light,
.admin-btn-secondary {
    --bs-btn-bg: var(--plantos-surface);
    --bs-btn-border-color: var(--plantos-border);
    --bs-btn-color: var(--plantos-text);
    --bs-btn-hover-bg: var(--plantos-bg);
    --bs-btn-hover-border-color: var(--plantos-border);
    --bs-btn-hover-color: var(--plantos-text);
}

.btn-danger,
.admin-btn-danger {
    --bs-btn-bg: var(--plantos-danger);
    --bs-btn-border-color: var(--plantos-danger);
}

.btn-outline-danger {
    --bs-btn-color: var(--plantos-danger);
    --bs-btn-border-color: var(--plantos-danger);
    --bs-btn-hover-bg: var(--plantos-danger);
    --bs-btn-hover-border-color: var(--plantos-danger);
}

.admin-btn-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    padding: 0;
    border: 1px solid var(--plantos-border);
    background-color: var(--plantos-surface);
    color: var(--plantos-muted);
    border-radius: var(--plantos-radius-sm);
}

.admin-btn-icon:hover,
.admin-btn-icon:focus {
    background-color: var(--plantos-neutral-soft);
    border-color: var(--plantos-border);
    color: var(--plantos-text);
}

/* ==========================================================================
   Forms
   ========================================================================== */
.form-control:focus,
.form-select:focus,
.form-check-input:focus {
    border-color: var(--plantos-primary);
    box-shadow: 0 0 0 0.2rem rgba(23, 107, 58, 0.15);
}

.form-check-input:checked {
    background-color: var(--plantos-primary);
    border-color: var(--plantos-primary);
}

/* Bootstrap doesn't reserve any breathing room between a switch/checkbox and
   its label text; without this the label ends up glued right against it. */
.form-check-label {
    margin-right: 0.5rem;
}

.form-control,
.form-select {
    min-height: calc(1.5em + 1.1rem + 2px);
    border-color: var(--plantos-border);
    border-radius: var(--plantos-radius-sm);
}

.form-label {
    font-weight: 600;
    font-size: 0.875rem;
    color: var(--plantos-text);
}

.form-text {
    font-size: 0.75rem;
}

.invalid-feedback {
    font-size: 0.75rem;
}

/* Select2 inherits our input sizing/radius so it matches native selects. */
.select2-container--bootstrap-5 .select2-selection {
    min-height: calc(1.5em + 1.1rem + 2px) !important;
    border-color: var(--plantos-border) !important;
    border-radius: var(--plantos-radius-sm) !important;
}

.select2-container--bootstrap-5.select2-container--focus .select2-selection,
.select2-container--bootstrap-5.select2-container--open .select2-selection {
    border-color: var(--plantos-primary) !important;
    box-shadow: 0 0 0 0.2rem rgba(23, 107, 58, 0.15) !important;
}

.select2-container--bootstrap-5 .select2-results__option--highlighted[aria-selected] {
    background-color: var(--plantos-primary) !important;
    color: #fff !important;
}

.select2-container--bootstrap-5 .select2-results__option[aria-selected="true"] {
    background-color: var(--plantos-primary) !important;
    color: #fff !important;
}

/* ==========================================================================
   App shell
   ========================================================================== */
.admin-shell {
    display: flex;
    min-height: 100vh;
}

.admin-main {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    min-width: 0;
}

.admin-page-content,
.admin-content {
    flex: 1 1 auto;
    padding: 1.25rem;
}

@media (min-width: 992px) {
    .admin-page-content,
    .admin-content {
        padding: 1.75rem 2rem;
    }
}

/* ==========================================================================
   Sidebar
   ========================================================================== */
.admin-sidebar {
    /* Bootstrap's own `.offcanvas-lg.offcanvas-start` rule (higher
       specificity than a single class) sets `width` from this variable,
       so overriding `width` directly here would be ignored — feed the
       variable instead. */
    --bs-offcanvas-width: 232px;
    background-color: var(--plantos-surface);
    border-left: 1px solid var(--plantos-border);
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
}

/* Bootstrap's `.offcanvas-lg` only becomes a static, always-visible sidebar
   at the `lg` breakpoint when nested inside a `.navbar-expand-lg` — used
   standalone (our case) it stays a hidden, transformed-off-screen drawer
   even above that breakpoint. Force the visible/static/in-flow state
   ourselves, and restore the background/border Bootstrap zeroes out with
   `!important` for that responsive variant. */
@media (min-width: 992px) {
    .admin-sidebar {
        position: static !important;
        visibility: visible !important;
        transform: none !important;
        background-color: var(--plantos-surface) !important;
        border-left: 1px solid var(--plantos-border) !important;
    }
}

.admin-sidebar .sidebar-brand {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    padding: 1.1rem 1.25rem;
    border-bottom: 1px solid var(--plantos-border);
}

.login-logo {
    height: 3.5rem;
    width: auto;
}

.brand-logo {
    display: block;
    height: 2.1rem;
    width: auto;
}

.admin-sidebar .brand-subtitle {
    font-size: 0.7rem;
    color: var(--plantos-muted);
    margin: 0.2rem 0 0;
}

.sidebar-nav {
    padding: 0.75rem;
    flex: 1 1 auto;
    min-height: 0;
    /* Bootstrap's .nav wraps; in a column direction with a bounded height
       that splits the links into side-by-side columns on short screens. */
    flex-wrap: nowrap;
    overflow-x: hidden;
    overflow-y: auto;
}

.sidebar-nav .nav-link {
    flex-shrink: 0;
}

.sidebar-nav .nav-link {
    position: relative;
    display: flex;
    align-items: center;
    gap: 0.65rem;
    padding: 0.55rem 0.85rem;
    border-radius: var(--plantos-radius-sm);
    color: var(--plantos-muted);
    font-size: 0.875rem;
    font-weight: 500;
    margin-bottom: 0.1rem;
}

.sidebar-nav .nav-link i {
    font-size: 1.05rem;
    width: 1.05rem;
    text-align: center;
    flex-shrink: 0;
}

.sidebar-nav .nav-link:hover {
    background-color: var(--plantos-bg);
    color: var(--plantos-text);
}

.sidebar-nav .nav-link.active {
    background-color: var(--plantos-primary-soft);
    color: var(--plantos-primary);
    font-weight: 600;
}

.sidebar-nav .nav-link.active::before {
    content: '';
    position: absolute;
    right: 0.15rem;
    top: 50%;
    transform: translateY(-50%);
    width: 3px;
    height: 1.15rem;
    border-radius: 999px;
    background-color: var(--plantos-primary);
}

.sidebar-nav .nav-link.disabled {
    color: #c3cac2;
    cursor: not-allowed;
}

.sidebar-nav .soon-badge {
    margin-right: auto;
    font-size: 0.625rem;
    background-color: var(--plantos-bg);
    color: var(--plantos-muted);
    border-radius: 999px;
    padding: 0.1rem 0.5rem;
}

.sidebar-footer {
    padding: 0.75rem;
    border-top: 1px solid var(--plantos-border);
}

/* ==========================================================================
   Header
   ========================================================================== */
.admin-header {
    background-color: rgba(255, 255, 255, 0.92);
    backdrop-filter: blur(6px);
    border-bottom: 1px solid var(--plantos-border);
    padding: 0.65rem 1.25rem;
    position: sticky;
    top: 0;
    z-index: 1020;
    height: 64px;
}

.admin-header .header-search {
    max-width: 300px;
}

.admin-header .avatar-circle {
    width: 2.1rem;
    height: 2.1rem;
    border-radius: 50%;
    background-color: var(--plantos-primary-soft);
    color: var(--plantos-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 0.85rem;
}

/* ==========================================================================
   Page header
   ========================================================================== */
.admin-page-header {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 1.5rem;
}

.admin-page-header-text {
    display: flex;
    align-items: center;
    gap: 0.85rem;
}

.admin-page-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 2.75rem;
    height: 2.75rem;
    border-radius: 50%;
    background-color: var(--plantos-primary-soft);
    color: var(--plantos-primary);
    font-size: 1.25rem;
    flex-shrink: 0;
}

.admin-page-title {
    margin: 0 0 0.15rem;
}

.admin-page-subtitle {
    margin: 0;
}

/* ==========================================================================
   Cards — the one card shell every panel on the site uses
   ========================================================================== */
.admin-card {
    background-color: var(--plantos-surface);
    border: 1px solid var(--plantos-border);
    border-radius: var(--plantos-radius);
    box-shadow: var(--plantos-shadow-sm);
    padding: 1.25rem;
}

.admin-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 1rem;
}

/* Standard form/section spacing: every admin-card follows this rhythm —
   title, then (optionally) a hint description, then a clear gap before the
   first field. Individual views must not override these with mb-*/mt-*
   utilities; that's what produced the "glued together" look this replaces. */
.admin-card-title {
    margin: 0 0 0.35rem;
}

.admin-card-title:last-child {
    margin-bottom: 0;
}

.admin-card-hint {
    margin: 0 0 1.1rem;
}

.admin-card-hint:last-child {
    margin-bottom: 0;
}

/* ==========================================================================
   Stat cards — one component, used everywhere a metric tile is needed
   ========================================================================== */
.admin-stat-card {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    background-color: var(--plantos-surface);
    border: 1px solid var(--plantos-border);
    border-radius: var(--plantos-radius);
    box-shadow: var(--plantos-shadow-sm);
    padding: 1rem 1.1rem;
    height: 100%;
}

.admin-stat-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 50%;
    background-color: var(--plantos-primary-soft);
    color: var(--plantos-primary);
    font-size: 1.1rem;
    flex-shrink: 0;
}

.admin-stat-icon.is-warning {
    background-color: var(--plantos-warning-soft);
    color: var(--plantos-warning);
}

.admin-stat-icon.is-danger {
    background-color: var(--plantos-danger-soft);
    color: var(--plantos-danger);
}

.admin-stat-icon.is-info {
    background-color: var(--plantos-info-soft);
    color: var(--plantos-info);
}

.admin-stat-body {
    min-width: 0;
}

.admin-stat-label {
    color: var(--plantos-muted);
    font-size: 0.8rem;
    margin-bottom: 0.2rem;
}

.admin-stat-value {
    font-size: 1.375rem;
    font-weight: 700;
    color: var(--plantos-text);
    line-height: 1.2;
}

.admin-stat-value.is-warning {
    color: var(--plantos-warning);
}

.admin-stat-value.is-danger {
    color: var(--plantos-danger);
}

.admin-stat-hint {
    font-size: 0.7rem;
    color: var(--plantos-muted);
    margin-top: 0.15rem;
}

.admin-empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    text-align: center;
    padding: 3rem 1rem;
    color: var(--plantos-muted);
}

.admin-empty-state-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 3.25rem;
    height: 3.25rem;
    border-radius: 50%;
    background-color: var(--plantos-bg);
    color: #b7c0b9;
    font-size: 1.5rem;
    margin-bottom: 0.25rem;
}

.admin-empty-state-title {
    color: var(--plantos-text);
    font-weight: 600;
    font-size: 0.95rem;
    margin: 0;
}

.admin-empty-state-subtitle {
    font-size: 0.825rem;
    margin: 0 0 0.5rem;
}

/* Dashed variant used for "coming soon" widgets that aren't a real empty
   list state (nothing to create yet). */
.admin-empty-state.is-dashed {
    border: 1px dashed var(--plantos-border);
    border-radius: var(--plantos-radius-sm);
    padding: 2.25rem 1rem;
}

/* ==========================================================================
   Filter bar
   ========================================================================== */
.admin-filter-bar {
    margin-bottom: 1rem;
}

.admin-filter-bar .input-group-text {
    background-color: var(--plantos-surface);
    border-color: var(--plantos-border);
}

/* ==========================================================================
   Tables
   ========================================================================== */
.admin-table-card {
    background-color: var(--plantos-surface);
    border: 1px solid var(--plantos-border);
    border-radius: var(--plantos-radius);
    box-shadow: var(--plantos-shadow-sm);
    overflow: hidden;
}

.admin-table {
    --bs-table-bg: var(--plantos-surface);
}

.admin-table thead {
    background-color: var(--plantos-bg);
}

.admin-table thead th {
    font-size: 0.7rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--plantos-muted);
    font-weight: 600;
    border-bottom-width: 1px;
    white-space: nowrap;
    padding: 0.85rem 1.1rem;
}

.admin-table tbody td {
    padding: 0.85rem 1.1rem;
    vertical-align: middle;
}

.admin-table tbody tr {
    transition: background-color 0.1s ease-in-out;
}

.admin-table tbody tr:hover {
    background-color: var(--plantos-bg);
}

.admin-table td,
.admin-table th {
    border-color: var(--plantos-border);
}

.admin-table .form-check-input {
    width: 1.25rem;
    height: 1.25rem;
    cursor: pointer;
}

.table-thumb {
    width: 2.75rem;
    height: 2.75rem;
    border-radius: var(--plantos-radius-sm);
    object-fit: cover;
    border: 1px solid var(--plantos-border);
    background-color: var(--plantos-bg);
    flex-shrink: 0;
}

.product-cell {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    min-width: 0;
}

.product-cell:hover p:first-child {
    color: var(--plantos-primary);
}

.visibility-indicators {
    display: flex;
    align-items: center;
    gap: 0.65rem;
}

.visibility-indicator {
    display: flex;
    align-items: center;
    gap: 0.35rem;
    font-size: 0.7rem;
    color: var(--plantos-muted);
    white-space: nowrap;
}

.visibility-indicator .dot {
    width: 0.4rem;
    height: 0.4rem;
    border-radius: 50%;
    background-color: #d7ddd6;
    flex-shrink: 0;
}

.visibility-indicator.is-on {
    color: var(--plantos-primary);
}

.visibility-indicator.is-on .dot {
    background-color: var(--plantos-primary);
}

.code-chip {
    display: inline-flex;
    align-items: center;
    background-color: var(--plantos-bg);
    border: 1px solid var(--plantos-border);
    border-radius: var(--plantos-radius-sm);
    padding: 0.15rem 0.5rem;
    font-size: 0.75rem;
    color: var(--plantos-muted);
}

/* ==========================================================================
   Badges
   ========================================================================== */
.admin-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.25rem 0.65rem;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 600;
    white-space: nowrap;
}

.admin-badge-success {
    background-color: var(--plantos-success-soft);
    color: var(--plantos-success);
}

.admin-badge-neutral {
    background-color: var(--plantos-neutral-soft);
    color: var(--plantos-muted);
}

.admin-badge-warning {
    background-color: var(--plantos-warning-soft);
    color: var(--plantos-warning);
}

.admin-badge-danger {
    background-color: var(--plantos-danger-soft);
    color: var(--plantos-danger);
}

.admin-badge-info {
    background-color: var(--plantos-info-soft);
    color: var(--plantos-info);
}

/* ==========================================================================
   Inline alerts (order deposit/shipping notices, etc.)
   ========================================================================== */
.admin-alert {
    border-radius: var(--plantos-radius-sm);
    padding: 0.65rem 0.9rem;
    font-size: 0.85rem;
    font-weight: 600;
}

.admin-alert-warning {
    background-color: var(--plantos-warning-soft);
    color: var(--plantos-warning);
}

/* ==========================================================================
   Order status timeline
   ========================================================================== */
.admin-timeline-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: var(--plantos-primary);
    margin-top: 6px;
    flex-shrink: 0;
}

/* ==========================================================================
   Toasts
   ========================================================================== */
.admin-toast {
    border: 1px solid transparent;
    border-radius: var(--plantos-radius);
    box-shadow: var(--plantos-shadow);
}

.admin-toast .toast-body {
    font-weight: 600;
}

.admin-toast-success {
    background-color: var(--plantos-success-soft);
    color: var(--plantos-success);
    border-color: var(--plantos-success-soft);
}

.admin-toast-danger {
    background-color: var(--plantos-danger-soft);
    color: var(--plantos-danger);
    border-color: var(--plantos-danger-soft);
}

.admin-toast-warning {
    background-color: var(--plantos-warning-soft);
    color: var(--plantos-warning);
    border-color: var(--plantos-warning-soft);
}

.admin-toast .btn-close {
    filter: none;
    opacity: 0.55;
}

/* ==========================================================================
   Pagination
   ========================================================================== */
.admin-pagination-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    margin-top: 1rem;
}

.admin-pagination-summary {
    font-size: 0.8rem;
    color: var(--plantos-muted);
}

.pagination {
    gap: 0.25rem;
}

.page-link {
    border-radius: var(--plantos-radius-sm) !important;
    border-color: var(--plantos-border);
    color: var(--plantos-text);
    min-width: 2.25rem;
    text-align: center;
    font-size: 0.825rem;
    font-weight: 600;
}

.page-item.active .page-link {
    background-color: var(--plantos-primary);
    border-color: var(--plantos-primary);
}

.page-item.disabled .page-link {
    color: #c3cac2;
    background-color: var(--plantos-surface);
}

.page-link:hover {
    background-color: var(--plantos-primary-soft);
    color: var(--plantos-primary);
}

.page-item.active .page-link:hover {
    color: #fff;
}

/* ==========================================================================
   Image upload
   ========================================================================== */
.image-upload {
    display: flex;
    align-items: flex-start;
    gap: 1rem;
}

.image-upload-thumb {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.35rem;
    flex-shrink: 0;
}

.image-upload-preview {
    width: 5rem;
    height: 5rem;
    border-radius: var(--plantos-radius-sm);
    object-fit: cover;
    border: 1px solid var(--plantos-border);
    background-color: var(--plantos-bg);
}

.image-upload-remove {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    font-size: 0.7rem;
    color: var(--plantos-danger);
    cursor: pointer;
    white-space: nowrap;
}

.banner-preview-frame {
    position: relative;
    width: 100%;
    max-width: 380px;
    aspect-ratio: 2 / 1;
    border-radius: var(--plantos-radius-sm);
    overflow: hidden;
    background-color: var(--plantos-bg);
    border: 1px solid var(--plantos-border);
}

.banner-preview-frame img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.banner-preview-placeholder {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.35rem;
    color: var(--plantos-muted);
    font-size: 0.8rem;
}

.banner-preview-placeholder i {
    font-size: 1.5rem;
}

.gallery-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
}

.gallery-item {
    position: relative;
    width: 5rem;
    height: 5rem;
}

.gallery-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: var(--plantos-radius-sm);
    border: 1px solid var(--plantos-border);
}

.gallery-item .gallery-remove {
    position: absolute;
    inset: auto 0 0 0;
    background-color: rgba(0, 0, 0, 0.55);
    color: #fff;
    font-size: 0.65rem;
    border-radius: 0 0 var(--plantos-radius-sm) var(--plantos-radius-sm);
    padding: 0.15rem 0;
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
}

/* ==========================================================================
   Product image uploader (main image tile + gallery manager)
   ========================================================================== */
.image-uploader-frame {
    position: relative;
    width: 100%;
    max-width: 12rem;
}

.image-uploader-tile {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 9rem;
    padding: 0;
    border: 1px dashed var(--plantos-border);
    border-radius: var(--plantos-radius);
    background-color: var(--plantos-bg);
    cursor: pointer;
    overflow: hidden;
    transition: border-color 0.15s ease-in-out, background-color 0.15s ease-in-out;
}

.image-uploader-tile:hover {
    border-color: var(--plantos-primary);
    background-color: var(--plantos-primary-soft);
}

.image-uploader-tile.has-image {
    border-style: solid;
    border-color: var(--plantos-border);
    background-color: var(--plantos-surface);
}

.image-uploader-preview {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.image-uploader-placeholder {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.35rem;
    color: var(--plantos-muted);
    font-size: 0.75rem;
}

.image-uploader-placeholder i {
    font-size: 1.5rem;
}

.image-uploader-delete {
    position: absolute;
    inset-block-start: -0.5rem;
    inset-inline-end: -0.5rem;
    width: 1.75rem;
    height: 1.75rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 50%;
    background-color: var(--plantos-danger);
    color: #fff;
    font-size: 0.75rem;
    box-shadow: var(--plantos-shadow-sm);
    cursor: pointer;
}

.image-uploader-delete:hover {
    background-color: #b83636;
}

.gallery-tile {
    position: relative;
    width: 5.5rem;
    height: 5.5rem;
}

.gallery-tile img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: var(--plantos-radius-sm);
    border: 1px solid var(--plantos-border);
}

.gallery-tile-delete {
    position: absolute;
    inset-block-start: -0.4rem;
    inset-inline-end: -0.4rem;
    width: 1.4rem;
    height: 1.4rem;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 50%;
    background-color: var(--plantos-danger);
    color: #fff;
    font-size: 0.65rem;
    box-shadow: var(--plantos-shadow-sm);
    cursor: pointer;
}

.gallery-tile-delete:hover {
    background-color: #b83636;
}

.gallery-add-tile {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
    width: 5.5rem;
    height: 5.5rem;
    border: 1px dashed var(--plantos-border);
    border-radius: var(--plantos-radius-sm);
    background-color: var(--plantos-bg);
    color: var(--plantos-muted);
    font-size: 0.65rem;
    cursor: pointer;
    transition: border-color 0.15s ease-in-out, color 0.15s ease-in-out, background-color 0.15s ease-in-out;
}

.gallery-add-tile i {
    font-size: 1.1rem;
}

.gallery-add-tile:hover {
    border-color: var(--plantos-primary);
    color: var(--plantos-primary);
    background-color: var(--plantos-primary-soft);
}

/* ==========================================================================
   Utilities
   ========================================================================== */
.text-ltr {
    direction: ltr;
    unicode-bidi: isolate;
    display: inline-block;
}

/* Renders "ج.م 100" reliably. Plain text ("ج.م " + number), even under
   direction:ltr, still gets reordered by the Unicode Bidi Algorithm — the
   Arabic run and the digit run don't stay in source order. A flex row is
   immune to that: placement follows DOM order (currency span first), not
   text-level bidi resolution. See resources/views/components/admin/money.blade.php. */
.money {
    display: inline-flex;
    direction: ltr;
    align-items: baseline;
    gap: 3px;
}

.min-width-0 {
    min-width: 0;
}

.soon-chip {
    font-size: 0.65rem;
    background-color: var(--plantos-bg);
    color: var(--plantos-muted);
    border-radius: 999px;
    padding: 0.1rem 0.5rem;
}

/* ==========================================================================
   File upload dropzone (product import)
   ========================================================================== */
.file-upload-dropzone {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.35rem;
    text-align: center;
    padding: 2.5rem 1.5rem;
    border: 1px dashed var(--plantos-border);
    border-radius: var(--plantos-radius);
    background-color: var(--plantos-bg);
    cursor: pointer;
    transition: border-color 0.15s ease-in-out, background-color 0.15s ease-in-out;
}

.file-upload-dropzone:hover {
    border-color: var(--plantos-primary);
    background-color: var(--plantos-primary-soft);
}

.file-upload-dropzone i {
    font-size: 1.75rem;
    color: var(--plantos-primary);
}

/* ==========================================================================
   Radio card (product import mode)
   ========================================================================== */
.admin-radio-card {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.75rem 1rem;
    border: 1px solid var(--plantos-border);
    border-radius: var(--plantos-radius-sm);
    cursor: pointer;
    transition: border-color 0.15s ease-in-out, background-color 0.15s ease-in-out;
}

.admin-radio-card:has(input:checked) {
    border-color: var(--plantos-primary);
    background-color: var(--plantos-primary-soft);
}

.admin-radio-card input[type='radio'] {
    margin: 0;
    flex-shrink: 0;
}

/* ==========================================================================
   Responsive — tablets and phones
   ========================================================================== */
html,
body {
    overflow-x: clip;
}

.admin-chart-box {
    position: relative;
    height: 260px;
}

.admin-chart-box.is-compact {
    height: 220px;
}

@media (max-width: 991.98px) {
    /* The drawer shouldn't eat a whole narrow phone. */
    .admin-sidebar {
        --bs-offcanvas-width: min(280px, 85vw);
    }

    .admin-header {
        padding: 0.65rem 1rem;
    }
}

@media (max-width: 575.98px) {
    .admin-content,
    .admin-page-content {
        padding: 0.9rem;
    }

    .admin-header {
        padding: 0.5rem 0.75rem;
        gap: 0.5rem !important;
    }

    .admin-header > .d-flex {
        gap: 0.5rem !important;
    }

    .admin-header .btn {
        padding-inline: 0.6rem;
    }

    /* Page header: title on its own row, actions below at full width. */
    .admin-page-header {
        margin-bottom: 1rem;
    }

    .admin-page-header > .d-flex {
        width: 100%;
        flex-wrap: wrap;
    }

    .admin-page-header > .d-flex > .btn,
    .admin-page-header > .d-flex > .dropdown,
    .admin-page-header > .d-flex > form {
        flex: 1 1 auto;
    }

    .admin-page-header .btn {
        justify-content: center;
    }

    .admin-page-icon {
        width: 2.25rem;
        height: 2.25rem;
        font-size: 1rem;
    }

    .admin-page-title,
    h1 {
        font-size: 1.15rem;
    }

    .admin-card {
        padding: 1rem;
    }

    /* Two stat tiles per row on phones: stack icon above the figures. */
    .admin-stat-card {
        flex-direction: column;
        align-items: flex-start;
        gap: 0.5rem;
        padding: 0.85rem;
    }

    .admin-stat-value {
        font-size: 1.15rem;
    }

    .admin-stat-label {
        font-size: 0.75rem;
    }

    .admin-table thead th,
    .admin-table tbody td {
        padding: 0.65rem 0.75rem;
        font-size: 0.85rem;
    }

    .admin-chart-box {
        height: 220px;
    }

    .admin-chart-box.is-compact {
        height: 200px;
    }

    .admin-filter-bar > *,
    .admin-pagination-bar {
        flex-wrap: wrap;
    }

    .admin-pagination-bar {
        justify-content: center;
        text-align: center;
    }

    .admin-empty-state {
        padding: 2rem 0.75rem;
    }

    .admin-toast {
        max-width: calc(100vw - 1.5rem);
    }

    .modal-dialog {
        margin: 0.75rem;
    }

    .file-upload-dropzone {
        padding: 1.75rem 1rem;
    }
}

/* Products table: stacked cards on phones instead of a sideways-scrolling table. */
@media (max-width: 767.98px) {
    .admin-table-cards thead {
        display: none;
    }

    .admin-table-cards,
    .admin-table-cards tbody {
        display: block;
    }

    .admin-table-cards tbody tr[data-product-row] {
        display: grid;
        grid-template-columns: auto minmax(0, 1fr) auto;
        align-items: center;
        column-gap: 0.75rem;
        padding: 0.85rem;
        border-bottom: 1px solid var(--plantos-border);
    }

    .admin-table-cards tbody tr[data-product-row] > td {
        padding: 0;
        border: 0;
        background: transparent;
    }

    .admin-table-cards tbody tr[data-product-row] > td:nth-child(2) {
        min-width: 0;
    }

    .admin-table-cards tbody tr[data-product-row] > td:nth-child(2) .text-truncate {
        white-space: normal;
    }

    .admin-table-cards tbody tr[data-product-row] > td[data-label] {
        grid-column: 1 / -1;
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 0.75rem;
        padding: 0.4rem 0;
        font-size: 0.8rem;
    }

    .admin-table-cards tbody tr[data-product-row] > td[data-label]:first-of-type,
    .admin-table-cards tbody tr[data-product-row] > td:nth-child(2) + td {
        margin-top: 0.6rem;
        border-top: 1px dashed var(--plantos-border);
    }

    .admin-table-cards tbody tr[data-product-row] > td[data-label]::before {
        content: attr(data-label);
        color: var(--plantos-muted);
        font-size: 0.72rem;
        font-weight: 600;
    }
}
