/* ---------------------------------------------------------------------------
   Brand palette — defined per-theme in main.twig from
   tenants/<h>/themes/<t>/theme-settings-data.json. Customizer editable.
   This file only contains class-level overrides that reference the vars,
   so changing the palette is a single JSON edit per theme.

   Safety-net root definitions: main.twig sets these from theme settings, but
   if the template scope doesn't reach (e.g. cached partial, isolated render,
   customizer iframe) the rules below fall back to brand hex literals so we
   never end up with `var(--color-primary)` evaluating to nothing — which
   silently rendered the place-order button transparent on the checkout
   page.

   IMPORTANT — selector is `html` (specificity 0,0,1), NOT `:root` (0,1,0).
   main.twig's palette is `:root {…}` at the very top of <head>; this file
   loads AFTER it, so a `:root` fallback here would TIE on specificity and win
   on source-order, freezing every theme's palette to these literals (the bug
   that made theme Primary do nothing). `html` is deliberately lower
   specificity so main.twig's `:root` always wins when present, while these
   fallbacks still apply in isolated/cached renders where it doesn't.
--------------------------------------------------------------------------- */
html {
    --molten-lava:     #ff6a1a;
    --brick-red:       #ff4d00;
    --papaya-whip:     #fdf0d5;
    --deep-space-blue: #003049;
    --steel-blue:      #669bbc;

    --color-primary:        #003049;
    --color-primary-hover:  #ff4d00;
    --color-primary-on:     #ffffff;
    --color-accent:         #ff4d00;
    --color-accent-deep:    #ff6a1a;
    --color-link:           #669bbc;
    --color-soft-bg:        #fdf0d5;
    --color-soft-bg-line:   #f0e2c3;
}

/* ---------------------------------------------------------------------------
   Header sticky behaviour — driven by the merchant's "Stick to top on scroll"
   toggle in the customizer (Header section settings). render_global_sections()
   stamps `data-sticky="true"` on the inner `.nx--global-section` wrapper
   when the toggle is on; this rule then promotes the outer wrapper to
   `position: sticky`. Browser support for `:has()`: Chrome/Edge 105+,
   Safari 15.4+, Firefox 121+ — covers ~95%+ of users. Older browsers see
   a non-sticky header with no other breakage.
--------------------------------------------------------------------------- */
.storefront-sticky-top:has([data-sticky="true"]) {
    position: sticky;
    top: 0;
    z-index: 40;
}

/* Re-point common Tailwind brand-rose utilities to the palette accent —
   STOREFRONT ONLY. Scoped under body.storefront so admin pages (which load
   the same custom.css) are not repainted. The body class is set in
   theme/storefront/main.twig. */
body.storefront .bg-rose-600,
body.storefront .bg-rose-700,
body.storefront .hover\:bg-rose-700:hover,
body.storefront .hover\:bg-rose-600:hover { background-color: var(--color-accent) !important; }
body.storefront .text-rose-600,
body.storefront .text-rose-700,
body.storefront .hover\:text-rose-700:hover,
body.storefront .hover\:text-rose-600:hover { color: var(--color-accent) !important; }
body.storefront .border-rose-600,
body.storefront .border-rose-700 { border-color: var(--color-accent) !important; }
body.storefront .ring-rose-600,
body.storefront .ring-rose-700 { --tw-ring-color: var(--color-accent) !important; }

/* Primary CTAs that use bg-gray-900 / bg-black on a button or link → palette
   primary, with brick-red on hover. Storefront-only; restricted to <a>/<button>
   so legitimate dark backgrounds (overlays, drawers) aren't repainted. */
body.storefront a.bg-gray-900,
body.storefront button.bg-gray-900,
body.storefront a.bg-black,
body.storefront button.bg-black { background-color: var(--color-primary) !important; }
body.storefront a.bg-gray-900:hover,
body.storefront button.bg-gray-900:hover,
body.storefront a.bg-black:hover,
body.storefront button.bg-black:hover,
body.storefront a.hover\:bg-gray-800:hover,
body.storefront button.hover\:bg-gray-800:hover,
body.storefront a.hover\:bg-black:hover,
body.storefront button.hover\:bg-black:hover { background-color: var(--color-primary-hover) !important; }

/* Form-input focus colours — storefront only. */
body.storefront input:focus,
body.storefront select:focus,
body.storefront textarea:focus { outline-color: var(--color-primary); }

/* Soft-bg helper for sections that want the cream backdrop. */
.bg-soft { background-color: var(--color-soft-bg) !important; }

.ssr_toast {
  text-align: center;
  margin-bottom: 25px;
  height: 40px;
  bottom: -100px;
  width: auto;
  position: fixed;
  left: 50%;
  transform: translate(-50%, 0%);
  transition: 500ms;
  transition-property: bottom;
  /* Above nx-modal (100) / nx-drawer (110) / nx-toast-region (200) so success
     and error toasts are never hidden behind an open popup. */
  z-index: 2000;
}
.ssr_toast span {
  padding: 10px;
  min-width: 100px;
  text-align: center;
  border-radius: 7px;
  box-shadow: rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px;
  color: white;
  transition: 200ms;
  width: auto;
  display: inline-block;
}
.option-value-error {
  box-shadow: inset 0px 0px 2px red;
}
a.active.menu-item {
  text-decoration: underline;
  font-weight: 800;
  text-underline-offset: 2px;
}
a.active.menu-item svg {
  stroke: #dd6400;
}
.disabled {
  pointer-events: none;
  opacity: 0.5;
  color: #ffffff !important;
  background-color: #888888 !important;
  border-color: #888888 !important;
  cursor: not-allowed !important;
  text-decoration: none !important;
  user-select: none;
  box-shadow: none !important;
}
.disabled-input {
  pointer-events: none;
  opacity: 0.5;
  color: #0c0c0c !important;
  background-color: #d9d9d9 !important;
  cursor: not-allowed !important;
  text-decoration: none !important;
}
/* Flat-card design — was a heavy multi-layer shadow, now uses a single
   1px gray border via Tailwind classes on the card itself. Override left
   in place so any template still using .content-card-shadow renders flat
   without needing to be edited. */
.content-card-shadow {
  box-shadow: none;
  border: 1px solid #e5e7eb; /* gray-200 */
}

/* Admin top-bar: starts after the sidebar so the sidebar's logo + brand
   are never covered. !important to override any Tailwind reset. */
@media (min-width: 1024px) {
    .admin-topbar {
        margin-left: 18rem !important;
        width: calc(100% - 18rem) !important;
    }
}

/* Hand-rolled rules for classes the Tailwind JIT bundle doesn't include.
   (Project has no auto-rebuild, so newly-used classes don't end up in
   style.css. Defining them here avoids needing to rebuild.) */

/* Strip header height — brand block (left of sidebar) AND admin top-bar
   must be exactly the same height + same bg so they read as one strip.
   Black bar with white text for the admin chrome. */
.admin-header-strip {
    height: 3.5rem;        /* equivalent to Tailwind h-14 */
    background: #000000;
    border-bottom: 1px solid rgba(255,255,255,0.08);
    box-sizing: border-box;
    color: #ffffff;
}
/* Override the brand block's hover (it had hover:bg-gray-50 from Tailwind). */
.admin-header-strip:hover { background: #111111; }
/* Make any inline `text-gray-900` inside the strip render white instead. */
.admin-header-strip .text-gray-900 { color: #ffffff !important; }
.admin-header-strip .text-gray-600,
.admin-header-strip .text-gray-500,
.admin-header-strip .text-gray-400 { color: rgba(255,255,255,0.7) !important; }
.admin-header-strip .hover\:text-gray-900:hover { color: #ffffff !important; }
.admin-header-strip .hover\:bg-gray-50:hover { background: rgba(255,255,255,0.1) !important; }
.admin-header-strip .ring-gray-200 { --tw-ring-color: rgba(255,255,255,0.2) !important; }
.admin-header-strip .bg-gray-200 { background: rgba(255,255,255,0.2) !important; }
.admin-header-strip .lg\:bg-gray-200 { background: rgba(255,255,255,0.2) !important; }

/* Restore normal Tailwind colors INSIDE the search dropdown, even though it's
   nested in the dark .admin-header-strip. Without this the dropdown rows are
   white-on-white because the strip overrides above force gray-900 → white. */
.search-dropdown-light,
.search-dropdown-light * { color: inherit; }
.search-dropdown-light { color: #111827; background: #ffffff; }
.search-dropdown-light .text-gray-900 { color: #111827 !important; }
.search-dropdown-light .text-gray-700 { color: #374151 !important; }
.search-dropdown-light .text-gray-600 { color: #4b5563 !important; }
.search-dropdown-light .text-gray-500 { color: #6b7280 !important; }
.search-dropdown-light .text-gray-400 { color: #9ca3af !important; }
.search-dropdown-light .text-red-600 { color: #dc2626 !important; }
.search-dropdown-light .bg-gray-50  { background: #f9fafb !important; }
.search-dropdown-light .bg-gray-100 { background: #f3f4f6 !important; }
.search-dropdown-light .border-gray-100 { border-color: #f3f4f6 !important; }
.search-dropdown-light .hover\:bg-indigo-50:hover { background: #eef2ff !important; }
.search-dropdown-light .hover\:text-indigo-900:hover { color: #312e81 !important; }
.search-dropdown-light .bg-indigo-50 { background: #eef2ff !important; }
.search-dropdown-light .text-indigo-900 { color: #312e81 !important; }

/* ---------------------------------------------------------------------------
   Utility fallbacks the bundled Tailwind in style.css doesn't include.
   Project uses a pre-built CSS, not JIT, so arbitrary classes such as
   `aspect-[4/3]` and the line-clamp-* family from the typography plugin
   never make it into the bundle. Defining them here so collection / product
   card markup renders correctly without rebuilding Tailwind.
--------------------------------------------------------------------------- */
.aspect-\[4\/3\] { aspect-ratio: 4 / 3; }
.aspect-\[4\/5\] { aspect-ratio: 4 / 5; }
.aspect-\[1\/1\] { aspect-ratio: 1 / 1; }
.aspect-\[3\/4\] { aspect-ratio: 3 / 4; }
.aspect-square  { aspect-ratio: 1 / 1; }

/* Spacing & line-clamp fallbacks (not in static Tailwind bundle). */
.gap-1\.5 { gap: 0.375rem; }
.line-clamp-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Sticky add-to-cart bar — slides off-screen via transform.
   The bundled Tailwind doesn't include `translate-y-full`, so the
   product-page sticky bar's hide/show toggle was a no-op (bar always
   visible). Local class instead. */
.sticky-cart {
    transform: translateY(0);
    transition: transform .3s ease;
}
.sticky-cart.is-hidden {
    transform: translateY(100%);
}

/* ---------------------------------------------------------------------------
   Checkout page input polish.
   Inline classes in main-checkouts.twig (border w-full p-1 border-gray-500
   rounded-lg) ship a sharper, more modern field treatment without touching
   any of the JS-bound IDs/names. Scoped to .checkout-page so the rest of
   the storefront (and admin) is untouched.
--------------------------------------------------------------------------- */
.checkout-page input[type="text"],
.checkout-page input[type="email"],
.checkout-page input[type="tel"],
.checkout-page input[type="number"],
.checkout-page select,
.checkout-page textarea {
    border-color: #d1d5db !important;       /* gray-300 */
    border-radius: 0.5rem !important;
    padding: 0.5rem 0.75rem !important;
    font-size: 0.875rem;
    background-color: #ffffff;
    transition: border-color .15s, box-shadow .15s;
}
.checkout-page input:focus,
.checkout-page select:focus,
.checkout-page textarea:focus {
    outline: none !important;
    border-color: #111827 !important;       /* gray-900 */
    box-shadow: 0 0 0 3px rgba(17,24,39,0.10);
}
/* Soft cards, not the corporate-blue Other_platform-y feel. */
.checkout-page .content-card-shadow {
    box-shadow: 0 1px 2px rgba(190, 18, 60, 0.04), 0 4px 12px rgba(190, 18, 60, 0.04);
    border-color: rgba(244, 192, 192, 0.45) !important;     /* warm rose-50 border */
}

/* Section card itself — override the original `bg-gray-50` to pure white so
   the cream page background shows around it. Subtle warm ring + rose-tinged
   shadow = boutique feel without being loud. */
.checkout-page form > div,
.checkout-page form .lg\:p-5,
.checkout-page > div > div > div > div.rounded-lg {
    background-color: #ffffff !important;
}

/* Numbered section markers.
   Single counter scoped to the whole .checkout-page so numbers run
   1 → 2 → 3 across Shipping / Billing-radio / Billing-address (and the
   <legend> for Delivery method, which we also bump). The right-column
   summary heading uses h3 so it's not numbered. */
.checkout-page { counter-reset: checkout-step; }

.checkout-page h2.text-base.lg\:text-lg,
.checkout-page legend.text-base.lg\:text-lg {
    position: relative;
    counter-increment: checkout-step;
    padding-left: 2.25rem;
    line-height: 1.6rem;
}
.checkout-page h2.text-base.lg\:text-lg::before,
.checkout-page legend.text-base.lg\:text-lg::before {
    content: counter(checkout-step);
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    width: 1.6rem;
    height: 1.6rem;
    border-radius: 9999px;
    background: #be123c;                                    /* rose-700 */
    color: #ffffff;
    font-size: 0.75rem;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

/* Lighten input borders — gray-300 was still reading as too dark on a
   warm cream page. Step it down to a near-rose-50 line. */
.checkout-page input[type="text"],
.checkout-page input[type="email"],
.checkout-page input[type="tel"],
.checkout-page input[type="number"],
.checkout-page select,
.checkout-page textarea {
    border-color: #f3e6e6 !important;       /* warm rose-100 */
    background-color: #ffffff !important;
}
.checkout-page input:focus,
.checkout-page select:focus,
.checkout-page textarea:focus {
    border-color: #be123c !important;       /* rose-700 on focus */
    box-shadow: 0 0 0 3px rgba(190, 18, 60, 0.10);
}

/* Place-order button — explicit styles that beat browser user-agent
   stylesheet defaults + the legacy .disabled rule above (which sets
   opacity:0.5 + bg:#888888 !important). Earlier we relied on Tailwind
   `disabled:bg-gray-400` / `disabled:cursor-not-allowed` variants, but
   the bundled style.css ships only `.disabled\:opacity-50` and
   `.disabled\:pointer-events-none` — every other `disabled:*` class on
   the button is silently dropped, leaving the disabled state at the
   mercy of UA defaults. On the papaya checkout page the button then
   read as a translucent peach pill. These rules are scoped to the id
   so they can't leak elsewhere; !important guarantees they win against
   any class-based override that bleeds in later. */
#place-order-btn {
    background-color: #000 !important;
    color: #ffffff !important;
    border: 0 !important;
    opacity: 1 !important;
    transition: background-color .15s ease;
}
#place-order-btn:not(:disabled):hover {
    background-color: #1f2937 !important; /* gray-800, matches old hover:bg-gray-900 intent */
}
#place-order-btn:disabled {
    background-color: #9ca3af !important; /* gray-400 — matches the disabled:bg-gray-400 we wanted */
    color: #ffffff !important;
    cursor: not-allowed !important;
    opacity: 1 !important;                /* prevent UA fade */
}

/* Quantity chip on the order-summary thumbs.
   Replaces `min-w-[1.25rem] h-5 px-1.5 text-[10px]` (arbitrary classes that
   the bundled Tailwind doesn't ship), which made double-digit quantities
   wrap into the thumb. */
.checkout-qty-chip {
    min-width: 1.25rem;
    height: 1.25rem;
    padding: 0 0.375rem;
    font-size: 0.6875rem;            /* ~11px */
    line-height: 1;
}

/* Trust strip below Place Order — original used arbitrary text-[11px] /
   gap-1.5 which the bundle doesn't have, so chips were touching and the
   reassurance line was the wrong size. Set sane fallbacks. */
.checkout-page .trust-strip { padding-top: 0.75rem; padding-bottom: 0.5rem; }
.checkout-page .trust-strip p { font-size: 0.75rem; line-height: 1.4; color: #6b7280; }
.checkout-page .trust-strip .chips {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 0.375rem;                  /* was gap-1.5 */
    margin-top: 0.5rem;
}
.checkout-page .trust-strip .chips > span {
    font-size: 0.6875rem;
    padding: 0.1875rem 0.5rem;
    background: #ffffff;
    color: #374151;
    border-radius: 0.375rem;
    box-shadow: 0 0 0 1px rgba(244, 192, 192, 0.45) inset;
}

/* Place Order button — palette-driven primary action.
   Specificity is .checkout-page #place-order-btn (1 class + 1 id) which beats
   the generic .disabled class rule, so the button stays visible even when
   the shipping-rate JS hasn't enabled it yet. The disabled state below uses
   the same selector so it can override .disabled's grey-out without
   resorting to !important everywhere. */
.checkout-page #place-order-btn {
    background-color: var(--color-primary) !important;
    border-color: var(--color-primary) !important;
    color: #ffffff !important;
    opacity: 1 !important;                       /* override .disabled's 0.5 */
    transition: background-color .15s, transform .12s, opacity .15s;
    box-shadow: 0 6px 16px rgba(0, 48, 73, 0.18);
}
.checkout-page #place-order-btn:not(:disabled):hover { background-color: var(--color-primary-hover) !important; border-color: var(--color-primary-hover) !important; }
.checkout-page #place-order-btn:active:not(:disabled) { transform: translateY(1px); }

/* Place-order in its "waiting / processing" state — clearly inactive but
   still visible against the cream checkout backdrop. Selector switched
   from `.disabled` (class) to `:disabled` (attribute) because the JS now
   toggles the real HTML attribute via prop("disabled", …) — the class
   path no longer fires. */
.checkout-page #place-order-btn:disabled {
    background-color: #9ca3af !important;        /* gray-400 — readable on cream */
    border-color: #9ca3af !important;
    color: #ffffff !important;
    opacity: 1 !important;
    cursor: not-allowed;
    box-shadow: none;
}

/* Discount Apply button — rose accent rather than plain black. */
.checkout-page .apply-discount-btn {
    background-color: #be123c !important;                   /* rose-700 */
    border-color: #be123c !important;
}
.checkout-page .apply-discount-btn:hover { background-color: #9f1239 !important; } /* rose-800 */

/* Subtle divider between the form column and the summary column on desktop. */
@media (min-width: 1024px) {
    .checkout-page > div.px-4.grid {
        position: relative;
    }
    .checkout-page > div.px-4.grid::before {
        content: "";
        position: absolute;
        top: 1rem;
        bottom: 1rem;
        left: 50%;
        width: 1px;
        background: linear-gradient(to bottom, transparent, rgba(244,192,192,0.55), transparent);
        pointer-events: none;
    }
}

.line-clamp-1 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
}
.line-clamp-2 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}
.line-clamp-3 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
}

/* Sidebar body bg — same neutral family as the main canvas (gray-50)
   but a hair lighter (white) so the sidebar reads as the lightest surface.
   The 1-px right border gives a clean seam against the gray-50 main area
   so the two surfaces don't merge into one undifferentiated wash. */
.admin-sidebar-bg {
    background: #ffffff;
    border-right: 1px solid #e5e7eb;   /* gray-200 — visible without being heavy */
}

/* ============================================================
   Sidebar nav links — Other_platform-style with orange accent.
   ------------------------------------------------------------
   Idle  : subtle gray hover, no border / shadow.
   Active: white pill + 3px orange left-accent + bolder text +
           orange icon, plus a faint 1px shadow so the pill lifts
           off the slate-50 background.
   Hover : 5% slate tint — barely visible but tactile.
   ============================================================ */
.sidebar-link {
    transition: background-color 0.15s ease,
                color           0.15s ease,
                box-shadow      0.15s ease;
}
.sidebar-link svg {
    transition: color 0.15s ease;
}

/* Hover (only when not already active) */
.sidebar-link:not(.is-active):hover {
    background-color: rgba(15, 23, 42, 0.05); /* slate-900/5 */
    color: #111827;                            /* gray-900 */
}
.sidebar-link:not(.is-active):hover svg {
    color: #111827;
}

/* Active pill — premium upgrade (Phase 5 of plan-dashboard.md).
   - Flat gray-100 → subtle papaya gradient (warm cream wash that fades
     to nearly transparent on the right, so the eye is led IN to the
     active item from the brick accent bar without the row screaming).
   - #dd6400 orange (rogue, not in brand palette) → var(--scy-brick)
     (brand red) for the left accent + icon, matching the brand-token
     hierarchy used everywhere else.
   - Slightly stronger lift shadow so the row gently rises off the
     surrounding rows on hover/active. */
.sidebar-link.is-active {
    background-image: linear-gradient(
        90deg,
        rgba(253, 240, 213, 0.85),       /* --scy-papaya at 85% — full warmth at the left */
        rgba(253, 240, 213, 0.20) 70%,   /* fades by 70% across the row */
        rgba(253, 240, 213, 0.00)        /* clean to transparent at the right edge */
    );
    color: #111827;
    font-weight: 600;
    box-shadow:
        inset 3px 0 0 var(--scy-brick),  /* brand-brick left accent */
        0 1px 2px 0 rgba(0, 0, 0, 0.06); /* subtle lift */
    text-decoration: none;
}
.sidebar-link.is-active svg {
    color: var(--scy-brick);
}

/* Collapsible nav groups (Sales, Catalog, Customers, etc.) using
   native <details>/<summary>. PHP marks the group `open` when the
   current page belongs inside it, so navigating to a sub-page keeps
   its parent group expanded. */
.sidebar-group {
    list-style: none;
}
.sidebar-group > summary {
    list-style: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.4rem 0.75rem;
    margin-top: 0.375rem;  /* tighter than nav-row gap so groups read as section titles */
    color: #4b5563;        /* gray-600 — AA contrast on slate-50 */
    font-size: 0.7rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em; /* slight extra tracking for premium-section-header feel */
    user-select: none;
    border-radius: 0.375rem;
}
.sidebar-group > summary::-webkit-details-marker { display: none; }
.sidebar-group > summary::marker { content: ''; }
.sidebar-group > summary:hover {
    background: rgba(0,0,0,0.03);
    color: #111827;        /* gray-900 */
}
/* Group-heading icon + label — they sit together on the left of the
   <summary>; the chevron stays right (summary is justify-content:space-between). */
.sidebar-group-label {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    min-width: 0;
}
.sidebar-group-icon {
    width: 1.125rem;
    height: 1.125rem;
    flex-shrink: 0;
    color: #6b7280;        /* gray-500 — matches the sub-item icons */
    transition: color 0.15s ease;
}
.sidebar-group > summary:hover .sidebar-group-icon {
    color: #111827;        /* gray-900 — tracks the label on hover */
}
/* Sub-menu rows nest under their group heading: indented right, and their
   icons render smaller than the 18px heading icon so the parent/child
   hierarchy reads at a glance. Scoped to .sidebar-group-list — top-level
   rows (Home, Settings, SEO audit, Documentation) keep full size + indent.
   Colour stays owned by admin-brand.css (.sidebar-link svg). */
.sidebar-group-list .sidebar-link {
    padding-left: 2.25rem;
}
.sidebar-group-list .sidebar-link svg {
    width: 0.875rem;       /* 14px — smaller than the heading icon */
    height: 0.875rem;
}
.sidebar-group .sidebar-chevron {
    width: 14px;
    height: 14px;
    color: #9ca3af;        /* gray-400 */
    transition: transform 0.15s ease;
    flex-shrink: 0;
}
.sidebar-group[open] .sidebar-chevron {
    transform: rotate(180deg);
}
.sidebar-group-list {
    margin-top: 0.125rem;
    padding: 0;
    list-style: none;
}
.no-underline {
    text-decoration-line: none !important;
}

.highlight {
    box-shadow: 0px 0px 3px red inset;
}

.ui-state-highlight {
    border: 1px solid #000000;
    background: #e3e3e3;
    border-color: #c1c1c1;
    border-radius: 10px;
}

.disabled-field {
    opacity: 0.6;
    pointer-events: none; /* prevent editing */
}

.submenu-hidden {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}
.submenu-transition {
  will-change: max-height;
}
.rotate-chevron {
  transform: rotate(180deg);
  transition: transform 0.3s ease;
}
/* width */
::-webkit-scrollbar {
    width: 8px;
}
 
/* Track */
::-webkit-scrollbar-track {
    background: #eaeaea;
    border-radius: 5px;
}
 
/* Handle */
::-webkit-scrollbar-thumb {
    background: #c5c5c5;
    border-radius: 5px;
}
 
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
    background: #555;
}
body {
    font-size: 14px!important;
}
.ssr_toast {
    text-align: center;
    margin-bottom: 25px;
    height: 40px;
    bottom:-100px;
    width: auto;
    position: fixed;
    left: 50%;
    transform: translate(-50%, 0%);
    transition: 500ms;
    transition-property: bottom;
    /* Above nx-modal (100) / nx-drawer (110) / nx-toast-region (200) so toasts
       are never hidden behind an open popup. */
    z-index: 2000;
}
.ssr_toast span {
    padding: 10px;
    min-width: 100px;
    text-align: center;
    border-radius: 7px;
    box-shadow: rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px;
    color: white;
    transition: 200ms;
    width: auto;
    display: inline-block;
}
.option-value-error {
    box-shadow: inset 0px 0px 2px red;
}
/* FOOTER MENU ACTIVATION */
.footer-menu-active {
    text-decoration: underline;
    font-weight: 500;
    color: #ffffff;
}
.disabled {
    pointer-events: none;
    opacity: 0.5;
    color: #ffffff !important;
    background-color: #888888 !important;
    border-color: #888888 !important;
    cursor: not-allowed !important;
    text-decoration: none !important;
    user-select: none;
    box-shadow: none!important;
}

.disabled-input {
    pointer-events: none;
    opacity: 0.5;
    color: #0c0c0c !important;
    background-color: #d9d9d9 !important;
    cursor: not-allowed !important;
    text-decoration: none !important;
}
/* Duplicate definition — flattened to match the override above so neither
   wins-by-cascade with a shadow. Kept the class so existing templates
   continue to render a flat bordered card without per-file edits. */
.content-card-shadow {
    box-shadow: none;
    border: 1px solid #e5e7eb;
}
.no-underline {
    text-decoration-line: none !important;
}
.selected-collection {
    border: 1px solid pink;
}

/* Custom animations */
@keyframes slideIn {
    from { transform: translateX(-100%); }
    to { transform: translateX(0); }
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

.menu-slide-in {
    animation: slideIn 0.3s ease-out forwards;
}

.backdrop-fade-in {
    animation: fadeIn 0.3s ease-out forwards;
}


/* Custom styles for active menu items */
.menu-item.active {
    color: #dd6400;
}

/* smooth submenu open/close */
.submenu-transition {
  transition: max-height 0.3s ease, opacity 0.3s ease;
  overflow: hidden;
}
.submenu-hidden {
  max-height: 0;
  opacity: 0;
  pointer-events: none;
}
.submenu-visible {
  max-height: 500px; /* enough space for multiple links */
  opacity: 1;
  pointer-events: auto;
}

/* chevron rotation */
.rotate-chevron {
  transform: rotate(180deg);
  transition: transform 0.3s ease;
}

/* ===================================================================
   Shared account-page shell (/my-account/* templates)
   -------------------------------------------------------------------
   Lives here (not inside individual section <style> blocks) so every
   account page picks up the layout — orders, wishlist, profile,
   view-order, addresses. Each section's own <style> block adds page-
   specific styling on top.
   =================================================================== */
.scy-account-page {
    background: #ffffff;
    padding: 1.25rem 0 3rem;
}
/* Wave 2 (post-F-1) — sidebar removed across all customer-account
   pages. Was a 2-column grid (16rem nav + 1fr main); now a centered
   single-column that mirrors the dashboard's max-w-5xl layout. The
   per-page sub-nav lives in the dashboard's quick-link tiles, not in
   a persistent left rail. .scy-account-page__nav rules removed; if any
   future page wants the rail back, redeclare locally. */
.scy-account-page__shell {
    max-width: 64rem;            /* matches dashboard's max-w-5xl */
    margin: 0 auto;
    padding: 0 1rem;
}
@media (min-width: 640px) {
    .scy-account-page__shell { padding: 0 1.5rem; }
}
@media (min-width: 1024px) {
    .scy-account-page         { padding: 2rem 0 4rem; }
    .scy-account-page__shell  { padding: 0 2rem; }
}
.scy-account-page__main {
    min-width: 0;                /* defensive */
}

/* Wave 2 — back-to-dashboard link, shared across non-dashboard
   account pages. Sits above the page H1, mirrors the back link on
   the view-order page. */
.scy-account-back {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    font-size: 0.85rem;
    color: #6b7280;
    text-decoration: none;
    margin-bottom: 0.75rem;
    transition: color .15s;
}
.scy-account-back:hover { color: var(--color-accent, #ff4d00); }
.scy-account-back i { font-size: 0.75rem; }

/* ============================================================
   Storefront auth pages — shared shell.
   Used by: main-login.twig, main-create-account.twig,
            main-forgot-password.twig, main-reset-password.twig.

   One pattern, four pages. Centered card on a warm-cream wash,
   brand mark at top, eyebrow + title + lede, branded form, footer
   link strip. Brand palette via existing storefront vars where
   available; hardcoded hex for tokens that aren't surfaced yet
   on the storefront side.
============================================================ */
.scy-auth-page {
    min-height: 70vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 3rem 1.25rem 5rem;
    background: linear-gradient(180deg, #fbfaf6 0%, #fdf0d5 240%);
}

.scy-auth-card {
    width: 100%;
    max-width: 420px;
    background: #ffffff;
    border: 1px solid #efe8d6;
    border-radius: 14px;
    padding: 2rem 2rem 1.75rem;
    box-shadow: 0 12px 40px -20px rgba(0, 48, 73, 0.18);
    position: relative;
}
@media (max-width: 480px) {
    .scy-auth-card { padding: 1.5rem 1.25rem 1.25rem; border-radius: 12px; }
}

/* Brand mark (lava→brick gradient chip) */
.scy-auth-card__brand {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 11px;
    background: linear-gradient(135deg, #ff4d00 0%, #ff6a1a 100%);
    color: #fdf0d5;
    font-size: 1.1rem;
    font-weight: 800;
    margin-bottom: 1.1rem;
    box-shadow: 0 1px 2px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.15);
}

.scy-auth-card__eyebrow {
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: #669bbc;
    margin: 0 0 .25rem;
}
.scy-auth-card__title {
    font-size: 1.5rem;
    font-weight: 700;
    color: #003049;
    margin: 0 0 .35rem;
    letter-spacing: -.01em;
    line-height: 1.2;
}
.scy-auth-card__lede {
    font-size: .85rem;
    color: #475569;
    line-height: 1.5;
    margin: 0 0 1.5rem;
}

/* Form layout */
.scy-auth-form {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}
.scy-auth-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: .85rem;
}
@media (max-width: 480px) {
    .scy-auth-row { grid-template-columns: 1fr; }
}
.scy-auth-field {
    display: flex;
    flex-direction: column;
    gap: .35rem;
}
.scy-auth-label {
    font-size: .8rem;
    font-weight: 600;
    color: #003049;
    margin: 0;
}
.scy-auth-input-wrap {
    position: relative;
}
.scy-auth-input {
    width: 100%;
    padding: .65rem .85rem;
    font-size: .9rem;
    color: #0f172a;
    background: #fff;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    transition: border-color .15s ease, outline-color .15s ease;
    font-family: inherit;
    box-sizing: border-box;
    /* Hard rule: no shadow on inputs (per design directive). Focus
       indicator below uses `outline`, which doesn't paint as a shadow. */
    box-shadow: none !important;
}
.scy-auth-input:focus {
    border-color: #669bbc;
    outline: 2px solid rgba(102, 155, 188, .55);
    outline-offset: 1px;
}
.scy-auth-input--has-button {
    padding-right: 2.75rem;
}

/* Hard guarantee: no input element inside the auth card carries a
   box-shadow (Tailwind's shadow-sm pattern, browser defaults, etc.). */
.scy-auth-card input,
.scy-auth-card select,
.scy-auth-card textarea {
    box-shadow: none !important;
}

/* ============================================================
   Empty-state pages — shared shell.

   Used by: main-404.twig, main-no-shop.twig, main-no-event.twig,
            main-something-went-wrong.twig.

   (main-no-product.twig has its own self-contained styles and
   keeps them — it pre-dates this shell. The four "global" empty
   states share this scaffolding so they read as a family.)

   Layout:
     [ warm-cream → papaya gradient page wash      ]
       [ Centered card 480px                       ]
         [ Icon chip 64×64 — papaya + lava        ]
         [ Eyebrow + title + lede                  ]
         [ Primary CTA + ghost CTA                 ]
         [ Optional search form (404 uses this)    ]
============================================================ */
.scy-empty-state {
    --es-blue:    #003049;
    --es-lava:    #ff6a1a;
    --es-brick:   #ff4d00;
    --es-papaya:  #fdf0d5;
    --es-steel:   #669bbc;
    --es-warm:    #efe8d6;
    --es-soft:    #fbfaf6;

    min-height: 70vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 4rem 1.25rem 6rem;
    background: linear-gradient(180deg, var(--es-soft) 0%, var(--es-papaya) 240%);
}
@media (max-width: 540px) {
    .scy-empty-state { padding: 2.5rem 1rem 4rem; min-height: 60vh; }
}

.scy-empty-state__card {
    width: 100%;
    max-width: 480px;
    background: #ffffff;
    border: 1px solid var(--es-warm);
    border-radius: 16px;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04),
                0 24px 48px -28px rgba(0, 48, 73, .18);
    padding: 2.5rem 2rem;
    text-align: center;
}
@media (max-width: 540px) {
    .scy-empty-state__card { padding: 2rem 1.5rem; border-radius: 14px; }
}

.scy-empty-state__icon {
    width: 64px;
    height: 64px;
    margin: 0 auto 1.25rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--es-papaya);
    color: var(--es-lava);
    border-radius: 18px;
    font-size: 1.6rem;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .55),
                0 1px 2px rgba(255, 106, 26, .12);
    position: relative;
}
/* Decorative "X" badge for missing/cancelled states (404, no-event).
   Opt in via .scy-empty-state__icon--xmark. */
.scy-empty-state__icon--xmark::after {
    content: "\f00d"; /* fa-xmark */
    font-family: "Font Awesome 6 Free", "Font Awesome 5 Free", "FontAwesome";
    font-weight: 900;
    position: absolute;
    right: -6px; bottom: -4px;
    width: 22px; height: 22px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--es-brick);
    color: #fff;
    border-radius: 50%;
    font-size: .65rem;
    box-shadow: 0 0 0 3px #ffffff;
}

.scy-empty-state__eyebrow {
    margin: 0 0 .35rem;
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--es-steel);
}
.scy-empty-state__title {
    margin: 0 0 .5rem;
    font-size: clamp(1.4rem, 2.8vw, 1.7rem);
    font-weight: 700;
    color: var(--es-blue);
    letter-spacing: -.015em;
    line-height: 1.2;
}
.scy-empty-state__lede {
    margin: 0 0 1.5rem;
    font-size: .9rem;
    line-height: 1.55;
    color: #475569;
    max-width: 38ch;
    margin-left: auto;
    margin-right: auto;
}

/* Actions row */
.scy-empty-state__actions {
    display: flex;
    flex-wrap: wrap;
    gap: .65rem;
    justify-content: center;
    margin-bottom: .25rem;
}
.scy-empty-state__btn {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    padding: .65rem 1rem;
    font-size: .85rem;
    font-weight: 600;
    border-radius: 10px;
    border: 1px solid transparent;
    cursor: pointer;
    text-decoration: none;
    transition: background-color .15s ease, color .15s ease,
                border-color .15s ease, transform .12s ease;
    font-family: inherit;
}
.scy-empty-state__btn:active { transform: translateY(1px); }
.scy-empty-state__btn--primary {
    background: var(--es-blue);
    color: var(--es-papaya);
}
.scy-empty-state__btn--primary:hover { background: #002338; color: #fff; }
.scy-empty-state__btn--ghost {
    background: #ffffff;
    color: var(--es-blue);
    border-color: var(--es-warm);
}
.scy-empty-state__btn--ghost:hover {
    background: var(--es-soft);
    border-color: var(--es-steel);
    color: var(--es-blue);
}
.scy-empty-state__btn--brick {
    background: var(--es-brick);
    color: #fff;
}
.scy-empty-state__btn--brick:hover { background: var(--es-lava); color: #fff; }

/* Optional search row (404 surfaces this) */
.scy-empty-state__search {
    margin-top: 1.5rem;
    padding-top: 1.5rem;
    border-top: 1px dashed var(--es-warm);
}
.scy-empty-state__search-label {
    display: block;
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--es-steel);
    margin-bottom: .5rem;
}
.scy-empty-state__search-row {
    position: relative;
    display: flex;
    align-items: center;
}
/* Position any direct-child Font Awesome icon (envelope, magnifying-glass,
   etc.) as a leading glyph inside the input. Avoids forcing a specific
   class on the icon — useful since the no-shop variant uses fa-envelope
   while the 404 search uses fa-magnifying-glass. */
.scy-empty-state__search-row > i {
    position: absolute;
    left: .85rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--es-steel);
    font-size: .8rem;
    pointer-events: none;
    z-index: 1;
}
.scy-empty-state__search-input {
    flex: 1;
    padding: .65rem .85rem .65rem 2.1rem;
    font-size: .9rem;
    color: #0f172a;
    background: #fff;
    border: 1px solid var(--es-warm);
    border-radius: 10px 0 0 10px;
    border-right: none;
    outline: none;
    transition: border-color .15s ease;
    box-shadow: none !important;
    font-family: inherit;
}
.scy-empty-state__search-input:focus {
    border-color: var(--es-steel);
    outline: 2px solid rgba(102, 155, 188, .35);
    outline-offset: -1px;
}
.scy-empty-state__search-submit {
    padding: .65rem 1rem;
    background: var(--es-blue);
    color: var(--es-papaya);
    font-size: .85rem;
    font-weight: 600;
    border: 1px solid var(--es-blue);
    border-radius: 0 10px 10px 0;
    cursor: pointer;
    transition: background-color .15s ease;
    font-family: inherit;
}
.scy-empty-state__search-submit:hover { background: #002338; }

/* Inline newsletter form (no-shop uses this) */
.scy-empty-state__newsletter {
    margin-top: 1.25rem;
    padding-top: 1.25rem;
    border-top: 1px dashed var(--es-warm);
    text-align: left;
}
.scy-empty-state__newsletter-label {
    font-size: .75rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--es-steel);
    text-align: center;
    margin: 0 0 .5rem;
    display: block;
}

/* Soft footer link below the card */
.scy-empty-state__footer {
    max-width: 480px;
    margin: 1rem auto 0;
    text-align: center;
    font-size: .82rem;
    color: #64748b;
}
.scy-empty-state__footer a {
    color: var(--es-blue);
    font-weight: 600;
    text-decoration: underline;
    text-decoration-color: rgba(102, 155, 188, .55);
    text-underline-offset: 2px;
}
.scy-empty-state__footer a:hover {
    color: var(--es-lava);
    text-decoration-color: var(--es-lava);
}

/* ============================================================
   Static "doc" pages — about, contact, careers, all policies.
   Wraps the editor's raw HTML in a polished document shell so
   the typography reads as intentional even when the body is
   plain <h2>/<h3>/<p>/<ul> from HTMLPurifier.

   Used by theme/storefront/sections/main-page.twig.

   Layout:
     [ warm cream wash background                     ]
       [ centered header — eyebrow + title + lede ]
       [ centered white card — content lives here ]
       [ centered "still have questions" footer   ]
============================================================ */
.scy-doc-page {
    --doc-text:    #1f2937;
    --doc-blue:    #003049;
    --doc-lava:    #ff6a1a;
    --doc-papaya:  #fdf0d5;
    --doc-steel:   #669bbc;
    --doc-warm:    #efe8d6;
    --doc-soft:    #fbfaf6;

    background: linear-gradient(180deg, var(--doc-soft) 0%, #ffffff 60%);
    padding: 3rem 1.25rem 5rem;
}
@media (min-width: 1024px) {
    .scy-doc-page { padding: 4rem 1.25rem 6rem; }
}

/* ---- Header ---- */
.scy-doc-page__header {
    max-width: 760px;
    margin: 0 auto 1.75rem;
    text-align: center;
}
.scy-doc-page__eyebrow {
    margin: 0 0 .4rem;
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--doc-steel);
}
.scy-doc-page__title {
    margin: 0;
    font-size: clamp(1.5rem, 3.4vw, 2.1rem);
    font-weight: 700;
    color: var(--doc-blue);
    letter-spacing: -0.015em;
    line-height: 1.2;
}
.scy-doc-page__lede {
    margin: .65rem auto 0;
    max-width: 56ch;
    font-size: .92rem;
    line-height: 1.6;
    color: #475569;
}

/* ---- Card ---- */
.scy-doc-page__card {
    max-width: 760px;
    margin: 0 auto;
    background: #ffffff;
    border: 1px solid var(--doc-warm);
    border-radius: 14px;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04),
                0 24px 48px -32px rgba(0, 48, 73, .15);
    padding: 2rem 1.5rem;
    overflow-wrap: break-word;
}
@media (min-width: 768px) {
    .scy-doc-page__card { padding: 2.75rem 3rem; }
}

/* ---- Body typography ---- */
/* These rules apply to whatever HTML lives inside the card —
   raw <h2>, <h3>, <p>, <ul>, <ol>, <a>, <strong>, <em>, <code>,
   <blockquote>. Works without any class attributes (HTMLPurifier
   strips them by default), so admin edits via the Quill editor
   keep this design. */

.scy-doc-page__body { color: var(--doc-text); font-size: .95rem; line-height: 1.65; }

/* Headings */
.scy-doc-page__body h1,
.scy-doc-page__body h2 {
    color: var(--doc-blue);
    font-size: 1.4rem;
    font-weight: 700;
    letter-spacing: -.01em;
    line-height: 1.25;
    margin: 2rem 0 .75rem;
    padding-bottom: .55rem;
    border-bottom: 1px solid var(--doc-warm);
}
.scy-doc-page__body > h1:first-child,
.scy-doc-page__body > h2:first-child { margin-top: 0; }

.scy-doc-page__body h3 {
    color: var(--doc-blue);
    font-size: 1.05rem;
    font-weight: 700;
    letter-spacing: -.005em;
    margin: 1.75rem 0 .55rem;
    line-height: 1.3;
    position: relative;
    padding-left: .85rem;
}
.scy-doc-page__body h3::before {
    content: "";
    position: absolute;
    left: 0;
    top: .3em;
    bottom: .3em;
    width: 3px;
    border-radius: 2px;
    background: linear-gradient(180deg, var(--doc-lava), #ff4d00);
}

.scy-doc-page__body h4 {
    color: var(--doc-blue);
    font-size: .95rem;
    font-weight: 700;
    margin: 1.25rem 0 .35rem;
    line-height: 1.3;
}

/* Paragraphs */
.scy-doc-page__body p {
    margin: 0 0 1rem;
    color: var(--doc-text);
}
.scy-doc-page__body p + p { margin-top: -.25rem; }
.scy-doc-page__body p:last-child { margin-bottom: 0; }

/* Lists */
.scy-doc-page__body ul,
.scy-doc-page__body ol {
    margin: .35rem 0 1.1rem;
    padding-left: 1.4rem;
}
.scy-doc-page__body li {
    margin: .35rem 0;
    color: var(--doc-text);
    line-height: 1.6;
}
.scy-doc-page__body li::marker {
    color: var(--doc-steel);
    font-weight: 600;
}
.scy-doc-page__body ol {
    counter-reset: doc-ol;
    list-style: none;
    padding-left: 1.6rem;
}
.scy-doc-page__body ol > li {
    counter-increment: doc-ol;
    position: relative;
    padding-left: .25rem;
}
.scy-doc-page__body ol > li::before {
    content: counter(doc-ol) ".";
    position: absolute;
    left: -1.6rem;
    top: 0;
    width: 1.4rem;
    text-align: right;
    color: var(--doc-lava);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

/* Inline */
.scy-doc-page__body a {
    color: var(--doc-blue);
    text-decoration: underline;
    text-decoration-color: rgba(102, 155, 188, .55);
    text-underline-offset: 2px;
    text-decoration-thickness: 1.5px;
    transition: color .15s ease, text-decoration-color .15s ease;
}
.scy-doc-page__body a:hover {
    color: var(--doc-lava);
    text-decoration-color: var(--doc-lava);
}

.scy-doc-page__body strong {
    color: var(--doc-blue);
    font-weight: 700;
}

.scy-doc-page__body em {
    color: #475569;
    font-style: italic;
}

.scy-doc-page__body code {
    background: var(--doc-soft);
    color: var(--doc-lava);
    border: 1px solid var(--doc-warm);
    border-radius: 5px;
    padding: .12rem .4rem;
    font-size: .85em;
    font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
}

/* Effective-date row — every legal page ends with `<em>Last updated: …</em>`
   inside a <p>. Boost it visually so it reads as a subtle footer-stamp. */
.scy-doc-page__body p:last-child em:only-child,
.scy-doc-page__body p:has(> em:only-child):last-child {
    display: block;
    margin-top: 2rem;
    padding-top: 1rem;
    border-top: 1px dashed var(--doc-warm);
    color: var(--doc-steel);
    font-size: .8rem;
    text-align: right;
    letter-spacing: .02em;
}

/* Blockquote (rare in policies but allowed by purifier) */
.scy-doc-page__body blockquote {
    margin: 1.25rem 0;
    padding: .85rem 1.1rem;
    background: var(--doc-papaya);
    border-left: 4px solid var(--doc-lava);
    border-radius: 0 8px 8px 0;
    color: var(--doc-blue);
    font-style: italic;
}

/* Tables (if any) */
.scy-doc-page__body table {
    width: 100%;
    border-collapse: collapse;
    margin: 1rem 0 1.25rem;
    font-size: .9rem;
}
.scy-doc-page__body th,
.scy-doc-page__body td {
    padding: .55rem .75rem;
    border-bottom: 1px solid var(--doc-warm);
    text-align: left;
}
.scy-doc-page__body th {
    background: var(--doc-soft);
    color: var(--doc-blue);
    font-weight: 700;
    font-size: .78rem;
    letter-spacing: .04em;
    text-transform: uppercase;
}

/* HR */
.scy-doc-page__body hr {
    margin: 1.75rem 0;
    border: 0;
    border-top: 1px solid var(--doc-warm);
}

/* ---- Footer ---- */
.scy-doc-page__footer {
    max-width: 760px;
    margin: 1.75rem auto 0;
    text-align: center;
    color: #64748b;
    font-size: .85rem;
}
.scy-doc-page__footer a {
    color: var(--doc-blue);
    font-weight: 600;
    text-decoration: underline;
    text-decoration-color: rgba(102, 155, 188, .5);
    text-underline-offset: 2px;
}
.scy-doc-page__footer a:hover {
    color: var(--doc-lava);
    text-decoration-color: var(--doc-lava);
}

/* Eye toggle inside password field */
.scy-auth-eye {
    position: absolute;
    right: .65rem;
    top: 50%;
    transform: translateY(-50%);
    color: #94a3b8;
    background: transparent;
    border: 0;
    padding: .25rem;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 6px;
    transition: color .15s ease, background-color .15s ease;
}
.scy-auth-eye:hover {
    color: #003049;
    background: #fbfaf6;
}
.scy-auth-eye:focus {
    outline: 2px solid rgba(102,155,188,.35);
    outline-offset: 1px;
}

/* Helper line: forgot link, T&Cs etc. */
.scy-auth-helper {
    font-size: .78rem;
    color: #64748b;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: .5rem;
    line-height: 1.4;
    margin-top: -.25rem;
}
.scy-auth-helper a {
    color: #003049;
    font-weight: 600;
    text-decoration: none;
}
.scy-auth-helper a:hover {
    color: #ff6a1a;
    text-decoration: underline;
}

/* Submit — consumes the theme palette (set on :root by the theme layout) so the
   button matches the merchant's brand. Falls back to the legacy navy when no
   theme token is present (e.g. a non-theme context). */
.scy-auth-submit {
    width: 100%;
    padding: .75rem 1rem;
    background: var(--color-primary, #003049);
    color: var(--color-primary-on, #fdf0d5);
    border: 1px solid transparent;
    border-radius: 10px;
    font-size: .9rem;
    font-weight: 600;
    cursor: pointer;
    transition: background-color .15s ease, transform .12s ease;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    margin-top: .25rem;
    font-family: inherit;
}
.scy-auth-submit:hover {
    background: var(--color-primary-hover, var(--color-accent, #002338));
    color: var(--color-primary-on, #ffffff);
}
.scy-auth-submit:active { transform: translateY(1px); }
.scy-auth-submit[disabled],
.scy-auth-submit.disabled,
.scy-auth-submit.is-loading {
    opacity: .55;
    cursor: not-allowed;
    pointer-events: none;
}

/* Footer link strip below the form */
.scy-auth-footer {
    margin-top: 1.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid #efe8d6;
    text-align: center;
    font-size: .82rem;
    color: #64748b;
}
.scy-auth-footer a {
    color: #003049;
    font-weight: 600;
    text-decoration: none;
    margin-left: .25rem;
}
.scy-auth-footer a:hover {
    color: #ff6a1a;
    text-decoration: underline;
}
.scy-auth-footer--split {
    display: flex;
    justify-content: center;
    gap: .75rem;
    align-items: center;
}
.scy-auth-footer--split span { color: #cbd5e1; }

/* Inline banners */
.scy-auth-banner {
    display: flex;
    align-items: flex-start;
    gap: .65rem;
    padding: .7rem .9rem;
    border-radius: 10px;
    border-left: 3px solid;
    font-size: .82rem;
    line-height: 1.4;
    margin-bottom: 1.1rem;
}
.scy-auth-banner--ok {
    background: rgba(34,197,94,.08);
    border-left-color: #16a34a;
    color: #14532d;
}
.scy-auth-banner--err {
    background: rgba(255,77,0,.08);
    border-left-color: #ff4d00;
    color: #7f1d1d;
}
.scy-auth-banner i { flex: none; margin-top: .15rem; }

/* Password strength meter */
.scy-pwd-meter {
    display: flex;
    flex-direction: column;
    gap: .45rem;
    margin-top: .4rem;
}
.scy-pwd-meter__bars {
    display: flex;
    gap: 4px;
}
.scy-pwd-meter__bar {
    flex: 1;
    height: 4px;
    border-radius: 999px;
    background: #efe8d6;
    transition: background-color .15s ease;
}
.scy-pwd-meter__bar.is-on        { background: #f59e0b; }     /* 1 — weak */
.scy-pwd-meter__bar.is-on--ok    { background: #003049; }     /* 2 — ok */
.scy-pwd-meter__bar.is-on--strong{ background: #16a34a; }     /* 3 — strong */

.scy-pwd-meter__rules {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: .15rem;
    font-size: .72rem;
    color: #64748b;
}
.scy-pwd-meter__rules li {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    transition: color .15s ease;
}
.scy-pwd-meter__rules li::before {
    content: "○";
    color: #cbd5e1;
    font-size: .85rem;
    line-height: 1;
}
.scy-pwd-meter__rules li.is-met {
    color: #14532d;
}
.scy-pwd-meter__rules li.is-met::before {
    content: "✓";
    color: #16a34a;
    font-weight: 700;
}

