@charset "UTF-8";
/* ==========================================================================
   장바구니 페이지 (/cart) - site.css 이후에 로드된다
   모바일: 카드 스택 / 640px 이상: 테이블
   ========================================================================== */

/* --------------------------------------------------------------------------
   flash 메시지
   -------------------------------------------------------------------------- */
.cart-message {
    margin: 0 0 var(--space-4);
    padding: var(--space-3) var(--space-4);
    background: var(--color-primary-light);
    border: 1px solid #cfe0cd;
    border-left: 4px solid var(--color-primary);
    border-radius: var(--radius-sm);
    color: var(--color-primary-dark);
    font-size: var(--font-size-sm);
    font-weight: 700;
}

/* --------------------------------------------------------------------------
   목록 (모바일 = 카드 스택)
   -------------------------------------------------------------------------- */
.cart-table {
    display: block;
    width: 100%;
    border-collapse: collapse;
    background: transparent;
}

.cart-table colgroup,
.cart-table thead {
    display: none;
}

.cart-table tbody {
    display: block;
}

.cart-row {
    display: grid;
    grid-template-columns: 1fr auto;
    grid-template-areas:
        "product product"
        "qty     amount"
        "remove  remove";
    gap: var(--space-3);
    margin-bottom: var(--space-3);
    padding: var(--space-4);
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    box-shadow: var(--shadow-sm);
}

/* site.css 의 .table td 규칙(패딩/보더) 무력화 */
.cart-table td {
    display: block;
    padding: 0;
    border-bottom: 0;
}

.cart-table tbody tr:hover {
    background: var(--color-surface);
}

.cart-row__product {
    grid-area: product;
}

.cart-row__qty {
    grid-area: qty;
}

.cart-row__amount {
    grid-area: amount;
}

/* site.css 의 `.table th, .table td { text-align: left }`(0-1-1) 를 이기려면 0-1-2 이상이어야 한다.
   합계 박스(.cart-summary)가 금액을 오른쪽 정렬하므로 표의 금액 열도 맞춘다. */
.cart-table td.cart-row__amount,
.cart-table th.cart-table__th-amount {
    text-align: right;
}

.cart-row__remove {
    grid-area: remove;
    justify-self: end;
}

/* 모바일 전용 항목 라벨 */
.cart-row__qty::before,
.cart-row__amount::before {
    content: attr(data-label);
    display: block;
    margin-bottom: var(--space-1);
    color: var(--color-text-muted);
    font-size: var(--font-size-xs);
    font-weight: 400;
}

/* --------------------------------------------------------------------------
   상품 셀
   -------------------------------------------------------------------------- */
.cart-row__product-inner {
    display: flex;
    align-items: flex-start;
    gap: var(--space-3);
    min-width: 0;
}

.cart-row__thumb {
    flex: 0 0 72px;
    width: 72px;
    display: block;
    overflow: hidden;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-cream);
}

.cart-row__thumb img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 4 / 3;
    object-fit: cover;
}

.cart-row__info {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-1);
    min-width: 0;
}

.cart-row__name {
    color: var(--color-text);
    font-size: var(--font-size-base);
    font-weight: 700;
    line-height: var(--line-height-tight);
    text-decoration: none;
}

.cart-row__name:hover,
.cart-row__name:focus-visible {
    color: var(--color-primary);
    text-decoration: underline;
}

.cart-row__meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    color: var(--color-text-muted);
    font-size: var(--font-size-xs);
}

/* 담은 뒤 품절로 바뀐 상품 표시 */
.badge--soldout {
    background: #efedea;
    border-color: #ddd8d0;
    color: var(--color-danger);
}

/* --------------------------------------------------------------------------
   수량 스테퍼
   -------------------------------------------------------------------------- */
.qty-stepper {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    flex-wrap: wrap;
}

.qty-stepper__btn {
    width: 36px;
    height: 36px;
    padding: 0;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    color: var(--color-text);
    font-family: inherit;
    font-size: var(--font-size-md);
    line-height: 1;
    cursor: pointer;
    transition: border-color var(--transition), color var(--transition);
}

.qty-stepper__btn:hover,
.qty-stepper__btn:focus-visible {
    border-color: var(--color-primary);
    color: var(--color-primary);
}

.qty-stepper__input {
    width: 56px;
    height: 36px;
    padding: 0 var(--space-1);
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    color: var(--color-text);
    font-family: inherit;
    font-size: var(--font-size-base);
    text-align: center;
    -moz-appearance: textfield;
    appearance: textfield;
}

.qty-stepper__input::-webkit-outer-spin-button,
.qty-stepper__input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.qty-stepper__input:focus {
    border-color: var(--color-primary);
}

/* JS 가 동작하면 +/- 로 자동 제출되므로 '변경' 버튼은 감춘다 */
.qty-stepper[data-js="on"] .qty-stepper__apply {
    display: none;
}

/* --------------------------------------------------------------------------
   금액 / 삭제
   -------------------------------------------------------------------------- */
.cart-row__amount {
    color: var(--color-accent);
    font-size: var(--font-size-md);
    font-weight: 700;
    white-space: nowrap;
}

.cart-row__remove-btn {
    min-height: 32px;
    padding: var(--space-1) var(--space-3);
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    color: var(--color-text-muted);
    font-family: inherit;
    font-size: var(--font-size-xs);
    cursor: pointer;
    transition: border-color var(--transition), color var(--transition);
}

.cart-row__remove-btn:hover,
.cart-row__remove-btn:focus-visible {
    border-color: var(--color-danger);
    color: var(--color-danger);
}

/* --------------------------------------------------------------------------
   합계 박스
   -------------------------------------------------------------------------- */
.cart-summary {
    margin-top: var(--space-6);
    padding: var(--space-5);
    background: var(--color-cream);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
}

.cart-summary__list {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    margin: 0;
}

.cart-summary__row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--space-4);
}

.cart-summary__row dt {
    color: var(--color-text-muted);
    font-size: var(--font-size-sm);
}

.cart-summary__row dd {
    margin: 0;
    font-weight: 700;
    white-space: nowrap;
}

.cart-summary__row--total {
    margin-top: var(--space-2);
    padding-top: var(--space-3);
    border-top: 1px solid var(--color-border);
}

.cart-summary__row--total dt {
    color: var(--color-text);
    font-size: var(--font-size-md);
    font-weight: 700;
}

.cart-summary__row--total dd {
    color: var(--color-accent);
    font-size: var(--font-size-xl);
}

.cart-summary__note {
    margin-top: var(--space-3);
    color: var(--color-text-muted);
    font-size: var(--font-size-xs);
}

.cart-summary__note--strong {
    margin-top: var(--space-1);
    color: var(--color-primary);
    font-weight: 700;
}

.cart-actions {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    margin-top: var(--space-5);
}

.cart-actions__sub {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-2);
}

/* --------------------------------------------------------------------------
   640px 이상: 테이블 레이아웃으로 전환
   -------------------------------------------------------------------------- */
@media (min-width: 640px) {
    .cart-table {
        display: table;
        table-layout: fixed;
        background: var(--color-surface);
        border-top: 2px solid var(--color-primary);
    }

    .cart-table colgroup {
        display: table-column-group;
    }

    .cart-table thead {
        display: table-header-group;
    }

    .cart-table tbody {
        display: table-row-group;
    }

    .cart-table__col-qty {
        width: 160px;
    }

    .cart-table__col-amount {
        width: 120px;
    }

    .cart-table__col-remove {
        width: 80px;
    }

    .cart-row {
        display: table-row;
        margin: 0;
        padding: 0;
        background: transparent;
        border: 0;
        border-radius: 0;
        box-shadow: none;
    }

    .cart-table td {
        display: table-cell;
        padding: var(--space-4) var(--space-2);
        border-bottom: 1px solid var(--color-border);
        vertical-align: middle;
    }

    .cart-table tbody tr:hover {
        background: #fcfbf7;
    }

    .cart-row__qty::before,
    .cart-row__amount::before {
        content: none;
    }

    /* 좁은 폭에서도 스테퍼가 한 줄에 들어가도록 축소 */
    .qty-stepper__btn {
        width: 32px;
        height: 32px;
    }

    .qty-stepper__input {
        width: 48px;
        height: 32px;
    }

    .cart-row__thumb {
        flex: 0 0 64px;
        width: 64px;
    }

    .cart-summary {
        max-width: 420px;
        margin-left: auto;
    }
}

/* --------------------------------------------------------------------------
   1024px 이상
   -------------------------------------------------------------------------- */
@media (min-width: 1024px) {
    .cart-table__col-qty {
        width: 180px;
    }

    .cart-table__col-amount {
        width: 140px;
    }

    .cart-table td {
        padding: var(--space-4) var(--space-3);
    }

    .qty-stepper__btn {
        width: 36px;
        height: 36px;
    }

    .qty-stepper__input {
        width: 56px;
        height: 36px;
    }

    .cart-row__thumb {
        flex: 0 0 80px;
        width: 80px;
    }
}
