/**
 * Celebriti Fashion — site-specific overrides.
 *
 * Everything in this file is OUR customization on top of the "Ethics" template's
 * vendor stylesheets (bootstrap.min.css, style.css). Those two files stay pristine/
 * unmodified so template updates or diffs against the original are clean; every
 * deviation from the template lives here instead, loaded last so it wins the cascade.
 *
 * Sections below are ordered by when they were introduced. Keep it that way —
 * one rule (or tightly related group) per change, with a comment saying why.
 */

/* ==========================================================================
   Utilities
   ========================================================================== */

/**
 * Full-bleed section: use on the direct child of a section wrapper (alongside
 * Bootstrap's `.container`) to make that section's content span the full
 * viewport width instead of being capped at the boxed `.container` max-width.
 * Reserved for hero banners, product/category grids, and promo image blocks —
 * NOT for text-heavy or form content, which should stay in `.container` alone
 * for readability. See CLAUDE.md "Edge-to-edge layout" for the full rule.
 *
 * Usage: <div class="container full-bleed"> ... </div>
 *
 * The nested `.row` reset is required, not optional: Bootstrap's `.row` ships
 * a `margin-left/right: -12px` specifically to cancel `.container`'s own
 * 12px padding. Zeroing the container's padding without also zeroing the
 * row's margin leaves that -12px with nothing to cancel, so the row (and
 * everything in it) hangs 12px past the viewport edge on both sides —
 * introducing a horizontal scrollbar site-wide. This is why edge-to-edge
 * sections started scrolling horizontally; fix lives here so every current
 * and future `.full-bleed` section gets it for free.
 */
.full-bleed {
    max-width: 100%;
    padding-left: 0;
    padding-right: 0;
}
.full-bleed > .row {
    margin-left: 0;
    margin-right: 0;
}

/* ==========================================================================
   Header logo (header1 variant — every non-home page)
   ========================================================================== */

/**
 * header.header1 has no width constraint on its logo <img> in the vendor CSS —
 * it silently relied on the old template logo's small native SVG size. Our
 * replacement logo file has no such implicit size, so it rendered at full
 * native resolution and overlapped the page. Matches header.header4 (home
 * page)'s own explicit 114px rule.
 */
header.header1 .header-logo a img {
    width: 114px;
}

/**
 * The sticky header (header.header1.sticky, toggled by main.js on scroll)
 * inherits header.header1's own padding, which the vendor CSS only ever
 * shrinks once (to `20px 2%` under 1199px) and never again — so a phone
 * gets the exact same padding as a small tablet. Combined with the 114px
 * logo above (also flat, no mobile reduction), the sticky bar came out to
 * ~154px tall on a 390px-wide phone, eating close to a fifth of the
 * viewport. Shrink both the padding and the logo further at the two
 * smaller breakpoints already used elsewhere on the site (767px, 576px).
 */
@media (max-width: 1199px) {
    header.header1 {
        padding: 12px 4%;
    }
    header.header1 .header-logo a img {
        width: 84px;
    }
}
@media (max-width: 767px) {
    header.header1 {
        padding: 10px 4%;
    }
    header.header1 .header-logo a img {
        width: 68px;
    }
}
@media (max-width: 576px) {
    header.header1 {
        padding: 8px 4%;
    }
    header.header1 .header-logo a img {
        width: 56px;
    }
}

/* ==========================================================================
   Product card quick-view overlay — click-through fix
   ========================================================================== */

/**
 * The `.overlay` div (Add to Cart button, shown on hover) is absolutely
 * positioned on top of the product image's own link, at 100% width/height.
 * It has no pointer-events rule, so once visible on hover it intercepted
 * clicks across the whole image — including empty space with no button —
 * blocking the underlying link to the product page. Only the small icon
 * buttons inside it (cart-area, wishlist/quick-view) should stay clickable.
 */
.product-card .product-card-img .overlay {
    pointer-events: none;
}
.product-card .product-card-img .overlay .cart-area,
.product-card .product-card-img .overlay .view-and-favorite-area {
    pointer-events: auto;
}

/* ==========================================================================
   Discount section (home page) — readable text over photo banners
   ========================================================================== */

/**
 * Three of the four discount-section cards used dark text (var(--title-color)
 * / #2E2E2E) meant for a light background, but sit on top of photos — making
 * them unreadable. Match the one card that already used white correctly.
 */
.home2-discount-section .discount-section-right-section.style-2 .right-section-content a {
    color: var(--white-color);
    background: linear-gradient(to bottom, var(--white-color) 0%, var(--white-color) 98%);
}
.home2-discount-section .discount-section-right-section .right-section-content span {
    color: var(--white-color);
}
.home2-discount-section .discount-section-right-section .right-section-content h4 {
    color: var(--white-color);
}
.home2-discount-section .discount-section-right-section .right-section-content .shop-now-btn {
    border-color: var(--white-color);
    color: var(--white-color);
}
.home2-discount-section .discount-section-right-section .discount-section-bottom-content h4 {
    color: var(--white-color);
}

/* ==========================================================================
   Breadcrumb hero (every inner page) — shorter, with text nudged up
   ========================================================================== */

/**
 * Client wanted the breadcrumb hero shorter (~40% cut from the bottom) while
 * keeping the same top padding. Zeroing padding-bottom is the practical limit
 * via padding alone (see conversation history for the exact math) — gets to
 * ~35.6% without also touching padding-top.
 */
.breadcrumb-section {
    padding-bottom: 0;
}
@media (max-width: 991px) {
    .breadcrumb-section {
        padding-bottom: 0;
    }
}
@media (max-width: 576px) {
    .breadcrumb-section {
        padding-bottom: 0;
    }
}

/**
 * With padding-bottom removed, the heading/breadcrumb text sat flush against
 * the bottom edge of the hero image. Shift it up via transform (visual only,
 * doesn't affect the section's box height, so the hero stays the same size).
 */
.breadcrumb-section .banner-content {
    transform: translateY(-28px);
}
@media (max-width: 991px) {
    .breadcrumb-section .banner-content {
        transform: translateY(-18px);
    }
}
@media (max-width: 576px) {
    .breadcrumb-section .banner-content {
        transform: translateY(-14px);
    }
}

/* ==========================================================================
   Home page header (header4.home2-header) — shorter, logo + wordmark inline
   ========================================================================== */

/**
 * Vendor rule was `padding: 20px 0`, making the header taller than needed.
 * Client wants it shorter — drop the vertical padding entirely.
 */
header.header4.home2-header {
    padding: 0;
}

/**
 * The logo link contains both the crest image and a separate "Celebriti
 * Fashion" wordmark (an <h4>, which is block-level by default) — it wrapped
 * onto its own line below the image. Force them into a single row on laptop
 * screens and up; make the <h4> lose its default block margins so it aligns
 * cleanly next to the image instead of adding vertical whitespace.
 */
@media (min-width: 992px) {
    header.header4.home2-header .header-logo a {
        display: flex;
        align-items: center;
        gap: 10px;
    }
    header.header4.home2-header .header-logo a span h4 {
        margin: 0;
        white-space: nowrap;
    }
}

/* ==========================================================================
   About page video thumbnail — image wasn't responsive
   ========================================================================== */

/**
 * The vendor CSS never gave `.video-section-image img` a `width: 100%` rule,
 * so it always rendered at its literal native pixel size instead of filling
 * its (now full-bleed) container — left a visible gap on the right whenever
 * the source image's native width didn't exactly equal the container's
 * rendered width. Surfaced when the hero-dimension photo was swapped in,
 * but it's a pre-existing gap in the vendor rule, not specific to that image.
 */
.video-section-image img {
    width: 100%;
}

/* ==========================================================================
   Cart page — "remove" is now a real <button> (submits a delete form)
   instead of static text, so it needs its default button chrome stripped
   to keep the template's original look.
   ========================================================================== */
.cart-remove-btn {
    background: none;
    border: none;
    padding: 0;
    font: inherit;
    color: inherit;
    cursor: pointer;
}

/* ==========================================================================
   Product-card wishlist heart — now a <form><button> (so it can toggle a
   real wishlist item) instead of a bare <a>. The vendor rule targets
   `li > a` directly, which a <button> inside that form no longer matches,
   so the circular icon styling is restated here for the form/button.
   ========================================================================== */
.product-card .product-card-img .view-and-favorite-area > ul li form {
    margin: 0;
}
.product-card .product-card-img .view-and-favorite-area > ul li form button {
    background-color: var(--white-color);
    border: none;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    cursor: pointer;
    transition: 0.5s;
}
.product-card .product-card-img .view-and-favorite-area > ul li form button svg {
    fill: var(--title-color);
    transition: 0.5s;
}
.product-card .product-card-img .view-and-favorite-area > ul li:hover form button {
    background-color: var(--title-color);
}
.product-card .product-card-img .view-and-favorite-area > ul li:hover form button svg {
    fill: var(--white-color);
}
.product-card .product-card-img .view-and-favorite-area > ul li form.is-active button svg {
    fill: #e0364f;
}

/* ==========================================================================
   Wishlist page — the remove ("x") icon is now a real <button> (submits a
   delete form) instead of a bare <div>, so it needs default button chrome
   stripped to keep the template's original look.
   ========================================================================== */
.wishlist-section .close-icon {
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}

/* ==========================================================================
   Product-card quick "Add To Cart" — now a <form><button> instead of a bare
   <a>, so it needs its default button border/cursor reset. `.add-cart-btn`
   is a class-based selector (not tag-specific) so the rest of the vendor
   styling already applies unchanged.
   ========================================================================== */
.product-card .product-card-img .overlay .cart-area .add-cart-btn {
    border: none;
    cursor: pointer;
}
.product-card .product-card-img .overlay .cart-area .add-cart-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

/* ==========================================================================
   Global "Added to cart" toast — cart adds now stay on the current page
   (see CartController@store) instead of redirecting to /cart, so every
   page needs a lightweight way to confirm the add happened.
   ========================================================================== */
.site-toast {
    position: fixed;
    top: 110px;
    right: 20px;
    z-index: 2000;
    background: var(--title-color);
    color: var(--white-color);
    font-family: var(--font-outfit);
    font-size: 15px;
    padding: 14px 24px;
    border-radius: 8px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
    opacity: 0;
    transform: translateY(-10px);
    transition: opacity 0.3s, transform 0.3s;
}
.site-toast.is-visible {
    opacity: 1;
    transform: translateY(0);
}
@media (max-width: 576px) {
    .site-toast {
        left: 20px;
        right: 20px;
        top: auto;
        bottom: 20px;
    }
}

/* ==========================================================================
   Product page "Add/Remove from wishlist" — now a <form><button> instead of
   an <a>, so the vendor's `... li a` rules (tag-specific) never match it.
   Restated here for the new markup.
   ========================================================================== */
.compare-wishlist-area ul li form button {
    color: var(--paragraph-color);
    font-family: var(--font-dm-sans);
    font-size: 14px;
    font-weight: 400;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    transition: 0.5s;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}
.compare-wishlist-area ul li form button > span:first-child {
    width: 18px;
    height: 18px;
    border-radius: 50%;
    border: 1px solid rgba(238, 238, 238, 0.9333333333);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: 0.5s;
}
.compare-wishlist-area ul li form button svg path {
    stroke: var(--paragraph-color);
    transition: 0.5s;
}
.compare-wishlist-area ul li form button:hover {
    color: var(--title-color);
}
.compare-wishlist-area ul li:hover form button > span:first-child {
    background-color: var(--title-color);
}
.compare-wishlist-area ul li:hover form button svg path {
    stroke: var(--white-color);
}

/* ==========================================================================
   Article body (rich-text CMS content)
   ========================================================================== */
/**
 * `.details-page-content ul` (style.css) strips bullets and switches to a
 * flex row layout — that's correct for the template's own icon-prefixed
 * lists (e.g. a "Key Characteristics" block with an inline SVG per item),
 * but it also caught `.article-body`'s real, admin-authored bullet lists
 * from the RichEditor, which have no icon to take the bullet's place and so
 * rendered with no marker at all. `<ol>` was never targeted by that rule,
 * which is why numbered lists looked fine while bullet lists didn't.
 * Restores normal list rendering, scoped to just this rich-text content.
 */
.details-page-wrapper .details-page-content .article-body ul {
    display: block;
    list-style: disc;
    padding-left: 1.25rem;
    margin-bottom: 1rem;
}
.details-page-wrapper .details-page-content .article-body ul li {
    display: list-item;
    margin-bottom: 0.5rem;
}
.details-page-wrapper .details-page-content .article-body ol {
    margin-bottom: 1rem;
}

/* ==========================================================================
   Blog sidebar (real article categories + latest-articles widgets)
   ========================================================================== */
/**
 * The template's sidebar category widget was originally a set of decorative
 * checkboxes (`.checkbox-container`) with no real filtering behind them —
 * replaced with real single-category filter links, but given a made-up
 * `.category-list` class with no styling in style.css, so it rendered as a
 * plain default bullet list. Styled here to match the sidebar's existing
 * visual language (same tokens as the tag cloud / widget links nearby).
 */
.blog-standers-section .shop-sidebar .single-widgets .category-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
.blog-standers-section .shop-sidebar .single-widgets .category-list li:not(:last-child) {
    margin-bottom: 12px;
}
.blog-standers-section .shop-sidebar .single-widgets .category-list a {
    font-family: var(--font-outfit);
    font-size: 15px;
    color: var(--paragraph-color);
    transition: 0.35s;
}
.blog-standers-section .shop-sidebar .single-widgets .category-list a:hover,
.blog-standers-section .shop-sidebar .single-widgets .category-list a.active {
    color: var(--title-color);
    font-weight: 500;
}

/**
 * `.latest-blog-image img` (style.css) only sets a min-height/min-width —
 * fine for the template's own pre-cropped ~82x71px thumbnails, but real,
 * arbitrarily-sized uploaded photos have no upper bound or crop applied, so
 * they render at full intrinsic size and blow out the widget's compact
 * row layout. Constrains every "Latest articles" thumbnail to a fixed,
 * consistent size regardless of the source image's actual dimensions.
 */
.blog-standers-section .shop-sidebar .single-widgets .latest-blog-image {
    flex-shrink: 0;
}
.blog-standers-section .shop-sidebar .single-widgets .latest-blog-image img {
    width: 82px;
    height: 71px;
    object-fit: cover;
}

/* ==========================================================================
   Header nav — "Shop" link highlight
   ========================================================================== */
/**
 * "Shop" is the single most important link (the direct path to the
 * storefront), so it must catch the eye at a glance: a solid red ring,
 * bolder text and a soft red pulse rippling out from it every ~2s.
 *
 * Two separate copies of this nav exist, with different selector roots:
 * `header.header1` (every inner page, via header-inner.blade.php) and
 * `.banner-and-menu-area .menu-area` (the homepage, embedded in
 * home.blade.php) — both are covered. Selectors include the state classes
 * so the ring wins over style.css's hover/active styling.
 *
 * On ≤991px style.css removes nav link borders altogether (`border: none`)
 * and turns links into full-width drawer rows, which left only a faint glow
 * there — the mobile block below restores the ring as a compact red pill.
 * Visitors who've asked their device for reduced motion get a steady glow
 * instead of the pulse.
 */
@keyframes shop-link-pulse {
    0% {
        box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.55);
    }
    70% {
        box-shadow: 0 0 0 9px rgba(220, 53, 69, 0);
    }
    100% {
        box-shadow: 0 0 0 0 rgba(220, 53, 69, 0);
    }
}
header.header1 .main-menu ul > li > a.nav-link-highlight,
header.header1 .main-menu ul > li:hover > a.nav-link-highlight,
header.header1 .main-menu ul > li.active > a.nav-link-highlight,
.banner-and-menu-area .menu-area .main-menu ul > li > a.nav-link-highlight,
.banner-and-menu-area .menu-area .main-menu ul > li:hover > a.nav-link-highlight,
.banner-and-menu-area .menu-area .main-menu ul > li.active > a.nav-link-highlight {
    border: 2px solid var(--bs-danger, #dc3545);
    font-weight: 600;
    animation: shop-link-pulse 2s ease-out infinite;
}
@media (max-width: 991px) {
    header.header1 .main-menu ul > li > a.nav-link-highlight,
    header.header1 .main-menu ul > li:hover > a.nav-link-highlight,
    header.header1 .main-menu ul > li.active > a.nav-link-highlight,
    .banner-and-menu-area .menu-area .main-menu ul > li > a.nav-link-highlight,
    .banner-and-menu-area .menu-area .main-menu ul > li:hover > a.nav-link-highlight,
    .banner-and-menu-area .menu-area .main-menu ul > li.active > a.nav-link-highlight {
        display: inline-block;
        padding: 9px 22px;
        border: 2px solid var(--bs-danger, #dc3545);
        border-radius: 999px;
        color: var(--bs-danger, #dc3545);
        font-weight: 700;
        letter-spacing: 0.5px;
    }
}
@media (prefers-reduced-motion: reduce) {
    header.header1 .main-menu ul > li > a.nav-link-highlight,
    .banner-and-menu-area .menu-area .main-menu ul > li > a.nav-link-highlight {
        animation: none;
        box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.3);
    }
}

/* ==========================================================================
   reCAPTCHA badge → footer disclosure
   ========================================================================== */
/**
 * Google's floating reCAPTCHA v3 badge is fixed bottom-right, the exact
 * same corner as `.progress-wrap` (the back-to-top button) — the two sat on
 * top of each other. Hiding the badge is allowed by Google's terms only if
 * the "protected by reCAPTCHA" disclosure is shown some other way, which is
 * why the footer now carries it instead (see partials/footer.blade.php) —
 * don't remove one without the other.
 */
.grecaptcha-badge {
    visibility: hidden;
}
.recaptcha-disclosure {
    color: var(--paragraph-color);
    font-size: 12px;
    text-align: center;
    padding: 15px 0;
    margin: 0;
    border-bottom: 1px solid var(--white-color2);
}
.recaptcha-disclosure a {
    color: var(--paragraph-color);
    text-decoration: underline;
}
.recaptcha-disclosure a:hover {
    color: var(--title-color);
}

/* ==========================================================================
   Mobile nav drawer logo — cap size
   ========================================================================== */
/**
 * `.mobile-menu-logo img` only had Bootstrap's `img-fluid` (max-width: 100%)
 * constraining it, so a square logo rendered at nearly the full width of the
 * mobile nav drawer (~240px), pushing all the menu links down below the fold.
 * Cap it to a small fixed size instead, matching the scale of the desktop
 * header logo.
 */
.mobile-menu-logo img {
    max-width: 80px;
    width: 80px;
    height: auto;
}

/* ==========================================================================
   Product page — clickable quick-rate stars (2026-09-25)
   ========================================================================== */
/**
 * The stars under the product title used to be display-only. They're now
 * <button>s (one per star) so a signed-in shopper can rate in one click —
 * see ReviewController::rate() and the `.js-quick-rate` handlers in
 * custom.js. Strip the browser button chrome so they still look like the
 * template's plain star icons, and make them a bit larger than the old
 * 14px display stars so they're a comfortable tap target on mobile.
 */
.shop-details-content .rating-review .quick-rate {
    margin: 0;
}
.shop-details-content .rating-review .quick-rate .quick-rate-star {
    background: none;
    border: 0;
    padding: 2px;
    line-height: 1;
    cursor: pointer;
    transition: transform 0.15s ease;
}
.shop-details-content .rating-review .quick-rate .quick-rate-star:hover {
    transform: scale(1.15);
}
.shop-details-content .rating-review .quick-rate .quick-rate-star i {
    font-size: 18px;
    color: #ffc107;
}
.review-form .review-form-hint {
    font-size: 14px;
    margin-bottom: 20px;
}

/* ==========================================================================
   Uniform product images (2026-09-26)
   ========================================================================== */
/**
 * The template shows product photos at whatever proportions they were
 * uploaded with, so one wide or extra-tall photo made its card a different
 * size from the rest of the grid. Lock every product image to the shape of
 * the template's own photos (648×748) and crop anything else to fit —
 * existing photos look identical, odd ones no longer break the grid.
 * Crops are anchored to the top: on a tall fashion photo, trimming evenly
 * top and bottom cut models' heads off, whereas losing a little at the
 * bottom (lower legs, floor) reads as a normal crop. Covers product cards
 * (shop, home, related products), the product page gallery, cart rows and
 * the wishlist. Category tiles use the same frame — see "Category tiles".
 */
.product-card .product-card-img > a {
    display: block;
    width: 100%;
}
.product-card .product-card-img > a img {
    width: 100%;
    aspect-ratio: 648 / 748;
    object-fit: cover;
    object-position: center top;
}
.cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img img {
    width: 120px;
    object-fit: cover;
    object-position: center top;
}
.product-content-details .procut-image img {
    width: 100px;
    aspect-ratio: 648 / 748;
    object-fit: cover;
    object-position: center top;
}
/* Product page: main photo and its thumbnail strip. The hover-zoom layer
   (main.js, .product-img--main__image) fills this same box with a
   background-size: cover copy — anchored to the top below, so it crops
   identically to the photo. The
   gallery is a flex container that sizes the photo area to the photo's own
   pixel width, so a narrow upload rendered smaller than the rest — give the
   photo area the full width instead (and keep the thumbnail strip from
   being squeezed on the breakpoints where it sits beside it in the row). */
.shop-details-top-section .shop-details-img .tab-content,
.shop-details-top-section .shop-details-img .product-img--main {
    width: 100%;
}
.shop-details-top-section .shop-details-img .nav-pills {
    flex-shrink: 0;
}
/* style.css stacks the thumbnails under the photo at ≤576px but, between
   577–767px, lays them beside it in the same row — which left the photo a
   sliver of the width. Stack them there too, the same way phones do. */
@media (min-width: 577px) and (max-width: 767px) {
    .shop-details-top-section .shop-details-img {
        flex-direction: column;
        gap: 25px;
    }
    .shop-details-top-section .shop-details-img .nav-pills {
        left: 0;
    }
}
.shop-details-top-section .shop-details-img .shop-details-tab-img img,
.shop-details-top-section .shop-details-img .nav-pills .nav-link img {
    width: 100%;
    aspect-ratio: 648 / 748;
    object-fit: cover;
    object-position: center top;
}
.shop-details-top-section .shop-details-img .product-img--main__image {
    background-position: center top;
}

/* ==========================================================================
   Stock limits (2026-09-26)
   ========================================================================== */
/**
 * Only active while "Limit orders to available stock" is on in Settings
 * (the JS in custom.js adds these classes). A size/colour that's sold out in
 * every combination stays visible but can't be picked; availability turns
 * amber when 5 or fewer are left and red when sold out; cart rows already
 * over the stock level get a warning line.
 */
.select-wrap.is-disabled {
    opacity: 0.35;
    pointer-events: none;
    text-decoration: line-through;
}
/* Same selector chain as style.css's green availability rule, plus the
   state class, so these actually win over it. */
.shop-details-top-section .shop-details-content .quantity-color-area .quantity-color .widget-title span.is-low {
    color: #d97706;
}
.shop-details-top-section .shop-details-content .quantity-color-area .quantity-color .widget-title span.is-out {
    color: var(--bs-danger, #dc3545);
}
.shop-details-btn button:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}
.cart-stock-warning {
    color: var(--bs-danger, #dc3545);
    font-size: 13px;
    margin: 4px 0 8px;
}

/* ==========================================================================
   Product reviews — generic avatar (2026-09-25)
   ========================================================================== */
/**
 * The template showed the same stock photo of a stranger next to every
 * review. Customers can't upload profile photos yet, so show a neutral
 * person icon instead — same 50px circle the template's image used.
 */
.review-avatar {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 50px;
    min-width: 50px;
    height: 50px;
    border-radius: 50%;
    background-color: #e9ecef;
    color: #adb5bd;
    font-size: 26px;
    overflow: hidden;
}

/* ==========================================================================
   Mobile menu button + drawer (2026-09-26)
   ========================================================================== */
/**
 * The hamburger's box had no size at all (0×0): its only child is
 * absolutely positioned, so the box collapsed and a tap only registered if
 * it landed exactly on one of the three 3px-thin bars. It's now a real
 * <button> with a 44×44 tap area (the usual minimum touch size), the icon
 * centred inside it. touch-action: manipulation drops the browser's
 * double-tap-to-zoom wait, so taps respond instantly. Open/close logic:
 * partials/mobile-menu-script.blade.php.
 */
@media (max-width: 1199px) {
    header.header1 .nav-right .mobile-menu-btn,
    header.header4 .nav-right .mobile-menu-btn {
        width: 44px;
        height: 44px;
        flex-shrink: 0;
        margin-left: 12px;
        margin-right: -6px;
        padding: 0;
        border: 0;
        background: none;
        cursor: pointer;
        touch-action: manipulation;
        -webkit-tap-highlight-color: transparent;
    }
    header.header1 .nav-right .mobile-menu-btn span,
    header.header4 .nav-right .mobile-menu-btn span {
        top: 50%;
        right: 6px;
        margin-top: -1.5px;
    }
    header.header1 .nav-right .mobile-menu-btn:focus-visible,
    header.header4 .nav-right .mobile-menu-btn:focus-visible {
        outline: 2px solid var(--bs-danger, #dc3545);
        outline-offset: 2px;
        border-radius: 6px;
    }

    /* Snappier slide-in: ease-in started slowly, which read as lag. */
    header.header1 .main-menu,
    .banner-and-menu-area .menu-area .main-menu {
        transition: transform 0.25s ease-out;
    }
}

/* Homepage "Category" button + its drawer: same treatment — a real
   <button> at least 44px tall, a bigger tap area around the small ✕
   (the circle itself stays 25px), and a quicker slide-in than 0.6s. */
.category-list-area.two .category-btn {
    min-height: 44px;
    border: 0;
    font: inherit;
    color: inherit;
    cursor: pointer;
    touch-action: manipulation;
    -webkit-tap-highlight-color: transparent;
}
.category-list-area.two .category-menu-list {
    transition: transform 0.25s ease-out;
}
.category-list-area.two .category-menu-list .category-menu-close {
    padding: 0;
    background: none;
    cursor: pointer;
    touch-action: manipulation;
}
.category-list-area.two .category-menu-list .category-menu-close::before {
    content: "";
    position: absolute;
    inset: -10px;
}

/**
 * While a drawer is open: dim the page behind it — tapping the dimmed area
 * closes the drawer — and stop the page scrolling underneath. Each dimmed
 * layer sits just under the stacking level of the header that contains its
 * drawer, so the drawer (and the button that closes it) stays on top:
 * inner-page header is 999 (main menu → 998), homepage header is 99
 * (category drawer → 98). The homepage main menu isn't inside a header, so
 * 998 is below it too.
 */
html.mobile-menu-open,
html.mobile-menu-open body,
html.category-menu-open,
html.category-menu-open body {
    overflow: hidden;
}
html.mobile-menu-open body::after,
html.category-menu-open body::after {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 998;
    background: rgba(0, 0, 0, 0.45);
    animation: mobile-menu-backdrop-in 0.25s ease-out;
}
html.category-menu-open body::after {
    z-index: 98;
}
@keyframes mobile-menu-backdrop-in {
    from {
        opacity: 0;
    }
}

/* ==========================================================================
   Product search (2026-09-26)
   ========================================================================== */
/**
 * Live suggestions dropdown (custom.js, "Product search: live suggestions"),
 * the "N results for …" line on the results page, and the no-results state.
 * The dropdown hangs under whichever search box it belongs to — the input's
 * wrapper gets .search-suggest-anchor as its positioning context.
 */
.search-suggest-anchor {
    position: relative;
}
.search-suggestions {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    right: 0;
    min-width: 260px;
    max-height: min(70vh, 460px);
    overflow-y: auto;
    z-index: 1000;
    background: #fff;
    border: 1px solid rgba(0, 0, 0, 0.08);
    border-radius: 10px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.14);
    padding: 6px 0;
    text-align: left;
    color: var(--title-color, #1e1e1e);
    font-size: 14px;
    line-height: 1.35;
}
.search-suggestions[hidden] {
    display: none;
}
.search-suggestions__group {
    padding: 8px 14px 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #8a8a8a;
}
.search-suggestions .search-suggestion {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 12px;
    padding: 8px 14px;
    color: inherit;
    text-align: left;
    text-decoration: none;
}
/* The phone bottom bar styles every link inside it as a stacked icon button
   (`.mobile-bottom-wrapper ul li a` / `a > span`) — undo that for the
   suggestion links inside its search panel. */
.search-suggestions .search-suggestion span {
    color: inherit;
    text-transform: none;
}
.search-suggestions .search-suggestion > .search-suggestion__text {
    font-family: inherit;
    font-size: 14px;
    font-weight: 400;
}
/* That search panel sits just above the bottom bar, so open upwards. */
.mobile-bottom-wrapper .search-suggestions {
    top: auto;
    bottom: calc(100% + 6px);
    max-height: 50vh;
}
/* The template's hamburger-menu search box has white text (made for a dark
   background) on the white drawer — typing was invisible. */
.main-menu .form-inner input[name="q"] {
    color: var(--title-color, #1e1e1e);
}
.search-suggestions .search-suggestion:hover,
.search-suggestions .search-suggestion.is-active {
    background: #f4f4f4;
    color: inherit;
}
.search-suggestion img {
    width: 40px;
    height: 46px;
    flex-shrink: 0;
    object-fit: cover;
    object-position: center top;
    border-radius: 4px;
    background: #f1f1f1;
}
.search-suggestion__text {
    display: flex;
    flex-direction: column;
    min-width: 0;
}
.search-suggestion__name {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.search-suggestion__price {
    font-weight: 600;
    font-size: 13px;
}
.search-suggestion__price del {
    color: #9a9a9a;
    font-weight: 400;
    margin-right: 4px;
}
.search-suggestions mark {
    background: none;
    color: inherit;
    font-weight: 700;
    padding: 0;
}
.search-suggestions__categories {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    padding: 4px 14px 8px;
}
.search-suggestions .search-suggestion--category {
    display: inline-block;
    padding: 5px 12px;
    border: 1px solid #e2e2e2;
    border-radius: 999px;
    font-size: 13px;
}
.search-suggestions .search-suggestion--all {
    justify-content: center;
    margin-top: 4px;
    padding: 11px 14px;
    border-top: 1px solid #efefef;
    font-weight: 600;
}
.search-suggestions__empty {
    padding: 14px;
    color: #6b6b6b;
}

/* Results page: "N results for “…”  Clear search ✕" */
.search-results-summary strong {
    font-weight: 700;
}
.search-results-summary .search-results-clear {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-left: 12px;
    font-size: 13px;
    color: var(--bs-danger, #dc3545);
    white-space: nowrap;
}

/* No products matched */
.shop-empty-state {
    max-width: 560px;
    margin: 10px auto 30px;
    text-align: center;
}
.shop-empty-state > .bi {
    font-size: 40px;
    color: #c4c4c4;
}
.shop-empty-state h4 {
    margin: 14px 0 8px;
    word-break: break-word;
}
.shop-empty-state p {
    margin-bottom: 18px;
}
.shop-empty-state__categories {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    padding: 0;
    margin: 0 0 22px;
    list-style: none;
}
.shop-empty-state__categories a {
    display: inline-block;
    padding: 6px 14px;
    border: 1px solid #ddd;
    border-radius: 999px;
    font-size: 14px;
    color: var(--title-color, #1e1e1e);
}
.shop-empty-state__categories a:hover {
    border-color: var(--title-color, #1e1e1e);
}
.shop-empty-state__suggested-title {
    margin-top: 20px;
}

/* ==========================================================================
   Shop filters (2026-09-26)
   ========================================================================== */
/**
 * The filter panel's size/colour/price widgets were decorative in the
 * template; they're now real links (App\Support\ShopFilters). These rules
 * make the links fill the template's chips, show what's applied (count on
 * the Filters button, removable chips above the grid), and indent
 * subcategories under their parent.
 */
.auction-card-top-area .filter .filter-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    margin-left: 6px;
    border-radius: 999px;
    background: var(--bs-danger, #dc3545);
    color: #fff;
    font-size: 12px;
    font-weight: 600;
    line-height: 1;
}
.active-filters {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 16px;
}
.active-filters .active-filters__chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border-radius: 999px;
    background: #1e1e1e;
    color: #fff;
    font-size: 13px;
    line-height: 1.2;
    transition: background 0.2s;
}
.active-filters .active-filters__chip:hover {
    background: var(--bs-danger, #dc3545);
    color: #fff;
}
.active-filters .active-filters__chip .bi {
    font-size: 10px;
}
.active-filters .active-filters__clear {
    margin-left: 4px;
    font-size: 13px;
    color: var(--bs-danger, #dc3545);
    text-decoration: underline;
}
.sidebar-area .single-widgets .checkbox-container li.is-subcategory {
    padding-left: 24px;
}
.sidebar-area .single-widgets .size-list ul li a {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 100%;
    min-height: 28px;
    padding: 0 10px;
    color: inherit;
}
.sidebar-area .single-widgets .color-area .color-list li {
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
}
.sidebar-area .single-widgets .color-area .color-list li a {
    position: absolute;
    inset: -5px;
    border-radius: 50%;
}
.sidebar-area .single-widgets .color-area .color-list li.selected::before {
    border: 2px solid #1e1e1e;
}
.shop-filter-empty {
    margin: 10px 0 0;
    font-size: 14px;
    color: #8a8a8a;
}
/* "Featured products" widget: the template's slot was made for small
   thumbnails; real product photos are 648px wide and filled the column. */
.sidebar-area .single-widgets .feature-product-area .feature-product-image {
    flex: 0 0 80px;
}
.sidebar-area .single-widgets .feature-product-area .feature-product-image img {
    width: 80px;
    aspect-ratio: 648 / 748;
    object-fit: cover;
    object-position: center top;
}
/* The filter panel's Bootstrap row has negative side margins but sits in a
   padding-less "full-bleed" container, so on phones it poked 12px past the
   screen and the page scrolled sideways whenever the panel was open. */
.product-card-section .filter-top > .row {
    margin-left: 0;
    margin-right: 0;
}
/* Very narrow phones: "Filters" + count + the fixed 220px sort dropdown
   didn't fit in one row — let the sort drop to its own full-width line. */
@media (max-width: 420px) {
    .auction-card-top-area .right-content {
        flex-wrap: wrap;
        row-gap: 12px;
    }
    .auction-card-top-area .right-content .category-area,
    .auction-card-top-area .right-content .category-area .nice-select {
        width: 100%;
        max-width: 100%;
    }
}

/* ==========================================================================
   Info pages + terms notes (2026-09-26)
   ========================================================================== */
/* Privacy / Terms / Returns pages reuse the blog article layout; this is
   just the "Last updated" line and heading spacing for their content. */
.details-page-content.info-page .info-page__updated {
    color: #8a8a8a;
    font-size: 14px;
    margin-bottom: 24px;
}
.details-page-content.info-page .article-body h2 {
    font-size: 22px;
    margin: 32px 0 12px;
}
/* "By placing your order / registering you agree to…" under those buttons. */
.checkout-terms-note,
.register-terms-note {
    margin: 14px 0 0;
    font-size: 13px;
    line-height: 1.5;
    color: #6b6b6b;
}
.checkout-terms-note a,
.register-terms-note a {
    color: inherit;
    text-decoration: underline;
}

/* Shop results loading in place (custom.js "Shop: filters without
   reloading"): fade the results while the next set loads, and block
   double-clicks until it arrives. */
#shop-results {
    transition: opacity 0.15s ease;
}
#shop-results.is-loading {
    opacity: 0.5;
    pointer-events: none;
}
#shop-results .js-shop-load-more.is-loading {
    opacity: 0.6;
}

/* ==========================================================================
   Homepage popup (2026-09-26) — admin-managed content (Website Content →
   Popups): badge line, any-shaped uploaded image, optional button.
   ========================================================================== */
.page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-img img {
    display: block;
    width: 400px;
    aspect-ratio: 409 / 445;
    object-fit: cover;
    object-position: center top;
}
@media (max-width: 991px) {
    .page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-img img { width: 350px; }
}
@media (max-width: 767px) {
    .page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-img img { width: 260px; }
}
@media (max-width: 576px) {
    .page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-img img {
        width: 100%;
        min-width: 0;
        aspect-ratio: auto;
        height: 280px;
    }
}
.page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-content .popup-badge {
    display: inline-block;
    margin-bottom: 12px;
    padding: 5px 12px;
    background: var(--primary-color);
    color: var(--title-color);
    font-family: var(--font-outfit);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    line-height: 1.2;
}
/* Admin-written copy: keep their capitalisation (template capitalised every word). */
.page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-content > p {
    text-transform: none;
}
.page-load-modal .modal .modal-dialog .modal-content .modal-body .popup-wrapper .popup-content .popup-btn {
    margin-top: 25px;
}

/* ==========================================================================
   Category menu badges (2026-09-26) — "Hot" / "New" / "25% off" set per
   category in the admin. The red box itself is the template's own
   `.category-list li a span` style; this just spaces it from the name.
   ========================================================================== */
.category-list-area .category-list li a .category-badge {
    margin-left: 6px;
    text-transform: uppercase;
    white-space: nowrap;
    vertical-align: 1px;
}

/* ==========================================================================
   Footer social icons (2026-09-26) — from admin → Settings → Social media,
   using Bootstrap Icons font glyphs inside the template's round white chips.
   ========================================================================== */
.fooeter-section .footer-logo-section .footer-top-section ul.footer-social li a {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    font-size: 13px;
    line-height: 1;
    color: var(--paragraph-color);
    transition: 0.35s;
}
.fooeter-section .footer-logo-section .footer-top-section ul.footer-social li:hover a {
    color: var(--title-color);
}

/* ==========================================================================
   Homepage top bar (2026-09-26) — social icons from Settings replace the
   template's dead language/currency pickers. Phone and icons take equal
   side columns so the announcement stays centred even if either is empty.
   ========================================================================== */
.topbar1 .contact,
.topbar1 .topbar-social {
    flex: 1 1 0;
}
.topbar1 .topbar-social {
    display: flex;
    justify-content: flex-end;
    gap: 16px;
    margin: 0;
    padding: 0;
    list-style: none;
}
.topbar1 .topbar-social a {
    color: var(--white-color);
    font-size: 14px;
    line-height: 1;
    transition: 0.35s;
}
.topbar1 .topbar-social a:hover {
    color: var(--primary-color);
}

/* Homepage features strip (2026-09-26): links read as part of the text. */
.banner-footer-items .banner-footer-content p a {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: 3px;
}
.banner-footer-items .banner-footer-content p a:hover {
    color: var(--title-color);
}

/* ==========================================================================
   Cart on phones (2026-09-27) — each item becomes a compact card: photo on
   the left, name / size·colour / unit price / quantity / remove on the
   right, and the item total along the bottom. Replaces the template's
   stacked "label: value" rows (big "Product Info" label, right-aligned
   everything, no separation between items). Desktop is unchanged.
   ========================================================================== */
.cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content h6 a {
    color: inherit;
}
.cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content h6 a:hover {
    text-decoration: underline;
}
@media (max-width: 767px) {
    .cart-page .cart-shopping-wrapper .cart-table tbody tr {
        display: block;
        border: 1px solid var(--border-color2, #eee);
        padding: 14px;
        margin-bottom: 14px;
        background: #fff;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td {
        padding: 0;
        text-align: left;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td:first-child::before {
        content: none;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td.cart-price-cell {
        display: none;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper {
        flex-direction: row;
        align-items: flex-start;
        gap: 14px;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img {
        flex: 0 0 92px;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img img {
        width: 92px;
        height: auto;
        max-width: none;
        max-height: none;
        aspect-ratio: 648 / 748;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content {
        flex: 1;
        min-width: 0;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content h6 {
        font-size: 16px;
        line-height: 1.3;
        margin-bottom: 6px;
        max-width: none;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content p {
        font-size: 13px;
        line-height: 1.4;
        margin-bottom: 6px;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content p.cart-item-unit-price {
        color: var(--title-color);
        font-size: 15px;
        margin-bottom: 10px;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content .cart-stock-warning {
        line-height: 1.4;
    }
    /* Quantity stepper and "remove" side by side on one line. */
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        column-gap: 16px;
        row-gap: 10px;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content > h6,
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content > p {
        flex: 0 0 100%;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content .quantity-area .quantity a,
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content .quantity-area .quantity input {
        height: 32px;
        width: 36px;
        margin-bottom: 0;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content ul {
        justify-content: flex-start;
    }
    /* Item total: a footer line across the card. */
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td.line-total {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-top: 14px;
        padding-top: 12px;
        border-top: 1px dashed var(--border-color2, #eee);
        font-size: 16px;
        font-weight: 600;
    }
    .cart-page .cart-shopping-wrapper .cart-table tbody tr td.line-total::before {
        position: static;
        font-size: 14px;
        font-weight: 400;
    }
}

/* Cart presentation: scoped so confirmation and checkout keep their layouts. */
.cart-storefront .cart-shopping-wrapper .cart-widget-title {
    padding-bottom: 20px;
    border-bottom: 1px solid #e4e1dc;
    margin-bottom: 16px;
}
@media (min-width: 768px) {
    .cart-storefront .cart-shopping-wrapper .cart-table {
        border-collapse: separate;
        border-spacing: 0 18px;
        table-layout: fixed;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table thead tr {
        border: 0;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table thead tr th {
        padding: 0 18px 4px;
        font-size: 14px;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table thead tr th:first-child {
        width: 66%;
        padding-left: 24px;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td {
        padding: 24px 12px;
        background: #fff;
        border-top: 1px solid #e4e1dc;
        border-bottom: 1px solid #e4e1dc;
        vertical-align: middle;
        overflow-wrap: anywhere;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td:first-child {
        padding: 24px;
        border-left: 1px solid #e4e1dc;
        border-radius: 12px 0 0 12px;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td:last-child {
        border-right: 1px solid #e4e1dc;
        border-radius: 0 12px 12px 0;
        padding-right: 20px;
        font-weight: 600;
    }
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper {
    align-items: flex-start;
    gap: 18px;
    min-width: 0;
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img {
    flex: 0 0 104px;
    width: 104px;
    padding: 6px;
    background: #f5f4f1;
    border: 1px solid #eeece7;
    border-radius: 8px;
    overflow: hidden;
}
.cart-storefront .product-info-img > a {
    display: block;
    width: 100%;
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img img {
    display: block;
    width: 100%;
    height: auto;
    max-width: 100%;
    max-height: none;
    aspect-ratio: 3 / 4;
    object-fit: contain;
    object-position: center;
    border-radius: 4px;
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content {
    flex: 1;
    min-width: 0;
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content h6 {
    max-width: none;
    line-height: 1.45;
    overflow-wrap: anywhere;
}
@media (min-width: 768px) and (max-width: 1199px) {
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td:first-child {
        padding: 20px 16px;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper {
        gap: 12px;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img {
        flex-basis: 80px;
        width: 80px;
    }
}
@media (max-width: 767px) {
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr {
        padding: 18px;
        border-color: #e4e1dc;
        border-radius: 12px;
        box-shadow: 0 3px 12px rgb(0 0 0 / 3%);
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper {
        gap: 12px;
    }
    .cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-img {
        flex-basis: 76px;
        width: 76px;
    }
}
.cart-storefront .cart-intro {
    margin: 8px 0 0;
    color: var(--paragraph-color);
    font-size: 14px;
}
.cart-storefront .cart-empty-state {
    padding: 56px 24px;
    border: 1px solid var(--border-color2, #eee);
    background: #faf9f7;
}
.cart-storefront .cart-empty-icon {
    display: grid;
    place-items: center;
    width: 72px;
    height: 72px;
    margin: 0 auto 24px;
    border-radius: 50%;
    background: #fff;
    font-size: 30px;
    color: var(--title-color);
}
.cart-storefront .cart-continue-btn {
    gap: 12px;
    margin-top: 24px;
    border: 1px solid var(--title-color);
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content .cart-item-options {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 8px 0 12px;
}
.cart-storefront .cart-item-options span {
    padding: 4px 8px;
    background: #f5f4f1;
    color: var(--title-color);
    font-size: 12px;
    line-height: 1.4;
}
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content .quantity-area .quantity > button,
.cart-storefront .cart-shopping-wrapper .cart-table tbody tr td .product-info-wrapper .product-info-content .quantity-area .quantity > input {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    margin-bottom: 8px;
    border: 1px solid var(--border-color2, #ddd);
    background: #fff;
    color: var(--title-color);
    border-radius: 0;
}
.cart-storefront .quantity > button:hover {
    background: var(--primary-color) !important;
}
.cart-storefront :is(a, button, input):focus-visible {
    outline: 2px solid var(--title-color);
    outline-offset: 3px;
}
.cart-storefront .cart-remove-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    min-height: 40px;
    padding: 10px 14px;
    border-radius: 4px;
    background: #c62828;
    color: #fff;
    transition: background-color 0.2s ease;
}
.cart-storefront .cart-remove-btn:hover {
    background: #a51f1f;
}
.cart-storefront .cart-order-sum-area .order-summary-wrap {
    padding: 28px;
    background: #faf9f7;
}
.cart-storefront .cart-order-sum-area .order-summary-wrap .order-summary-list li {
    gap: 16px;
    line-height: 1.5;
    margin-bottom: 24px;
}
.cart-storefront .cart-money {
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
.cart-storefront .cart-coupon-label {
    display: block;
    color: var(--title-color);
    font-weight: 600;
}
.cart-storefront .cart-coupon-applied {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    align-items: start;
    gap: 16px;
    padding: 16px 0;
    border-top: 1px solid #e5e4df;
    border-bottom: 1px solid #e5e4df;
}
.cart-storefront .cart-coupon-status,
.cart-storefront .cart-coupon-actions {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-width: 0;
}
.cart-storefront .cart-coupon-actions {
    align-items: flex-end;
    text-align: right;
}
.cart-storefront .cart-order-sum-area .order-summary-wrap .order-summary-list li .coupon-area .cart-coupon-success {
    display: flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    color: #2d6a45;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.5;
    text-transform: none;
}
.cart-storefront #coupon-applied-code {
    max-width: 100%;
    margin: 0;
    padding: 5px 9px;
    border: 1px solid #dedda4;
    border-radius: 5px;
    background: #f5f4dc;
    font-size: 13px;
    line-height: 1.4;
    letter-spacing: .5px;
    overflow-wrap: anywhere;
}
.cart-storefront .cart-coupon-remove {
    padding: 5px 10px;
    border: 0;
    border-radius: 5px;
    background: #c62828;
    color: #fff;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.5;
    transition: background-color .2s;
}
.cart-storefront .cart-coupon-remove:hover {
    background: #a91f1f;
}
.cart-storefront .cart-coupon-remove:disabled {
    opacity: .65;
    cursor: wait;
}
.cart-storefront .cart-order-sum-area .order-summary-wrap .order-summary-list li .order-info {
    max-width: 65%;
}
.cart-storefront .cart-order-sum-area .order-summary-wrap .order-summary-list li .order-info :is(p, span) {
    font-size: 13px;
    line-height: 1.6;
    text-transform: none;
}
.cart-storefront .cart-order-sum-area .order-summary-wrap .order-summary-list .cart-total-row {
    padding-top: 20px;
    border-top: 1px solid var(--border-color2, #ddd);
    font-weight: 600;
    font-size: 22px;
}
.cart-storefront .cart-total-row small {
    display: block;
    margin-top: 8px;
    font-size: 12px;
    font-weight: 400;
    color: var(--paragraph-color);
    text-transform: none;
}
.cart-storefront .cart-checkout-btn {
    display: flex;
    width: 100%;
}
.cart-storefront .cart-checkout-note {
    margin: 16px 0 0;
    text-align: center;
    font-size: 12px;
    color: var(--paragraph-color);
}
@media (min-width: 992px) {
    .cart-storefront .cart-order-sum-area {
        position: sticky;
        top: 110px;
    }
}
@media (max-width: 767px) {
    .cart-storefront .cart-continue-btn {
        display: flex;
        width: 100%;
        margin-top: 12px;
    }
    .cart-storefront .cart-order-sum-area .order-summary-wrap {
        padding: 22px 18px;
    }
}

/* Checkout: shared storefront palette, with dedicated form and receipt cards. */
.home-articles .blog-card { height:100%; display:flex; flex-direction:column; }
.home-articles .blog-image-wrap .card-img { display:block; }
.home-articles .blog-image-wrap .card-img img { width:100%; height:240px; object-fit:cover; }
.home-articles .blog-content { display:flex; flex-direction:column; align-items:flex-start; flex:1; }
.home-articles .article-read-more { margin-top:auto; gap:8px; }
.home-articles .blog-content h5 { margin-bottom:24px; }
.tracking-lookup-card { max-width:820px; margin:0 auto; }
.tracking-lookup-card h2 { font-size:26px; margin-bottom:6px; }
.about-intro { display:grid; grid-template-columns:1fr 1fr; align-items:center; gap:48px; }
.about-film { overflow:hidden; border-radius:16px; border:1px solid #e4e1dc; background:#1e1e1e; }
.about-film video { display:block; width:100%; aspect-ratio:4/5; object-fit:contain; }
.about-story .primary-btn { margin-top:16px; gap:10px; }
.about-values-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:20px; }
.about-value-card { min-height:340px; position:relative; overflow:hidden; border-radius:12px; display:flex; align-items:flex-end; background:#1e1e1e; }
.about-value-card > img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.about-value-card::after { content:''; position:absolute; inset:0; background:linear-gradient(180deg,rgba(0,0,0,.55),rgba(0,0,0,.9)); }
.about-value-card > div { position:relative; z-index:1; padding:24px; color:#fff; }
.our-value-section .about-value-card .value-content h3 { color:#fff; }
.our-value-section .about-value-card .value-content ul li { color:#fff; margin:0; }
.about-storefront a:focus-visible { outline:3px solid #676600; outline-offset:4px; }
@media(max-width:991px) { .about-intro { gap:28px; } .about-values-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media(max-width:767px) { .about-intro { grid-template-columns:1fr; } .about-film video { aspect-ratio:4/3; } }
@media(max-width:479px) { .about-values-grid { grid-template-columns:1fr; } .about-value-card { min-height:280px; } }
.home-category-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:20px; }
.home-category-card { overflow:hidden; border:1px solid #e4e1dc; border-radius:12px; background:#faf9f7; color:var(--title-color); }
.home-category-card img { display:block; width:100%; height:auto; aspect-ratio:4/3; object-fit:cover; }
.home-category-card > span { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:18px; font-weight:500; }
.home-category-card:hover { border-color:var(--title-color); color:var(--title-color); }
.home-service-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:24px; }
.home-service-grid > div { padding:28px; background:#faf9f7; border:1px solid #e4e1dc; border-radius:12px; }
.home-service-grid i { font-size:26px; }
.home-service-grid h3 { font-size:19px; margin:16px 0 12px; }
.home-service-grid p { font-size:14px; line-height:1.7; }
.home-service-grid a { color:var(--title-color); text-decoration:underline; text-underline-offset:4px; }
.home-hero-fallback { background:#333; }
.home-hero-fallback p { color:#fff; }
.home-hero-static .banner-wrapper { min-height:440px; }
.home2-product-section .product-card-img img { aspect-ratio:4/5; object-fit:cover; height:auto; }
button.slider-btn { background:transparent; }
.home-category-card:focus-visible, button.slider-btn:focus-visible, .product-size-guide-link:focus-visible, .select-wrap:focus-visible { outline:3px solid #676600; outline-offset:4px; }
.product-size-guide-link { padding:0; margin:0 0 12px; border:0; background:none; font-size:13px; text-decoration:underline; text-underline-offset:3px; }
.shop-details-top-section .shop-details-content .size-list ul li.product-option-item { border:0; }
.product-option-item .select-wrap { display:flex; align-items:center; justify-content:center; min-width:40px; min-height:40px; padding:8px; border:1px solid #d7d4cf; background:#fff; color:#1e1e1e; }
.product-option-item .select-wrap.selected { background:#1e1e1e; color:#fff; border-color:#1e1e1e; }
.color-list .product-option-item .select-wrap { border-radius:50%; padding:6px; min-width:34px; min-height:34px; }
.color-list .product-option-item .select-wrap.selected { background:#f5f4dc; outline:2px solid #1e1e1e; outline-offset:2px; }
.product-option-item .select-wrap.is-disabled { opacity:.45; text-decoration:line-through; }
#product-size-guide table { width:100%; min-width:480px; }
#product-size-guide th, #product-size-guide td { padding:12px; border-bottom:1px solid #e4e1dc; text-align:left; font-size:14px; }
#product-size-guide th { background:#faf9f7; }
@media(max-width:767px) {
    .home-category-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
    .home-category-card > span { padding:12px; font-size:14px; }
    .home-service-grid { grid-template-columns:1fr; gap:16px; }
}
.confirmation-hero { display:flex; align-items:center; gap:24px; border-top:3px solid #e3e231 !important; background:#faf9f7 !important; }
.confirmation-success-icon { display:grid; place-items:center; width:64px; height:64px; flex-shrink:0; border-radius:50%; background:#e3e231; color:#1e1e1e; font-size:34px; }
.confirmation-welcome { flex:1; min-width:0; }
.confirmation-welcome .confirmation-eyebrow { font-size:11px; letter-spacing:2px; color:#62621a; margin:0 0 10px; font-weight:600; }
.confirmation-welcome h2 { font-size:clamp(24px,3vw,34px); margin:0 0 10px; overflow-wrap:anywhere; }
.confirmation-welcome p { font-size:14px; color:var(--paragraph-color); margin:0; line-height:1.7; }
.confirmation-reference { display:flex; flex-direction:column; gap:6px; padding-left:24px; border-left:1px solid #e4e1dc; }
.confirmation-reference span { font-size:12px; color:var(--paragraph-color); }
.confirmation-reference strong { font-size:16px; overflow-wrap:anywhere; }
.confirmation-items { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.confirmation-item { display:grid; grid-template-columns:44px minmax(0,1fr) auto; gap:14px; align-items:center; padding:18px; border:1px solid #e4e1dc; border-radius:8px; }
.confirmation-item-icon { display:grid; place-items:center; width:44px; height:52px; background:#f5f4f1; border-radius:6px; font-size:21px; }
.confirmation-item h4 { font-size:15px; margin:0 0 6px; line-height:1.5; overflow-wrap:anywhere; }
.confirmation-item p { font-size:12px; color:var(--paragraph-color); margin:0; }
.confirmation-item > strong { font-size:15px; font-variant-numeric:tabular-nums; white-space:nowrap; }
.confirmation-delivery-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px; }
.confirmation-storefront h4 { font-weight:500; }
.confirmation-delivery-grid h4, .confirmation-notes h4 { font-size:12px; color:var(--paragraph-color); margin:0 0 10px; }
.confirmation-delivery-grid p, .confirmation-delivery-grid address, .confirmation-notes p { font-size:14px; line-height:1.8; margin:0; overflow-wrap:anywhere; }
.confirmation-notes { border-top:1px solid #e4e1dc; padding-top:18px; margin-top:20px; }
.confirmation-storefront .checkout-summary-title { align-items:flex-start; }
.confirmation-storefront .confirmation-status { background:#fff; border:1px solid #dedbd6; padding:5px 10px; border-radius:20px; font-size:12px; color:var(--title-color); }
.confirmation-payment { display:flex; align-items:center; gap:12px; border-top:1px solid #e4e1dc; padding-top:20px; margin-bottom:24px; }
.confirmation-payment h4 { font-size:14px; margin:0 0 5px; }
.confirmation-payment p { margin:0; font-size:12px; color:var(--paragraph-color); }
.confirmation-actions { display:grid; gap:12px; }
.confirmation-actions :is(.primary-btn,.primary-btn2) { display:flex; width:100%; justify-content:center; gap:10px; min-height:50px; }
.confirmation-followup { text-align:center; font-size:12px; line-height:1.7; margin:18px 0 0; color:var(--paragraph-color); }
@media(max-width:991px) {
    .confirmation-hero { flex-wrap:wrap; }
    .confirmation-reference { width:100%; border-left:0; border-top:1px solid #e4e1dc; padding:18px 0 0; }
}
@media(max-width:575px) {
    .confirmation-hero { gap:16px; }
    .confirmation-success-icon { width:48px; height:48px; font-size:28px; }
    .confirmation-welcome { flex-basis:calc(100% - 64px); }
    .confirmation-delivery-grid { grid-template-columns:1fr; gap:20px; }
    .confirmation-item { padding:14px; grid-template-columns:minmax(0,1fr) auto; gap:10px; }
    .confirmation-item-icon { display:none; }
    .confirmation-item > strong { font-size:13px; }
}
.checkout-storefront { color: var(--title-color); }
.order-status-progress { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); list-style:none; padding:24px; margin:0 0 24px; gap:20px; border:1px solid #e4e1dc; border-radius:12px; background:#fff; }
.order-status-progress li { display:flex; align-items:center; gap:12px; color:#777; }
.order-status-progress li > span { display:grid; place-items:center; width:36px; height:36px; flex-shrink:0; border:1px solid #dedbd6; border-radius:50%; font-size:14px; }
.order-status-progress .is-complete > span { background:#e3e231; border-color:#e3e231; color:#1e1e1e; }
.order-status-progress li[aria-current] > span { box-shadow:0 0 0 4px #f5f4dc; }
.order-status-progress strong { display:block; font-size:14px; font-weight:500; }
.order-status-progress small { display:block; font-size:11px; margin-top:3px; }
.order-status-progress .is-complete { color:var(--title-color); }
.order-carrier-card { display:flex; justify-content:space-between; align-items:center; gap:20px; }
.order-carrier-card .checkout-panel-heading { margin:0; min-width:0; }
.order-carrier-card p { overflow-wrap:anywhere; }
.order-carrier-card > a { flex-shrink:0; gap:10px; }
.order-status-hero.is-cancelled { border-top-color:#b42318 !important; }
.order-status-hero.is-cancelled .confirmation-success-icon { background:#fce9e7; color:#b42318; }
.order-status-hero.is-cancelled .confirmation-eyebrow { color:#b42318; }
@media(max-width:767px) {
    .order-status-progress { grid-template-columns:repeat(2,minmax(0,1fr)); padding:20px 16px; gap:24px 12px; }
    .order-status-progress li { gap:8px; }
    .order-status-progress strong { font-size:13px; }
    .order-carrier-card { flex-direction:column; align-items:stretch; }
    .order-carrier-card > a { display:flex; justify-content:center; }
}
.checkout-heading { display:flex; justify-content:space-between; align-items:center; gap:24px; margin-bottom:24px; }
.checkout-heading h2 { font-size:clamp(28px,4vw,40px); margin:0 0 10px; }
.checkout-heading p { margin:0; color:var(--paragraph-color); }
.checkout-heading .checkout-eyebrow { font-size:11px; letter-spacing:2px; margin-bottom:10px; }
.checkout-back { display:inline-flex; align-items:center; gap:8px; white-space:nowrap; color:var(--title-color); text-decoration:underline; text-underline-offset:4px; }
.checkout-progress { display:flex; gap:32px; padding:18px 0 26px; margin:0 0 28px; list-style:none; border-bottom:1px solid #e4e1dc; }
.checkout-progress li { display:flex; align-items:center; gap:10px; color:#757575; font-size:13px; }
.checkout-progress li span { display:grid; place-items:center; width:28px; height:28px; border:1px solid #ddd; border-radius:50%; }
.checkout-progress li[aria-current] { color:var(--title-color); font-weight:600; }
.checkout-progress li[aria-current] span { background:var(--title-color); color:#fff; border-color:var(--title-color); }
.checkout-panel { padding:28px; border:1px solid #e4e1dc; border-radius:12px; background:#fff; margin:0 0 24px; min-width:0; }
.checkout-panel-heading { display:flex; gap:14px; align-items:center; margin-bottom:24px; }
.checkout-section-icon { display:grid; place-items:center; width:44px; height:44px; flex-shrink:0; background:#f5f4f1; border-radius:50%; font-size:20px; }
.checkout-panel h3, .checkout-panel legend { font-size:20px; margin:0 0 5px; font-weight:500; }
.checkout-panel legend { float:none; width:auto; padding:0 8px; }
.checkout-panel-heading p, .checkout-muted { color:var(--paragraph-color); font-size:13px; margin:0; line-height:1.6; }
.checkout-fields { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px 18px; }
.checkout-field-wide { grid-column:1/-1; }
.checkout-field label { display:block; font-size:13px; font-weight:500; margin-bottom:8px; }
.checkout-field label span, .checkout-field small { color:#727272; font-size:12px; font-weight:400; }
.checkout-field input, .checkout-field textarea, .checkout-field select { width:100%; border:1px solid #d7d4cf; border-radius:6px; padding:12px 14px; color:var(--title-color); background:#fff; font-size:15px; line-height:1.5; min-height:48px; }
.checkout-field textarea { resize:vertical; }
.checkout-field input[aria-invalid=true] { border-color:#b42318; }
.checkout-field-error { color:#b42318; font-size:13px; margin:6px 0 0; }
.checkout-storefront :is(input,textarea,select,button,a):focus-visible { outline:2px solid var(--title-color); outline-offset:3px; }
.checkout-payment-options { display:grid; gap:12px; margin-top:20px; }
.checkout-payment-option { display:flex; align-items:center; gap:14px; padding:18px; border:1px solid #dedbd6; border-radius:8px; cursor:pointer; }
.checkout-payment-option:has(input:checked) { border-color:var(--title-color); background:#faf9f7; box-shadow:inset 0 0 0 1px var(--title-color); }
.checkout-payment-option input { width:18px; height:18px; accent-color:var(--title-color); flex-shrink:0; }
.checkout-payment-option > span { flex:1; min-width:0; }
.checkout-payment-option strong, .checkout-payment-option small { display:block; }
.checkout-payment-option small { color:var(--paragraph-color); margin-top:4px; line-height:1.6; }
.checkout-payment-option em { font-size:10px; font-style:normal; background:#fff0ce; color:#765000; padding:3px 6px; border-radius:4px; margin-left:6px; }
.checkout-payment-option > i { font-size:23px; }
.checkout-payment-option.is-unavailable { opacity:.65; cursor:not-allowed; }
.checkout-summary { background:#faf9f7; }
.checkout-summary-title { display:flex; justify-content:space-between; align-items:center; gap:16px; margin-bottom:12px; }
.checkout-summary-title > span { font-size:12px; color:var(--paragraph-color); }
.checkout-items { list-style:none; padding:0; margin:0; }
.checkout-item { display:grid; grid-template-columns:64px minmax(0,1fr) auto; gap:14px; align-items:start; padding:20px 0; border-bottom:1px solid #e4e1dc; }
.checkout-item-image { padding:4px; background:#fff; border:1px solid #e7e4df; border-radius:6px; overflow:hidden; }
.checkout-item-image img { display:block; width:100%; aspect-ratio:3/4; object-fit:contain; }
.checkout-item-details > a { color:var(--title-color); font-size:14px; font-weight:500; line-height:1.4; overflow-wrap:anywhere; }
.checkout-item-details p { margin:5px 0 0; color:var(--paragraph-color); font-size:12px; line-height:1.5; }
.checkout-item > strong { font-size:14px; font-variant-numeric:tabular-nums; }
.checkout-totals { margin:24px 0; }
.checkout-totals > div { display:flex; justify-content:space-between; gap:18px; margin-bottom:14px; font-size:14px; }
.checkout-totals dt { font-weight:400; }
.checkout-totals dd { margin:0; font-variant-numeric:tabular-nums; white-space:nowrap; }
.checkout-discount { color:#2d6a45; }
.checkout-totals .checkout-grand-total { border-top:1px solid #dedbd6; padding-top:20px; margin-top:20px; font-size:24px; font-weight:600; }
.checkout-grand-total dt { font-weight:500; }
.checkout-grand-total small { font-size:11px; color:var(--paragraph-color); }
.checkout-place-order { width:100%; min-height:52px; }
.checkout-place-order:disabled { opacity:.6; cursor:not-allowed; }
.checkout-storefront .checkout-terms-note { font-size:11px; line-height:1.8; margin:18px 0; text-align:center; }
.checkout-storefront .checkout-terms-note a { text-decoration:underline; color:inherit; }
.checkout-help { display:flex; justify-content:center; gap:10px; border-top:1px solid #e4e1dc; padding-top:20px; font-size:13px; }
.checkout-help a { color:var(--title-color); text-decoration:underline; }
.payment-status-panel { max-width:640px; margin:0 auto; text-align:center; }
.payment-status-actions { display:flex; gap:12px; justify-content:center; flex-wrap:wrap; margin-top:24px; }
@media(min-width:992px) { .checkout-summary-column { position:sticky; top:110px; } }
@media(max-width:575px) {
    .checkout-heading { align-items:flex-start; flex-direction:column; gap:16px; }
    .checkout-progress { gap:12px; justify-content:space-between; }
    .checkout-progress li { font-size:11px; gap:5px; }
    .checkout-progress li span { width:22px; height:22px; }
    .checkout-panel { padding:20px 16px; }
    .checkout-fields { grid-template-columns:1fr; }
    .checkout-item { grid-template-columns:56px minmax(0,1fr) auto; gap:10px; }
    .checkout-item > strong { font-size:13px; }
}

/* Product information beside the gallery; retain the template typography. */
.product-details-card {
    margin-top: 24px;
    padding: 24px;
    border: 1px solid #eee;
    border-radius: 10px;
    min-width: 0;
}
.product-details-card .nav2 {
    border-top: 0;
    padding-top: 0;
    gap: 8px;
    margin-bottom: 24px;
}
.product-details-card .tab-content2 .review-form {
    padding: 24px;
}
.product-details-card .description {
    overflow-wrap: anywhere;
}
.product-details-card .addithonal-information {
    overflow-x: auto;
}
#add-to-cart-form .shop-details-btn button:disabled {
    opacity: .5;
    cursor: not-allowed;
}
@media (max-width: 575px) {
    .product-details-card,
    .product-details-card .tab-content2 .review-form {
        padding: 16px;
    }
}

/* ==========================================================================
   Category tiles (2026-10-12) — the categories page shows one tile per
   category instead of every product in it, each opening the shop filtered
   to that category. Same 648×748 frame and top-anchored crop as product
   cards, so tiles line up whatever photo they use; the name sits on a dark
   gradient at the bottom so it stays readable on any photo.
   ========================================================================== */
.category-tile {
    position: relative;
    display: block;
    overflow: hidden;
    border-radius: 6px;
    background: #f1f1f1;
    color: var(--white-color);
}
.category-tile img {
    display: block;
    width: 100%;
    aspect-ratio: 648 / 748;
    object-fit: cover;
    object-position: center top;
    transition: transform 0.6s ease;
}
.category-tile::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 45%, rgba(0, 0, 0, 0.7) 100%);
    pointer-events: none;
}
.category-tile__content {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 24px;
}
.category-tile__count {
    font-family: var(--font-dm-sans);
    font-size: 13px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    opacity: 0.85;
}
.category-tile__name {
    font-family: var(--font-outfit);
    font-size: 26px;
    font-weight: 500;
    line-height: 1.15;
    overflow-wrap: anywhere;
}
.category-tile__cta {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 6px;
    font-family: var(--font-dm-sans);
    font-size: 14px;
    font-weight: 500;
    text-decoration: underline;
    text-underline-offset: 4px;
}
.category-tile__cta i {
    transition: transform 0.3s ease;
}
.category-tile:hover,
.category-tile:focus-visible {
    color: var(--white-color);
}
.category-tile:hover img {
    transform: scale(1.04);
}
.category-tile:hover .category-tile__cta i {
    transform: translateX(4px);
}
.category-tile:focus-visible {
    outline: 2px solid var(--title-color);
    outline-offset: 3px;
}
@media (max-width: 767px) {
    .category-tile__content {
        padding: 14px;
        gap: 2px;
    }
    .category-tile__count {
        font-size: 11px;
    }
    .category-tile__name {
        font-size: 18px;
    }
    .category-tile__cta {
        font-size: 13px;
    }
}
@media (prefers-reduced-motion: reduce) {
    .category-tile img,
    .category-tile__cta i {
        transition: none;
    }
}
.category-tiles-empty {
    text-align: center;
}
.category-tiles-empty a {
    text-decoration: underline;
}

/* Shop, filtered to a category: its subcategories as chips above the
   results ("All Women", "Dresses", "Tops"…). Wraps on wide screens, scrolls
   sideways in one line on phones so it never pushes the products down. */
.subcategory-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 30px;
}
.subcategory-chips a {
    display: inline-block;
    padding: 8px 18px;
    border: 1px solid #dedbd6;
    border-radius: 999px;
    font-family: var(--font-dm-sans);
    font-size: 14px;
    color: var(--title-color);
    white-space: nowrap;
    transition: border-color 0.2s ease, background-color 0.2s ease;
}
.subcategory-chips a:hover {
    border-color: var(--title-color);
}
.subcategory-chips a.is-active {
    background: var(--title-color);
    border-color: var(--title-color);
    color: var(--white-color);
}
@media (max-width: 767px) {
    .subcategory-chips {
        flex-wrap: nowrap;
        overflow-x: auto;
        scrollbar-width: none;
        margin-bottom: 24px;
        padding-bottom: 2px;
    }
    .subcategory-chips::-webkit-scrollbar {
        display: none;
    }
}
