/* ═══════════════════════════════════════════════════════════════════════════
   Storefront
   The customer-facing surface: landing, catalog and search. Scoped under .shop
   so its generic class names cannot leak into the operator dashboards.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Hero ─────────────────────────────────────────────────────────────────── */
.shop .hero {
    position: relative;
    border-radius: 20px;
    overflow: hidden;
    background: linear-gradient(135deg, #0F2C28 0%, #2B7B6D 62%, #46B98D 100%);
    color: #fff;
    margin-bottom: 32px;
}

/* Soft light source, same treatment as the dashboard stat cards. */
.shop .hero::after {
    content: "";
    position: absolute;
    inset: -55% -20% auto auto;
    width: 420px;
    height: 420px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 255, 255, .18) 0%, rgba(255, 255, 255, 0) 68%);
    pointer-events: none;
}

.shop .hero__inner {
    position: relative;
    padding: 44px 32px 36px;
    max-width: 720px;
}

.shop .hero__title {
    margin: 0;
    font-size: 2.3rem;
    font-weight: 800;
    line-height: 1.12;
    letter-spacing: -.5px;
}

.shop .hero__subtitle {
    margin: 8px 0 22px;
    font-size: 1.02rem;
    opacity: .9;
}

.shop .hero__search {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #fff;
    border-radius: 999px;
    padding: 6px 6px 6px 18px;
    box-shadow: 0 12px 30px -16px rgba(0, 0, 0, .55);
}

.shop .hero__search-icon {
    color: var(--mud-palette-text-secondary);
    flex-shrink: 0;
}

.shop .hero__input {
    flex: 1 1 auto;
    min-width: 0;
    border: 0;
    outline: 0;
    background: transparent;
    font-family: inherit;
    font-size: 1rem;
    padding: 10px 4px;
    color: var(--mud-palette-text-primary);
}

.shop .hero__go {
    border-radius: 999px !important;
    flex-shrink: 0;
}

.shop .hero__area {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 14px;
    font-size: .88rem;
    opacity: .92;
}

.shop .hero__area-button {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    background: transparent;
    border: 0;
    color: #fff;
    font-family: inherit;
    font-size: .88rem;
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
    padding: 0;
}

.shop .hero__badges {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    list-style: none;
    margin: 20px 0 0;
    padding: 0;
}

.shop .hero__badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: rgba(255, 255, 255, .16);
    border-radius: 999px;
    padding: 6px 14px;
    font-size: .82rem;
    font-weight: 600;
}

/* ── Sections ─────────────────────────────────────────────────────────────── */
.shop .shop-section {
    margin-bottom: 34px;
}

.shop .shop-section__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 14px;
}

.shop .shop-section__title {
    margin: 0;
    font-size: 1.25rem;
    font-weight: 800;
    letter-spacing: -.2px;
}

/* ── Category tiles ───────────────────────────────────────────────────────── */
.shop .tile-row {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
    gap: 14px;
}

.shop .tile {
    position: relative;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 14px;
    overflow: hidden;
    background: var(--mud-palette-surface);
    padding: 0;
    cursor: pointer;
    text-align: start;
    font-family: inherit;
    display: flex;
    flex-direction: column;
    transition: transform .16s ease, box-shadow .16s ease;
}

.shop .tile:hover {
    transform: translateY(-3px);
    box-shadow: 0 14px 28px -18px rgba(9, 36, 34, .6);
}

.shop .tile__image {
    width: calc(100% - 20px);
    height: 92px;
    margin: 10px 10px 0;
    border-radius: 12px;
    object-fit: cover;
    display: block;
}

.shop .tile__body {
    padding: 10px 12px 12px;
}

.shop .tile__name {
    display: block;
    font-weight: 700;
    font-size: .95rem;
}

.shop .tile__meta {
    display: block;
    font-size: .76rem;
    color: var(--mud-palette-text-secondary);
    margin-top: 2px;
}

/* ── Store cards ──────────────────────────────────────────────────────────── */
.shop .card-row {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: 16px;
}

.shop .store-card {
    border: 1px solid var(--mud-palette-divider);
    border-radius: 14px;
    overflow: hidden;
    background: var(--mud-palette-surface);
    padding: 0;
    cursor: pointer;
    text-align: start;
    font-family: inherit;
    display: flex;
    flex-direction: column;
    transition: transform .16s ease, box-shadow .16s ease;
}

.shop .store-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 16px 30px -20px rgba(9, 36, 34, .6);
}

.shop .store-card__media {
    position: relative;
    display: block;
    height: 138px;
    margin: 10px 10px 0;
    border-radius: 12px;
    overflow: hidden;
    background: var(--mud-palette-background-gray);
}

.shop .store-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.shop .store-card__placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--mud-palette-text-secondary);
    opacity: .5;
}

/* A closed store stays browsable, but the state is unmistakable. */
.shop .store-card__closed {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(9, 36, 34, .55);
    color: #fff;
    font-weight: 700;
    font-size: .9rem;
    letter-spacing: .5px;
    text-transform: uppercase;
}

.shop .store-card__body {
    padding: 12px 14px 14px;
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.shop .store-card__name {
    font-weight: 700;
    font-size: 1rem;
    line-height: 1.25;
}

.shop .store-card__meta {
    font-size: .8rem;
    color: var(--mud-palette-text-secondary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.shop .store-card__tags {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 6px;
}

.shop .store-card__tag {
    font-size: .72rem;
    font-weight: 700;
    padding: 3px 9px;
    border-radius: 999px;
    background: var(--mud-palette-action-default-hover);
    color: var(--mud-palette-text-secondary);
}

.shop .store-card__tag--open {
    background: rgba(53, 160, 121, .16);
    color: #1F7355;
}

.shop .store-card__tag--shut {
    background: rgba(195, 77, 77, .14);
    color: #A33C3C;
}

/* ── Join / sign-in nudge ─────────────────────────────────────────────────── */
.shop .join {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    flex-wrap: wrap;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 16px;
    padding: 26px 28px;
    background: var(--mud-palette-surface);
    margin-bottom: 24px;
}

.shop .join__title {
    margin: 0 0 4px;
    font-size: 1.2rem;
    font-weight: 800;
}

.shop .join__text {
    margin: 0;
    color: var(--mud-palette-text-secondary);
    max-width: 52ch;
}

.shop .join__actions {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}

/* ── Small screens ────────────────────────────────────────────────────────── */
@media (max-width: 700px) {
    .shop .hero__inner { padding: 28px 18px 24px; }
    .shop .hero__title { font-size: 1.6rem; }
    .shop .hero__subtitle { font-size: .92rem; margin-bottom: 16px; }
    .shop .hero__search { padding-inline-start: 12px; }
    .shop .hero__go { padding-inline: 14px !important; }
    .shop .shop-section__title { font-size: 1.08rem; }
    .shop .tile-row { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
    .shop .card-row { grid-template-columns: repeat(auto-fill, minmax(165px, 1fr)); gap: 12px; }
    .shop .store-card__media { height: 112px; }
    .shop .join { padding: 20px; }
    .shop .join__actions { width: 100%; }
    .shop .join__actions .mud-button-root { flex: 1 1 auto; }
}

/* Area picker: inline pills rather than a popover, so it works on touch too. */
.shop .area-pills {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.shop .area-pill {
    background: rgba(255, 255, 255, .14);
    border: 1px solid transparent;
    color: #fff;
    border-radius: 999px;
    padding: 4px 12px;
    font-family: inherit;
    font-size: .8rem;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s ease;
}

.shop .area-pill:hover {
    background: rgba(255, 255, 255, .24);
}

.shop .area-pill--on {
    background: #fff;
    color: #13322E;
}

/* ── Home: perks strip for signed-in customers ────────────────────────────── */
.shop .perks {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px;
}

.shop .perk {
    display: flex;
    align-items: center;
    gap: 12px;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 14px;
    background: var(--mud-palette-surface);
    padding: 14px 16px;
    cursor: pointer;
    font-family: inherit;
    text-align: start;
    transition: border-color .15s ease, transform .15s ease;
}

.shop .perk:hover {
    border-color: var(--mud-palette-primary);
    transform: translateY(-2px);
}

.shop .perk__icon {
    width: 40px;
    height: 40px;
    border-radius: 12px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.shop .perk__icon--points { background: rgba(223, 160, 74, .16); color: #B9822F; }
.shop .perk__icon--orders { background: rgba(43, 123, 109, .14); color: #2B7B6D; }
.shop .perk__icon--cart   { background: rgba(63, 121, 214, .14); color: #2F5C8F; }

.shop .perk__text {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-width: 0;
}

.shop .perk__value {
    font-weight: 800;
    font-size: 1.05rem;
}

.shop .perk__value small {
    font-size: .74rem;
    font-weight: 600;
    opacity: .7;
}

.shop .perk__label {
    font-size: .78rem;
    color: var(--mud-palette-text-secondary);
}

.shop .perk__go {
    color: var(--mud-palette-text-secondary);
    flex-shrink: 0;
}

/* ── Browse ───────────────────────────────────────────────────────────────── */
.shop .browse-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 18px;
}

.shop .browse-title {
    margin: 0;
    font-size: 1.8rem;
    font-weight: 800;
    letter-spacing: -.3px;
}

.shop .browse-sub {
    margin: 2px 0 0;
    color: var(--mud-palette-text-secondary);
    font-size: .92rem;
}

.shop .browse-toolbar {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.shop .browse-search {
    display: flex;
    align-items: center;
    gap: 8px;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 999px;
    padding: 8px 16px;
    background: var(--mud-palette-surface);
    max-width: 420px;
    color: var(--mud-palette-text-secondary);
}

.shop .browse-search__input {
    flex: 1 1 auto;
    min-width: 0;
    border: 0;
    outline: 0;
    background: transparent;
    font-family: inherit;
    font-size: .92rem;
    color: var(--mud-palette-text-primary);
}

/* ── Filter chips ─────────────────────────────────────────────────────────── */
.shop .chip-row {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.shop .chip {
    border: 1px solid var(--mud-palette-divider);
    background: var(--mud-palette-surface);
    color: var(--mud-palette-text-secondary);
    border-radius: 999px;
    padding: 7px 16px;
    font-family: inherit;
    font-size: .86rem;
    font-weight: 600;
    cursor: pointer;
    transition: all .15s ease;
}

.shop .chip:hover {
    border-color: var(--mud-palette-primary);
    color: var(--mud-palette-primary);
}

.shop .chip--on {
    background: var(--mud-palette-primary);
    border-color: var(--mud-palette-primary);
    color: #fff;
}

.shop .chip--sm {
    padding: 5px 13px;
    font-size: .8rem;
}

/* ── Product grid ─────────────────────────────────────────────────────────── */
.shop .product-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(215px, 1fr));
    gap: 16px;
}

.shop .product {
    display: flex;
    flex-direction: column;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 14px;
    overflow: hidden;
    background: var(--mud-palette-surface);
    transition: transform .16s ease, box-shadow .16s ease;
}

.shop .product:hover {
    transform: translateY(-3px);
    box-shadow: 0 16px 30px -20px rgba(9, 36, 34, .55);
}

.shop .product__media {
    position: relative;
    height: 146px;
    margin: 10px 10px 0;
    border-radius: 12px;
    overflow: hidden;
    background: var(--mud-palette-background-gray);
}

.shop .product__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.shop .product__placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--mud-palette-text-secondary);
    opacity: .45;
}

.shop .product__soldout {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(9, 36, 34, .55);
    color: #fff;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .5px;
    font-size: .82rem;
}

.shop .product__body {
    padding: 12px 14px 14px;
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 1 1 auto;
}

.shop .product__category {
    font-size: .68rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .6px;
    color: var(--mud-palette-primary);
}

.shop .product__name {
    margin: 0;
    font-size: 1rem;
    font-weight: 700;
    line-height: 1.25;
}

.shop .product__desc {
    margin: 0;
    font-size: .8rem;
    color: var(--mud-palette-text-secondary);
    line-height: 1.45;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.shop .product__foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: auto;
    padding-top: 10px;
}

.shop .product__price {
    font-weight: 800;
    font-size: 1rem;
    white-space: nowrap;
}

/* ── Guest gate sheet ─────────────────────────────────────────────────────── */
.gate {
    padding: 40px 28px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
}

.gate__icon {
    font-size: 3rem !important;
    color: var(--mud-palette-primary);
    margin-bottom: 14px;
}

.gate__title {
    margin: 0 0 8px;
    font-size: 1.25rem;
    font-weight: 800;
}

.gate__text {
    margin: 0 0 24px;
    color: var(--mud-palette-text-secondary);
    max-width: 34ch;
    line-height: 1.55;
}

@media (max-width: 700px) {
    .shop .browse-title { font-size: 1.4rem; }
    .shop .product-grid { grid-template-columns: repeat(auto-fill, minmax(158px, 1fr)); gap: 12px; }
    .shop .product__media { height: 122px; }
    .shop .product__name { font-size: .92rem; }
    .shop .perks { grid-template-columns: 1fr; }
}


/* ── Search ───────────────────────────────────────────────────────────────── */
.shop .search-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    border: 1px solid var(--mud-palette-divider);
    background: var(--mud-palette-surface);
    border-radius: 999px;
    padding: 6px 6px 6px 18px;
    max-width: 640px;
    box-shadow: 0 6px 18px -14px rgba(9, 36, 34, .6);
}

.shop .search-bar__icon {
    color: var(--mud-palette-text-secondary);
    flex-shrink: 0;
}

.shop .search-bar__input {
    flex: 1 1 auto;
    min-width: 0;
    border: 0;
    outline: 0;
    background: transparent;
    font-family: inherit;
    font-size: 1rem;
    padding: 10px 4px;
    color: var(--mud-palette-text-primary);
}

.shop .search-bar__go {
    border-radius: 999px !important;
    flex-shrink: 0;
}

.shop .count-badge {
    display: inline-block;
    margin-inline-start: 6px;
    background: var(--mud-palette-action-default-hover);
    color: var(--mud-palette-text-secondary);
    border-radius: 999px;
    padding: 2px 10px;
    font-size: .78rem;
    font-weight: 700;
    vertical-align: middle;
}

/* Product hits read better as a list than as cards: the store they belong to
   matters as much as the product name. */
.shop .result-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.shop .result {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    border: 1px solid var(--mud-palette-divider);
    border-radius: 12px;
    background: var(--mud-palette-surface);
    padding: 12px 14px;
    cursor: pointer;
    font-family: inherit;
    text-align: start;
    transition: border-color .15s ease, transform .15s ease;
}

.shop .result:hover {
    border-color: var(--mud-palette-primary);
    transform: translateX(2px);
}

.shop .result__icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    background: var(--mud-palette-action-default-hover);
    color: var(--mud-palette-text-secondary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.shop .result__text {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1 1 auto;
    min-width: 0;
}

.shop .result__name {
    font-weight: 700;
    font-size: .96rem;
}

.shop .result__store {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: .8rem;
    color: var(--mud-palette-text-secondary);
}

.shop .result__price {
    font-weight: 800;
    white-space: nowrap;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    line-height: 1.2;
}

.shop .result__price small {
    font-size: .68rem;
    font-weight: 600;
    color: var(--mud-palette-text-secondary);
}

.shop .result__go {
    color: var(--mud-palette-text-secondary);
    flex-shrink: 0;
}

@media (max-width: 700px) {
    .shop .search-bar { padding-inline-start: 12px; }
    .shop .search-bar__go { padding-inline: 14px !important; }
    .shop .result__icon { display: none; }
}
