/**
 * WooCommerce + Contact Form 7 - theme integration styles.
 *
 * WooCommerce and CF7 ship their own default CSS. This file restyles their
 * markup with the theme design tokens (--ewut-uny-*) so shop, cart, checkout,
 * account, single-product and CF7 forms look native to the Uny theme - the
 * same visual language as the ewub-uny-builder plugin (accent buttons,
 * 8px radius, flex grids, project typography).
 *
 * Loaded only on WooCommerce pages and on pages that contain a CF7 form.
 *
 * @package Uny_WordPress_Theme
 */

/* ──────────────────────────────────────────────────────────────
   Layout - give WC pages the theme container + vertical rhythm
   ────────────────────────────────────────────────────────────── */

/* Page-content vertical rhythm is set globally in main.css
   (.ewut-page-content: padding 24px top / 60px bottom). No WC-specific
   override needed. */

/* Breadcrumb - all text dark; accent only on hover. */
.woocommerce .woocommerce-breadcrumb,
.woocommerce-page .woocommerce-breadcrumb {
    font-size: .92em;
    color: var(--ewut-uny-dark);
}

.woocommerce .woocommerce-breadcrumb a,
.woocommerce-page .woocommerce-breadcrumb a {
    color: var(--ewut-uny-dark);
    transition: color .2s;
}

.woocommerce .woocommerce-breadcrumb a:hover,
.woocommerce-page .woocommerce-breadcrumb a:hover {
    color: var(--ewut-uny-accent);
}

/* Stock status - dark text; out-of-stock accent. */
.woocommerce div.product .stock {
    color: var(--ewut-uny-dark);
    font-weight: 500;
}

.woocommerce div.product .stock.out-of-stock {
    color: var(--ewut-uny-accent);
}

.woocommerce-products-header__title,
.woocommerce .page-title {
    font-size: 2.2em;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--ewut-uny-dark);
    margin: 0 0 12px;
}

.woocommerce-result-count {
    font-size: 16px;
    color: var(--ewut-uny-dark);
    /* Match the ordering select height so the count text centers on the
       same horizontal line as the dropdown. */
    line-height: 44px;
    margin: 0;
}

.woocommerce-ordering select,
.woocommerce select.orderby {
    height: 44px;
    padding: 0 14px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    font-family: var(--ewut-uny-font);
    font-size: var(--ewut-uny-fs-body);
    color: var(--ewut-uny-dark);
    background-color: var(--ewut-uny-white);
    cursor: pointer;
}

/* When rendered as a customizable select (appearance: base-select) the
   button is a flex row - split it so the label hugs the left and the
   caret sits at the right edge. */
.woocommerce-ordering select.orderby {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

/* The orderby select renders with the new customizable-select engine
   (appearance: base-select). Its button is a flex row, so the caret
   lands right after the text and the popup opens left-aligned.
   1) push the caret to the far right edge,
   2) right-align the popup under the button. */
/* The caret itself is the masked chevron from the global `select::picker-icon`
   rule; this selector only positions it. `color` is deliberately NOT set here:
   the shape is painted with `background-color` through a mask, so a `color`
   declaration would do nothing but suggest it still controls the glyph. */
.woocommerce-ordering select.orderby::picker-icon {
    margin-left: auto;
    transition: transform .2s ease;
}

.woocommerce-ordering select.orderby:open::picker-icon {
    transform: rotate(180deg);
}

/* Popup panel - mirror the builder nav dropdown (.ewub-nav--7__dropdown):
   white panel, 1px border, 8px radius, 0 8px 24px rgba(0,0,0,.08) shadow,
   NO inner padding, min-width 200px. */
.woocommerce-ordering select.orderby::picker(select) {
    position-area: bottom span-left;
    min-width: max(200px, anchor-size(width));
    margin-top: 8px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    background: var(--ewut-uny-white);
    box-shadow: 0 8px 24px rgba(0, 0, 0, .08);
    padding: 0;
}

/* Options - mirror the nav dropdown links: 10px 20px rows, body size,
   dark text, light hover bg, 1px top border between items. */
.woocommerce-ordering select.orderby option {
    padding: 10px 20px;
    font-size: var(--ewut-uny-fs-body);
    color: var(--ewut-uny-dark);
    background: var(--ewut-uny-white);
    transition: background .15s;
}

.woocommerce-ordering select.orderby option + option {
    border-top: 1px solid var(--ewut-uny-border);
}

.woocommerce-ordering select.orderby option:hover,
.woocommerce-ordering select.orderby option:focus {
    background: var(--ewut-uny-light);
}

.woocommerce-ordering select.orderby option:checked {
    font-weight: 600;
    color: var(--ewut-uny-dark);
}

/* Hide the native customizable-select checkmark ("✓") that the base-select
   engine prepends to options. The nav dropdown (our styling reference) has no
   such marker - the active row is shown with font-weight only, so we drop the
   checkmark here to match. Reserving zero space keeps option text left-aligned
   with the button label. */
.woocommerce-ordering select.orderby option::checkmark {
    content: none;
    display: none;
}

/* ──────────────────────────────────────────────────────────────
   Product grid (shop / archive) - flex, mirrors theme post cards
   ────────────────────────────────────────────────────────────── */

.woocommerce ul.products,
.woocommerce-page ul.products {
    /* gap set to 24px below; product flex-basis calc()s subtract (cols-1)*24 */
    display: flex !important;
    flex-wrap: wrap;
    gap: 24px;
    margin: 0 0 40px;
    padding: 0;
    list-style: none;
}

/* WooCommerce adds a clearfix ::before/::after (content:" "; display:table)
   to ul.products. In a flex container those pseudo-elements become flex
   items, stealing grid cells and knocking the columns out of alignment.
   Remove them. */
.woocommerce ul.products::before,
.woocommerce ul.products::after,
.woocommerce-page ul.products::before,
.woocommerce-page ul.products::after {
    display: none !important;
}

.woocommerce ul.products li.product,
.woocommerce-page ul.products li.product {
    flex: 0 0 calc((100% - 48px) / 3);
    max-width: calc((100% - 48px) / 3);
    margin: 0 !important;
    width: auto !important;
    padding: 0;
    text-align: left;
    display: flex;
    flex-direction: column;
}

/* Column count depends on the layout:
   • with sidebar  (.ewut-layout-sidebar present) → 2 columns
   • without sidebar (full-width main)            → 4 columns
   The 3-column rule above is the safe fallback. */
.ewut-layout-sidebar .woocommerce ul.products li.product,
.ewut-layout-sidebar.woocommerce ul.products li.product,
.ewut-layout-sidebar__main ul.products li.product {
    flex-basis: calc((100% - 24px) / 2);
    max-width: calc((100% - 24px) / 2);
}

.ewut-page-content:not(:has(.ewut-layout-sidebar)) .woocommerce ul.products li.product,
.ewut-page-content:not(:has(.ewut-layout-sidebar)) ul.products li.product {
    flex-basis: calc((100% - 72px) / 4);
    max-width: calc((100% - 72px) / 4);
}

/* Narrow screens: 4 columns -> 2 -> 1.
   
   The selectors below repeat the layout-scoped ones above on purpose. A media
   query adds NO specificity, so the plain `.woocommerce ul.products li.product`
   (two classes) lost to
   `.ewut-page-content:not(:has(.ewut-layout-sidebar)) ul.products li.product`
   (three classes plus :not/:has) and the shop stayed FOUR columns all the way
   down: measured at a 390px viewport the items were 99px wide with
   `flex: 0 0 calc(25% - 18px)`, so titles were cut to "Aura Cera..." and every
   Add-to-cart button wrapped onto two lines. */
@media (max-width: 1024px) {
    .woocommerce ul.products li.product,
    .woocommerce-page ul.products li.product,
    .ewut-layout-sidebar .woocommerce ul.products li.product,
    .ewut-layout-sidebar.woocommerce ul.products li.product,
    .ewut-layout-sidebar__main ul.products li.product,
    .ewut-page-content:not(:has(.ewut-layout-sidebar)) .woocommerce ul.products li.product,
    .ewut-page-content:not(:has(.ewut-layout-sidebar)) ul.products li.product {
        flex-basis: calc((100% - 24px) / 2);
        max-width: calc((100% - 24px) / 2);
    }
}

@media (max-width: 576px) {
    .woocommerce ul.products li.product,
    .woocommerce-page ul.products li.product,
    .ewut-layout-sidebar .woocommerce ul.products li.product,
    .ewut-layout-sidebar.woocommerce ul.products li.product,
    .ewut-layout-sidebar__main ul.products li.product,
    .ewut-page-content:not(:has(.ewut-layout-sidebar)) .woocommerce ul.products li.product,
    .ewut-page-content:not(:has(.ewut-layout-sidebar)) ul.products li.product {
        flex-basis: 100%;
        max-width: 100%;
    }
}

.woocommerce ul.products li.product a img,
.woocommerce ul.products li.product img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    margin: 0 0 16px;
    transition: transform .3s ease;
}

.woocommerce ul.products li.product a:hover img {
    transform: scale(1.03);
}

.woocommerce ul.products li.product .woocommerce-loop-product__title {
    padding: 0;
    margin: 0 0 6px;
    font-size: 1.1em;
    font-weight: 600;
    line-height: 1.3;
    color: var(--ewut-uny-dark);
    /* One line only - clip long titles with an ellipsis so cards of
       different title lengths keep an even grid. */
    display: block;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.woocommerce ul.products li.product a:hover .woocommerce-loop-product__title {
    color: var(--ewut-uny-accent);
}

.woocommerce div.product p.price,
.woocommerce div.product span.price {
    color: var(--ewut-uny-dark) !important;
    font-size: 1em;
    font-weight: 600;
    margin: 0 0 16px;
}

/* Loop card price - styled like the blog post-card meta line
   (.ewut-post-card__meta → .8em / 400 / muted grey), just kept BELOW
   the title where the shop card places it. */
.woocommerce ul.products li.product .price {
    color: var(--ewut-uny-muted) !important;
    font-size: .8em;
    font-weight: 400;
    margin: 0 0 16px;
}

.woocommerce ul.products li.product .price del {
    color: var(--ewut-uny-muted);
    font-weight: 400;
    opacity: 1;
}

.woocommerce ul.products li.product .price ins {
    color: var(--ewut-uny-accent);
    text-decoration: none;
}

.woocommerce ul.products li.product .star-rating {
    color: var(--ewut-uny-accent);
    margin: 0 0 12px;
    font-size: .85em;
}

/* Star rating glyphs - force the WooCommerce icon font on the star
   pseudo-elements. The global `* { font-family: var(--ewut-uny-font) }` rule
   overrides the star span's font to Google Sans, which renders the WC star
   character as the literal letter "S" (→ "SSSSS"). Restore the WC font so the
   filled + empty stars draw correctly. */
.woocommerce .star-rating,
.woocommerce .star-rating::before,
.woocommerce .star-rating span::before,
.woocommerce p.stars a::before {
    font-family: "WooCommerce" !important;
}

/* ── Single-product Reviews tab ──────────────────────────────── */

/* "N reviews for …" heading - match the "Related products" heading scale
   (1.6em / 700) instead of the oversized 44px default. */
.woocommerce #reviews #comments h2.woocommerce-Reviews-title {
    font-size: 1.6em;
    font-weight: 700;
    line-height: 1.3;
    color: var(--ewut-uny-dark);
    margin: 0 0 40px;
}

/* Review avatar - round, no padding (WC default paints a 3px pad). */
.woocommerce #reviews #comments ol.commentlist li img.avatar {
    border-radius: 50%;
    padding: 0;
    border: none;
}

/* Review card border - WC default is a 4px-radius #e1ddE7 box; use the theme
   border token and 8px radius to match the rest of the UI. */
.woocommerce #reviews #comments ol.commentlist li .comment-text {
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
}

/* Read-only rating stars - accent fill everywhere they're shown (review list,
   the summary rating under the product title, loop cards). A small
   letter-spacing adds a 3px gap between the glyphs, which the default
   WooCommerce star font packs tightly. */
.woocommerce #reviews .commentlist .star-rating,
.woocommerce #reviews .commentlist .star-rating span,
.woocommerce .woocommerce-product-rating .star-rating,
.woocommerce .woocommerce-product-rating .star-rating span {
    color: var(--ewut-uny-accent);
}
/* Add a small gap between the glyphs. WooCommerce sizes .star-rating with a
   fixed em width and `overflow:hidden`, so the extra letter-spacing would clip
   the 5th star - widen the box (5 gaps × 3px ≈ 0.9em) and let it show. The
   inner span (the accent fill) inherits the same spacing so its % width still
   lines up. */
.woocommerce #reviews .commentlist .star-rating,
.woocommerce .woocommerce-product-rating .star-rating {
    letter-spacing: 3px;
    width: 6.6em;
}
.woocommerce #reviews .commentlist .star-rating span,
.woocommerce .woocommerce-product-rating .star-rating span {
    letter-spacing: 3px;
}

/* "Your rating" interactive star picker (p.stars): the outline stays grey
   at rest; accent only on hover / when a rating is chosen. */
.woocommerce p.stars a::before {
    color: var(--ewut-uny-grey);
}
.woocommerce p.stars:hover a::before,
.woocommerce p.stars.selected a.active::before,
.woocommerce p.stars.selected a:not(.active):hover::before,
.woocommerce p.stars a:hover::before,
.woocommerce p.stars a.active::before {
    color: var(--ewut-uny-accent);
}

/* Required-field asterisk - accent across every WooCommerce form
   (checkout, account, review). */
.woocommerce .required,
.woocommerce form .required,
.woocommerce-page .required {
    color: var(--ewut-uny-accent);
    border: none;
}

/* Push the add-to-cart button to the bottom of equal-height cards */
.woocommerce ul.products li.product .button {
    margin-top: auto;
}

/* Sale flash */
.woocommerce span.onsale {
    background-color: var(--ewut-uny-accent);
    color: var(--ewut-uny-on-accent);
    font-weight: 600;
    font-size: .78em;
    min-height: auto;
    min-width: auto;
    line-height: 1;
    padding: 7px 12px;
    border-radius: 999px;
    top: 12px;
    left: 12px;
    margin: 0;
}

/* ──────────────────────────────────────────────────────────────
   Buttons - map every WC button to the theme .button look
   ────────────────────────────────────────────────────────────── */

.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit,
.woocommerce a.button.alt,
.woocommerce button.button.alt,
.woocommerce input.button.alt,
.woocommerce #place_order {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 140px;
    height: 48px;
    padding: 0 28px;
    color: var(--ewut-uny-on-accent);
    font-family: var(--ewut-uny-font);
    font-size: 1em;
    font-weight: 500;
    line-height: 1;
    border: none;
    border-radius: 8px;
    background-color: var(--ewut-uny-accent);
    box-shadow: none;
    text-shadow: none;
    text-decoration: none;
    transition: background-color ease .2s;
    cursor: pointer;
}

.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover,
.woocommerce #respond input#submit:hover,
.woocommerce a.button.alt:hover,
.woocommerce button.button.alt:hover,
.woocommerce input.button.alt:hover,
.woocommerce #place_order:hover {
    background-color: var(--ewut-uny-accent-hover);
    color: var(--ewut-uny-on-accent);
}

/* Loop add-to-cart can be compact like .button.sm */
.woocommerce ul.products li.product .button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    align-self: flex-start;
    height: 42px;
    padding: 0 20px;
    font-size: .9em;
    min-width: auto;
    text-align: center;
}

/* Disabled / loading state */
.woocommerce a.button.loading,
.woocommerce button.button.loading {
    opacity: .7;
}

.woocommerce a.added_to_cart {
    display: inline-flex;
    align-items: center;
    margin-top: 8px;
    font-size: .85em;
    font-weight: 500;
    color: var(--ewut-uny-accent);
}

/* ──────────────────────────────────────────────────────────────
   Single product
   ────────────────────────────────────────────────────────────── */

.woocommerce div.product .product_title {
    /* Match the blog single-post / page title (.ewut-page-title = 3em,
       lh 1.15, ls -0.02em) so the product name reads at the same scale. */
    font-size: 3em;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.15;
    color: var(--ewut-uny-dark);
    margin: 0 0 24px;
}

.woocommerce div.product div.images .woocommerce-product-gallery__image a img,
.woocommerce div.product div.images > img {
    display: block;
    width: 100%;
    height: 350px;
    box-shadow: none;
    object-fit: cover;
    border-radius: 8px;
}

/* The flexslider viewport clips the main image - round it so the cover
   keeps the 8px radius while the slider is active. */
.woocommerce-product-gallery .flex-viewport {
    border-radius: 8px;
}

/* Gallery thumbnails (flex-control-nav) - small square previews, never
   stretched to the main image's 350px height. */
.woocommerce div.product div.images .flex-control-thumbs {
    display: flex;
    overflow: hidden;
    zoom: 1;
    margin: 4px 0 0;
    padding: 0;
    gap: 4px;
}

.woocommerce div.product div.images .flex-control-thumbs li img {
    width: 100%;
    height: auto;
    aspect-ratio: 1 / 1;
    object-fit: cover;
    border-radius: 8px;
    cursor: pointer;
    opacity: .7;
    transition: opacity .2s;
}

.woocommerce div.product div.images .flex-control-thumbs li img.flex-active,
.woocommerce div.product div.images .flex-control-thumbs li img:hover {
    opacity: 1;
}

.woocommerce div.product div.images img:hover {
    border-radius: 8px;
}

.woocommerce div.product div.images .woocommerce-product-gallery__image a {
    display: block;
    outline-offset: 0;
    border-radius: 8px;
    overflow: hidden;
}

/* The zoom feature injects an absolutely-positioned img.zoomImg that is
   clipped by the nearest positioned ancestor - the gallery__image div
   (position:relative; overflow:hidden), NOT the <a>. Round THAT element
   so the corners stay rounded while zooming on hover. */
.woocommerce div.product div.images .woocommerce-product-gallery__image {
    border-radius: 8px;
    overflow: hidden;
}

/* Full-screen zoom trigger (the 🔍 over the gallery image). WordPress
   replaces the glyph with <img class="emoji"> which, without a width,
   collapses to a 1px-wide sliver. Pin the button to the top-right
   corner and force the emoji to a proper 20×20 square. */
.woocommerce div.product .woocommerce-product-gallery__trigger {
    top: 12px;
    right: 12px;
    left: auto;
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--ewut-uny-white);
    border-radius: 50%;
    box-shadow: 0 2px 8px rgba(0, 0, 0, .12);
    text-indent: 0;
}

.woocommerce div.product .woocommerce-product-gallery__trigger img.emoji {
    width: 20px !important;
    height: 20px !important;
    max-width: none !important;
    margin: 0;
}

.woocommerce div.product p.price,
.woocommerce div.product span.price {
    /* Match the blog post-card meta line (.ewut-post-card__meta →
       12.8px / 400 / muted grey). Price stays BELOW the product title. */
    font-size: .8em !important;
    font-weight: 400 !important;
    color: var(--ewut-uny-muted) !important;
    margin-bottom: 24px;
}

.woocommerce div.product .woocommerce-product-details__short-description {
    color: var(--ewut-uny-dark);
    /* Match blog prose body copy (.ewut-article__body p → 18px / 1.5). */
    font-size: 18px;
    line-height: 1.5;
    margin-bottom: 24px;
}

.woocommerce div.product .woocommerce-product-details__short-description p {
    font-size: 18px;
    line-height: 1.5;
}

.woocommerce div.product p.stock {
    margin: 0 0 24px;
}

.woocommerce div.product form.cart {
    margin-bottom: 24px;
}

.woocommerce .quantity input.qty {
    height: 48px;
    width: 72px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    font-family: var(--ewut-uny-font);
    font-size: 1em;
    text-align: center;
    color: var(--ewut-uny-dark);
}

.woocommerce div.product .woocommerce-tabs ul.tabs {
    padding: 0;
    margin: 0 0 24px;
    border-bottom: 1px solid var(--ewut-uny-border);
}

.woocommerce div.product .woocommerce-tabs ul.tabs::before {
    border-bottom-color: var(--ewut-uny-border);
}

.woocommerce div.product .woocommerce-tabs ul.tabs li {
    background: none;
    border: none;
    border-radius: 0;
    margin: 0 24px 0 0;
    padding: 0 0 12px;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li::before,
.woocommerce div.product .woocommerce-tabs ul.tabs li::after {
    display: none;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li a {
    font-size: .95em;
    font-weight: 600;
    color: var(--ewut-uny-dark);
    padding: 0;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li.active a {
    color: var(--ewut-uny-dark);
}

.woocommerce div.product .woocommerce-tabs ul.tabs li.active {
    border-bottom: 2px solid var(--ewut-uny-accent);
}

/* Tab panel heading - WC outputs an <h2> that would inherit the 44px
   article section title. Scale it down to a card-sized heading. */
.woocommerce div.product .woocommerce-tabs .panel > h2:first-child,
.woocommerce div.product .woocommerce-Tabs-panel > h2:first-child {
    font-size: 1.4em;
    font-weight: 700;
    line-height: 1.3;
    color: var(--ewut-uny-dark);
    margin: 0 0 16px;
}

/* Tab panel prose - match blog body copy (.ewut-article__body → 18px/1.5)
   instead of the WC 16px default. */
.woocommerce div.product .woocommerce-tabs .panel p,
.woocommerce div.product .woocommerce-tabs .panel li,
.woocommerce div.product .woocommerce-Tabs-panel p,
.woocommerce div.product .woocommerce-Tabs-panel li {
    font-size: 18px;
    line-height: 1.5;
    color: var(--ewut-uny-dark);
}

/* ──────────────────────────────────────────────────────────────
   Product meta (SKU / Category / Tags) - stacked rows with icons
   ────────────────────────────────────────────────────────────── */

.woocommerce div.product .product_meta {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--ewut-uny-border);
    font-size: .9em;
}

.woocommerce div.product .product_meta > span {
    display: block;
    color: var(--ewut-uny-dark);
    line-height: 1.6;
    padding: 6px 0;
}

.woocommerce div.product .product_meta > span + span {
    border-top: 1px dashed var(--ewut-uny-border);
}

/* Leading icon for each meta row */
.woocommerce div.product .product_meta > span::before {
    content: "";
    display: inline-block;
    vertical-align: -3px;
    margin-right: 8px;
    width: 18px;
    height: 18px;
    background-color: var(--ewut-uny-ink);
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: 18px 18px;
    mask-size: 18px 18px;
}

/* SKU → hash/tag icon */
.woocommerce div.product .product_meta .sku_wrapper::before {
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='9' x2='20' y2='9'/%3E%3Cline x1='4' y1='15' x2='20' y2='15'/%3E%3Cline x1='10' y1='3' x2='8' y2='21'/%3E%3Cline x1='16' y1='3' x2='14' y2='21'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='9' x2='20' y2='9'/%3E%3Cline x1='4' y1='15' x2='20' y2='15'/%3E%3Cline x1='10' y1='3' x2='8' y2='21'/%3E%3Cline x1='16' y1='3' x2='14' y2='21'/%3E%3C/svg%3E");
}

/* Category → folder icon */
.woocommerce div.product .product_meta .posted_in::before {
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z'/%3E%3C/svg%3E");
}

/* Tag → tag icon */
.woocommerce div.product .product_meta .tagged_as::before {
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z'/%3E%3Cline x1='7' y1='7' x2='7.01' y2='7'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z'/%3E%3Cline x1='7' y1='7' x2='7.01' y2='7'/%3E%3C/svg%3E");
}

/* The label words ("SKU:", "Category:", "Tag:") stay grey; the values
   pick up the dark text and links use the accent on hover. */
.woocommerce div.product .product_meta .sku,
.woocommerce div.product .product_meta > span a {
    color: var(--ewut-uny-dark);
    font-weight: 500;
}

.woocommerce div.product .product_meta > span a:hover {
    color: var(--ewut-uny-accent);
}

/* Related / upsell headings */
.woocommerce .related > h2,
.woocommerce .upsells > h2,
.woocommerce .cross-sells > h2 {
    font-size: 1.6em;
    font-weight: 700;
    color: var(--ewut-uny-dark);
    margin: 0 0 24px;
}

/* Additional-information attributes table - WC ships italic <td> values
   and center-aligned <th> labels. Normalise to upright, left-aligned. */
.woocommerce div.product .woocommerce-product-attributes th,
.woocommerce table.shop_attributes th {
    text-align: left;
    font-weight: 600;
    color: var(--ewut-uny-dark);
}

.woocommerce div.product .woocommerce-product-attributes td,
.woocommerce table.shop_attributes td {
    font-style: normal;
    text-align: left;
    color: var(--ewut-uny-dark);
}

/* Remove WC's zebra striping (rgba(0,0,0,.024) on alternate rows). */
.woocommerce div.product .woocommerce-product-attributes tr th,
.woocommerce div.product .woocommerce-product-attributes tr td,
.woocommerce table.shop_attributes tr th,
.woocommerce table.shop_attributes tr td {
    background: transparent !important;
}

/* Related / up-sell products - ALWAYS a single row on desktop, no matter how
   many items WooCommerce returns (it renders `ul.products.columns-N`, N=2..6).
   We size each card to 1/N of the row minus the (N-1) 24px gaps, driven by the
   columns-N class, so 3 items → 3 across, 4 → 4 across, etc. On narrower
   screens the row recomputes to fewer columns so cards never get too small. */
.related.products ul.products.columns-2 li.product,
.up-sells ul.products.columns-2 li.product {
    flex-basis: calc((100% - 24px) / 2);
    max-width: calc((100% - 24px) / 2);
}
.related.products ul.products.columns-3 li.product,
.up-sells ul.products.columns-3 li.product {
    flex-basis: calc((100% - 48px) / 3);
    max-width: calc((100% - 48px) / 3);
}
.related.products ul.products.columns-4 li.product,
.up-sells ul.products.columns-4 li.product {
    flex-basis: calc((100% - 72px) / 4);
    max-width: calc((100% - 72px) / 4);
}
.related.products ul.products.columns-5 li.product,
.up-sells ul.products.columns-5 li.product {
    flex-basis: calc((100% - 96px) / 5);
    max-width: calc((100% - 96px) / 5);
}
.related.products ul.products.columns-6 li.product,
.up-sells ul.products.columns-6 li.product {
    flex-basis: calc((100% - 120px) / 6);
    max-width: calc((100% - 120px) / 6);
}

/* Tablet: cap at 3 across so cards keep a sensible width. */
@media (max-width: 1024px) {
    .related.products ul.products li.product,
    .up-sells ul.products li.product {
        flex-basis: calc((100% - 48px) / 3) !important;
        max-width: calc((100% - 48px) / 3) !important;
    }
}

/* Small tablet / large phone: 2 across. */
@media (max-width: 768px) {
    .related.products ul.products li.product,
    .up-sells ul.products li.product {
        flex-basis: calc((100% - 24px) / 2) !important;
        max-width: calc((100% - 24px) / 2) !important;
    }
}

/* Phone: single column. */
@media (max-width: 480px) {
    .related.products ul.products li.product,
    .up-sells ul.products li.product {
        flex-basis: 100% !important;
        max-width: 100% !important;
    }
}

/* ──────────────────────────────────────────────────────────────
   Cart
   ────────────────────────────────────────────────────────────── */

.woocommerce table.shop_table {
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    border-collapse: separate;
    border-spacing: 0;
    overflow: hidden;
}

.woocommerce table.shop_table th {
    font-weight: 600;
    color: var(--ewut-uny-dark);
    padding: 16px;
    font-size: .9em;
}

.woocommerce table.shop_table td {
    padding: 16px;
    border-top: 1px solid var(--ewut-uny-border);
    color: var(--ewut-uny-dark);
}

.woocommerce a.remove {
    color: var(--ewut-uny-accent) !important;
    font-weight: 700;
}

.woocommerce a.remove:hover {
    background-color: var(--ewut-uny-accent) !important;
    color: var(--ewut-uny-on-accent) !important;
}

.woocommerce .cart-collaterals .cart_totals,
.woocommerce-cart .cart-collaterals .cart_totals {
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    padding: 24px;
}

.woocommerce .cart_totals h2,
.woocommerce-checkout #order_review_heading {
    font-size: 1.4em;
    font-weight: 700;
    color: var(--ewut-uny-dark);
    margin: 0 0 16px;
}

.woocommerce-cart .wc-proceed-to-checkout a.checkout-button {
    width: 100%;
}

.woocommerce .coupon input.input-text {
    height: 48px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    padding: 0 16px;
    font-family: var(--ewut-uny-font);
}

/* ──────────────────────────────────────────────────────────────
   Checkout + form fields
   ────────────────────────────────────────────────────────────── */

.woocommerce form .form-row label,
.woocommerce-checkout label {
    display: block;
    font-size: .88em;
    font-weight: 500;
    line-height: 1.4;
    color: var(--ewut-uny-dark);
    margin-bottom: 6px;
}

.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce form .form-row select,
.woocommerce-checkout input.input-text,
.woocommerce-checkout textarea,
.select2-container .select2-selection--single {
    min-height: 48px;
    padding: 12px 16px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    font-family: var(--ewut-uny-font);
    font-size: var(--ewut-uny-fs-body);
    color: var(--ewut-uny-dark);
    outline: none;
    transition: border-color .15s ease;
}

/* WC core paints its own chevron via background-image + appearance:none
   on form-row <select>; combined with our global base-select skin that
   yields TWO arrows. Kill the WC background arrow and let the single
   base-select picker-icon stand. */
.woocommerce form .form-row select {
    background-image: none !important;
}

/* Variable-product attribute picker (.variations table).
   1) The label cell defaults to vertical-align:top, so "Color" sat above
      the select - centre it on the field. Right-align it to hug the select.
   2) The <select> shows TWO arrows (WC's own background-image chevron +
      our base-select ::picker-icon); drop the background one, keep the
      single picker-icon like every other themed select. */
.woocommerce table.variations th.label,
.variations th.label {
    vertical-align: middle !important;
    text-align: left;
    padding-right: 32px;
    width: 1%;
    white-space: nowrap;
}

.woocommerce table.variations td.value,
.variations td.value {
    vertical-align: middle !important;
}

.woocommerce table.variations select,
.variations select {
    background-image: none !important;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

/* Override the WooCommerce default (min-width:75%; margin/padding-right:1em)
   so the variation select fills the row width. */
.woocommerce div.product form.cart .variations select {
    min-width: 100%;
    margin-right: 1em;
    padding-right: 1em;
}

/* Constant gap below the attribute table so the qty + add-to-cart row never
   shifts between the "nothing selected" and "variation chosen" states. */
.woocommerce div.product form.cart table.variations {
    margin-bottom: 28px;
}

/* ── Variation swatches (custom theme feature) ─────────────────
   The theme renders clickable swatches in front of the native <select>
   (see inc/woocommerce.php + assets/js/wc-variation-swatches.js). When
   swatches are present the <select> is visually hidden but stays in the
   DOM so WooCommerce's variation JS keeps working. */
.woocommerce div.product form.cart .variations td.value:has(.ewut-swatches) select {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.ewut-swatches {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
}

.ewut-swatch {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    margin: 0;
    border: 1px solid var(--ewut-uny-border);
    background: var(--ewut-uny-white);
    cursor: pointer;
    transition: border-color .15s ease, box-shadow .15s ease, transform .1s ease;
    font-family: var(--ewut-uny-font);
    color: var(--ewut-uny-dark);
}

.ewut-swatch:focus-visible {
    outline: 2px solid var(--ewut-uny-accent);
    outline-offset: 2px;
}

/* Colour swatches - round 32×32 chips filled with the colour itself. */
.ewut-swatches--color .ewut-swatch {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background-color: var(--ewut-swatch-color, #ccc);
    position: relative;
}

/* Text swatches - pills (e.g. sizes). */
.ewut-swatches--text .ewut-swatch {
    min-width: 48px;
    height: 40px;
    padding: 0 16px;
    border-radius: 8px;
    font-size: .95em;
}

/* Hover + active + disabled states. Hover uses a 2px muted ring; the chip is
   border-box so growing the border doesn't change its 32×32 footprint. */
.ewut-swatch:hover {
    border-width: 2px;
    border-color: var(--ewut-uny-muted);
}

.ewut-swatch.is-active {
    border-color: var(--ewut-uny-accent);
    box-shadow: 0 0 0 1px var(--ewut-uny-accent);
}

.ewut-swatches--text .ewut-swatch.is-active {
    background: var(--ewut-uny-accent);
    border-color: var(--ewut-uny-accent);
    color: var(--ewut-uny-on-accent);
}

.ewut-swatch.is-disabled {
    opacity: .35;
    cursor: not-allowed;
    pointer-events: none;
}

/* Reset control inside the swatch row: WooCommerce's "Clear" link rendered as
   a 32×32 circular refresh icon in the muted tone. Its text is replaced by a
   masked SVG. WooCommerce toggles it via `visibility`, so the slot is always
   reserved - the row never jumps between states. */
.ewut-swatches .reset_variations {
    /* 32px gap after the last swatch (row gap is 10px, so add the rest). */
    margin-left: 22px;
    width: 20px;
    height: 20px;
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* No border - a ring here would read as one more colour swatch. */
    border: 0;
    /* Hide the "Clear" text, the icon is drawn with a mask below. */
    font-size: 0;
    line-height: 0;
    color: transparent;
    text-decoration: none;
}

.ewut-swatches .reset_variations::before {
    content: "";
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
    background-color: var(--ewut-uny-muted);
    -webkit-mask: var(--ewut-reset-icon) center / contain no-repeat;
    mask: var(--ewut-reset-icon) center / contain no-repeat;
    --ewut-reset-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='23 4 23 10 17 10'/%3E%3Cpolyline points='1 20 1 14 7 14'/%3E%3Cpath d='M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15'/%3E%3C/svg%3E");
    transition: background-color .15s ease;
}

/* Hover: darken the glyph itself (no ring). */
.ewut-swatches .reset_variations:hover::before {
    background-color: var(--ewut-uny-grey);
}

/* Replace the base-select default (a solid ▼ disclosure triangle) with the
   thin chevron ∨ used across the site (header nav, other selects). Draw it
   as a masked SVG stroke so it matches the light-weight caret, not a heavy
   filled triangle. */
.woocommerce table.variations select::picker-icon,
.variations select::picker-icon {
    content: "";
    width: 12px;
    height: 12px;
    margin-left: auto;
    /* `currentColor` keeps the caret on the select's own text colour, matching
       the global `select::picker-icon` rule in main.css. */
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") center / contain no-repeat;
    transition: transform .2s ease;
}

.woocommerce table.variations select:open::picker-icon,
.variations select:open::picker-icon {
    transform: rotate(180deg);
}

/* The "Clear" reset link appears under the select once a value is chosen.
   Left in flow it grows the row height, which pushes the vertically-centred
   label below the select's centre. Pin it out of flow so the label stays
   aligned to the select itself. */
.woocommerce table.variations td.value,
.variations td.value {
    position: relative;
}

/* "Clear" reset link - when swatches are present the script moves it into the
   swatch row and it becomes a circular "reset" icon (see below). Without
   swatches (plain select) keep it out of flow under the field's right edge so
   it can't change the row height. */
.woocommerce table.variations td.value:not(:has(.ewut-swatches)) .reset_variations,
.variations td.value:not(:has(.ewut-swatches)) .reset_variations {
    position: absolute;
    right: 0;
    top: 100%;
    margin-top: 4px;
    font-size: .85em;
}

/* Variable products: the per-variation price under the dropdown duplicates
   the main product price (which now reflects the selected variation via
   assets/js/wc-variation-price.js). Hide the duplicate but keep the
   .single_variation block's bottom margin to separate the qty + add-to-cart
   row below. */
.woocommerce div.product .single_variation .woocommerce-variation-price {
    display: none;
}

/* No dynamic margin here - the constant gap lives on table.variations above,
   so the add-to-cart row doesn't jump when a variation is chosen. */
.woocommerce div.product .woocommerce-variation.single_variation {
    margin: 0;
}

/* Placeholder + text color - match the builder forms exactly.
   WooCommerce (classic + block checkout) defaults to a dark #2B2D2F
   placeholder/text; the builder uses --ewut-uny-dark text and a 50%
   muted placeholder. Bring WC in line so theme & builder forms look
   identical. */
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea,
.woocommerce-checkout input.input-text,
.woocommerce-checkout textarea,
.wc-block-components-form .wc-block-components-text-input input[type="text"],
.wc-block-components-form .wc-block-components-text-input input[type="email"],
.wc-block-components-form .wc-block-components-text-input input[type="tel"],
.wc-block-components-form .wc-block-components-text-input input[type="number"],
.wc-block-components-form .wc-block-components-text-input input[type="password"],
.wc-block-components-form .wc-block-components-text-input input[type="url"],
.wc-block-components-text-input input,
.wc-block-components-address-form input,
.wc-block-components-textarea {
    color: var(--ewut-uny-dark) !important;
}

.woocommerce form .form-row input.input-text::placeholder,
.woocommerce form .form-row textarea::placeholder,
.woocommerce-checkout input.input-text::placeholder,
.woocommerce-checkout textarea::placeholder,
.wc-block-components-form .wc-block-components-text-input input[type="text"]::placeholder,
.wc-block-components-form .wc-block-components-text-input input[type="email"]::placeholder,
.wc-block-components-form .wc-block-components-text-input input[type="tel"]::placeholder,
.wc-block-components-text-input input::placeholder,
.wc-block-components-address-form input::placeholder,
.wc-block-components-textarea::placeholder {
    color: rgba(15, 15, 15, .5);
    opacity: 1;
}

/* Block checkout uses a FLOATING LABEL as the visible placeholder (no
   real placeholder attribute). WC paints it dark (#2B2D2F → our dark);
   the builder's placeholder is 50% muted. Mute the resting label so it
   reads like the builder placeholder; once the field is filled the
   label shrinks to the top and we keep it readable. */
.wc-block-components-text-input label {
    color: rgba(15, 15, 15, .5) !important;
}

.wc-block-components-text-input.is-active label {
    color: var(--ewut-uny-grey) !important;
}

/* Select / combobox labels (Country, State) use a different class and
   stay full-dark by default - match the muted placeholder tone, and
   keep the shrunk/active label readable grey. */
.wc-blocks-components-select .wc-blocks-components-select__label,
.wc-block-components-combobox label {
    color: rgba(15, 15, 15, .5) !important;
}

.wc-blocks-components-select.is-active .wc-blocks-components-select__label,
.wc-block-components-combobox.is-active label {
    color: var(--ewut-uny-grey) !important;
}

/* Login form layout.
   The username/password rows are .form-row-wide: label STACKED above a
   full-width input (normal block flow). Only the LAST row (submit button
   + "Remember me") should be a horizontal flex row. Previously flex was
   applied to ALL .form-row which tipped the labels/inputs sideways. */
.woocommerce-form-login .form-row-wide,
.woocommerce form.login .form-row-wide {
    display: block;
    margin-bottom: 20px;
}

.woocommerce-form-login .form-row-wide input.input-text,
.woocommerce form.login .form-row-wide input.input-text {
    width: 100%;
    display: block;
}

/* Submit row: button + remember checkbox on one vertically-centred line. */
.woocommerce-form-login .form-row:not(.form-row-wide),
.woocommerce form.login .form-row:not(.form-row-wide) {
    display: flex;
    align-items: center;
    gap: 20px;
    flex-wrap: wrap;
}

/* WC's .form-row carries a clearfix ::before/::after (display:table). In
   the flex submit row those become flex items and the 20px gap pushes
   the "Remember me" checkbox ~20px off the left edge. Remove them. */
.woocommerce-form-login .form-row:not(.form-row-wide)::before,
.woocommerce-form-login .form-row:not(.form-row-wide)::after,
.woocommerce form.login .form-row:not(.form-row-wide)::before,
.woocommerce form.login .form-row:not(.form-row-wide)::after {
    display: none !important;
}

.woocommerce-form-login .form-row .button,
.woocommerce form.login .form-row .button {
    margin: 0;
    flex: 0 0 auto;
    width: auto;
    min-width: 140px;
}

.woocommerce-form-login label.woocommerce-form__label-for-checkbox,
.woocommerce form.login label.woocommerce-form__label-for-checkbox {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
}

/* Swap order: "Log in" button first, "Remember me" after it. */
.woocommerce-form-login .form-row:not(.form-row-wide) .button,
.woocommerce form.login .form-row:not(.form-row-wide) .button {
    order: 0;
}

.woocommerce-form-login .form-row:not(.form-row-wide) label.woocommerce-form__label-for-checkbox,
.woocommerce form.login .form-row:not(.form-row-wide) label.woocommerce-form__label-for-checkbox {
    order: 1;
}

.woocommerce-form-login label.woocommerce-form__label-for-checkbox input,
.woocommerce form.login label.woocommerce-form__label-for-checkbox input {
    margin: 0;
}
/* ──────────────────────────────────────────────────────────────
   Classic WooCommerce form checkboxes: Remember me, the privacy
   opt-in on registration, Terms on the classic checkout.
   ──────────────────────────────────────────────────────────────
   Drawn by hand instead of handing the job to `accent-color`. With
   `accent-color` the browser keeps control of the tick and picks its
   colour by contrast against the fill: a dark accent gets a white tick,
   a LIGHT accent (the olive palette, for one) gets a near-black one. So
   the mark changed colour with the customer's brand colour, and on a
   light accent it read as a dirty smudge rather than a tick.
   `appearance: none` takes that decision back: accent fill, white tick,
   always, whatever the accent is.
   Same technique and metrics as the builder's own consent checkbox
   (`.ewub-form__terms input[type="checkbox"]`), including the 4px
   radius - 8px on an 18px box reads as a radio button. */
.woocommerce input[type="checkbox"].woocommerce-form__input-checkbox,
#review_form .comment-form-cookies-consent input[type="checkbox"] {
    -webkit-appearance: none;
    appearance: none;
    position: relative;
    flex-shrink: 0;
    width: 18px;
    height: 18px;
    border: 1px solid var(--ewut-uny-border-dark);
    border-radius: 4px;
    background: var(--ewut-uny-white);
    cursor: pointer;
    transition:
        background-color 0.15s ease,
        border-color 0.15s ease;
}
.woocommerce input[type="checkbox"].woocommerce-form__input-checkbox:checked,
#review_form .comment-form-cookies-consent input[type="checkbox"]:checked {
    background: var(--ewut-uny-accent);
    border-color: var(--ewut-uny-accent);
}
/* The tick itself: two borders of a rotated box. No glyph, no SVG, so it
   cannot inherit a text colour or fail to load. */
.woocommerce input[type="checkbox"].woocommerce-form__input-checkbox:checked::after,
#review_form .comment-form-cookies-consent input[type="checkbox"]:checked::after {
    content: "";
    position: absolute;
    left: 5px;
    top: 2px;
    width: 5px;
    height: 9px;
    border: solid #fff;
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}
.woocommerce input[type="checkbox"].woocommerce-form__input-checkbox:focus-visible,
#review_form .comment-form-cookies-consent input[type="checkbox"]:focus-visible {
    outline: 2px solid var(--ewut-uny-accent);
    outline-offset: 2px;
}

/* Kill WC's default boxed border around the login form - the theme uses
   a clean borderless form like the builder. */
.woocommerce form.login,
.woocommerce form.register {
    border: none;
    padding: 0;
    margin: 0;
    border-radius: 0;
}

/* Login form: 60% wide, centered horizontally. */
.woocommerce form.woocommerce-form-login {
    width: 60%;
    margin-left: auto;
    margin-right: auto;
}

/* On the login page, center the whole column (page header with title +
   the WooCommerce login block) to the same 60% so they all line up.
   Scoped via :has() so the logged-in dashboard stays full-width. */
.ewut-article:has(.woocommerce-form-login) .ewut-page-header,
.ewut-article__body:has(.woocommerce-form-login) > .woocommerce {
    width: 60%;
    margin-left: auto;
    margin-right: auto;
}

/* 60% of a desktop column is a comfortable form; 60% of a phone is not. At 425px
   the content column is 377px, so the form measured 226px - inputs barely wider
   than their own labels, and the error notice (which lives in the same column)
   wrapped "The username ... is not registered on this site" over 11 lines into a
   264px-tall red block. Below the burger breakpoint the column goes full width;
   the centering margins stay harmless. */
@media (max-width: 1024px) {
    .woocommerce form.woocommerce-form-login,
    .ewut-article:has(.woocommerce-form-login) .ewut-page-header,
    .ewut-article__body:has(.woocommerce-form-login) > .woocommerce {
        width: 100%;
    }
}

/* Inside that centered column the form fills its width. */
.ewut-article__body:has(.woocommerce-form-login) .woocommerce form.woocommerce-form-login {
    width: 100%;
}

/* Remember-me checkbox flush to the left edge (align with the inputs);
   WC adds stray spacing that pushed it ~23px in. */
.woocommerce-form-login .form-row:not(.form-row-wide) {
    justify-content: flex-start;
    padding-left: 0;
    margin-left: 0;
}

.woocommerce-form-login label.woocommerce-form__label-for-checkbox {
    padding-left: 0;
    margin-left: 0;
}

/* "Lost your password?" - smaller than body text, left aligned. */
.woocommerce-form-login .lost_password,
.woocommerce .woocommerce-LostPassword.lost_password {
    font-size: .85em;
    margin: 12px 0 0;
    text-align: left;
}

.woocommerce-form-login .lost_password a {
    color: var(--ewut-uny-dark);
}

.woocommerce-form-login .lost_password a:hover {
    color: var(--ewut-uny-accent);
}

/* Show/hide-password eye toggle inside password fields. */
.woocommerce form .show-password-input,
.woocommerce-page form .show-password-input {
    right: 1em;
    opacity: .5;
    zoom: .75;
}

.woocommerce form .form-row input.input-text:focus,
.woocommerce form .form-row textarea:focus,
.woocommerce form .form-row select:focus {
    border-color: var(--ewut-uny-accent);
}

/* NOTE: WooCommerce's select2 enhancement for country/state is DISABLED on the
   front end (see ewut_uny_disable_wc_country_select2 in functions.php) so those
   fields render as plain native <select> elements - identical to the block
   checkout and the builder forms, with the browser/OS drawing the option list
   (neutral light-grey hover, no accent, no blue). No select2 dropdown styling
   is needed or wanted here. */

.woocommerce #payment,
.woocommerce-checkout #payment {
    background: var(--ewut-uny-light);
    border-radius: 8px;
}

.woocommerce #payment ul.payment_methods {
    border-bottom: 1px solid var(--ewut-uny-border);
}

/* ──────────────────────────────────────────────────────────────
   My account
   ────────────────────────────────────────────────────────────── */

.woocommerce-account .woocommerce-MyAccount-navigation ul {
    list-style: none;
    margin: 0;
    padding: 0;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    overflow: hidden;
}

.woocommerce-account .woocommerce-MyAccount-navigation li {
    border-bottom: 1px solid var(--ewut-uny-border);
    display: block;
    padding: 0;
    margin: 0;
}

.woocommerce-account .woocommerce-MyAccount-navigation li:last-child {
    border-bottom: none;
}

.woocommerce-account .woocommerce-MyAccount-navigation li a {
    display: block;
    padding: 14px 18px;
    font-size: .92em;
    font-weight: 500;
    color: var(--ewut-uny-grey);
    border-left: 4px solid transparent;
}

.woocommerce-account .woocommerce-MyAccount-navigation li a:hover {
    color: var(--ewut-uny-dark);
}

.woocommerce-account .woocommerce-MyAccount-navigation li.is-active a {
    color: var(--ewut-uny-dark);
    font-weight: 600;
    border-left: 4px solid var(--ewut-uny-accent);
}

/* Larger gap between the tabs column and the content column. */
.woocommerce-account .woocommerce-MyAccount-navigation {
    width: 28%;
    margin-right: 5%;
}

.woocommerce-account .woocommerce-MyAccount-content {
    width: 67%;
}

/* ──────────────────────────────────────────────────────────────
   My Account → Addresses (classic, .woocommerce-Address)
   Two columns; each block: card-sized title with an inline edit
   link, plus a non-italic address body. WC ships an unclassed <h2>
   (which would inherit the 44px article h2) and a native <address>
   (italic from prose typography) - normalise both.
   ────────────────────────────────────────────────────────────── */

.woocommerce .col2-set .col-1,
.woocommerce-page .col2-set .col-1 {
    float: left;
    width: 48%;
    padding-right: 5%;
}

.woocommerce-Addresses.col2-set {
    display: flex;
    flex-wrap: wrap;
}

.woocommerce-Addresses .woocommerce-Address {
    flex: 1 1 0;
    min-width: 0;
}

.woocommerce-Address-title {
    display: flex;
    align-items: baseline;
    margin-bottom: 12px;
}

.woocommerce-Address-title h2 {
    margin: 0 16px 0 0;
    font-size: 1em;
    font-weight: 700;
    line-height: 1.3;
}

.woocommerce-Address-title h3 {
    margin: 0;
    font-size: 1em;
    font-weight: 700;
    line-height: 1.3;
}

.woocommerce-Address-title .edit {
    flex: 0 0 auto;
    font-size: .85em;
    font-weight: 500;
    color: var(--ewut-uny-accent);
    white-space: nowrap;
}

.woocommerce-Address address {
    font-style: normal;
    font-size: 1em;
    line-height: 1.6;
    color: var(--ewut-uny-grey);
}

/* Edit-account password section is wrapped in a native <fieldset>,
   whose default border/padding shifts its fields ~2px right of the
   fields above it (the "staircase"). Strip the chrome so all rows
   align; style the legend as a plain sub-heading. */
.woocommerce-MyAccount-content fieldset {
    margin: 24px 0 0;
    padding: 0;
    border: none;
    min-width: 0;
}

.woocommerce-MyAccount-content form.woocommerce-EditAccountForm .form-row:last-child {
    margin-top: 0;
}

.woocommerce-form-row em {
    display: inline-block;
    padding-top: 8px !important;
    font-size: .85em;
    font-weight: 400;
    color: var(--ewut-uny-grey);
}

.woocommerce-MyAccount-content fieldset legend {
    padding: 0;
    margin: 0 0 16px;
    font-size: 1em;
    font-weight: 700;
    color: var(--ewut-uny-dark);
}

/* Submit row (Save address / Save changes).

   No top margin: the spacing above the button is already owned by the last field
   row, which carries `margin-bottom: 20px` of its own (measured). The 24px that
   used to sit here stacked on top of that, so the button drifted away from the
   form. Bottom margin 24px is the only gap the row needs to provide - the submit
   <p> is the last element of the account content, so it is all that separates the
   button from what follows (the footer on narrow screens, where WC's 8px prose
   default left the button flush against it). */
.woocommerce-MyAccount-content form > p:last-child,
.woocommerce-MyAccount-content .woocommerce-address-fields > p:last-child,
.woocommerce-MyAccount-content form .form-row:last-child {
    margin-top: 0;
    margin-bottom: 24px;
}

/* WC ships unclassed <h2> headings (e.g. "Login", "Register") inside
   .woocommerce content; they would inherit the 44px article h2. Scale
   them down to a section sub-heading. */
.woocommerce-MyAccount-content .woocommerce > h2,
.woocommerce-account .woocommerce > h2,
.woocommerce > h2 {
    font-size: 1.4em;
    font-weight: 700;
    line-height: 1.25;
    margin: 0 0 20px;
}

/* First heading in the account content sits flush with the top of the
   column (no inherited top margin pushing it down). */
.ewut-article__body .woocommerce-MyAccount-content h2 {
    margin-top: 0;
    font-size: 1.15em;
}

/* ──────────────────────────────────────────────────────────────
   Notices
   ────────────────────────────────────────────────────────────── */

/* WooCommerce notices reuse the theme's .ewut-alert look: soft Ant Design
   tint + 1px border + 8px radius + a left icon. message = success (green),
   info = info (blue), error = danger (red). The button (View cart / etc.)
   floats to the right and keeps its own component styling. */
.woocommerce-message,
.woocommerce-info,
.woocommerce-error {
    display: flex;
    align-items: center;
    /* No `gap`. WooCommerce prints the notice as: text node, button, then an
       EMPTY text node - and that empty node is a third flex item, so a gap
       added 16px of nothing after the button. Measured: 24px of padding read
       as 41px on screen. Spacing is set per item instead (icon and button
       below), which is also what `inline-separators-no-flex` warns about. */
    gap: 0;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    /* 16px on the right: the gap between the action button and the notice edge,
       stated ONLY here so nothing can double it. */
    padding: 14px 16px 14px 18px;
    margin: 0 0 24px;
    font-size: .95em;
    line-height: var(--ewut-uny-lh-normal);
    color: var(--ewut-uny-dark);
    background: var(--ewut-uny-light);
    list-style: none;
}

/* Icon (left) - SVG mask, tinted per variant. WooCommerce positions its own
   ::before absolutely (with its icon font); reset that to a normal flex item
   so the icon sits in the row instead of overlapping the text. */
.woocommerce-message::before,
.woocommerce-info::before,
.woocommerce-error::before {
    content: "";
    position: static;
    top: auto;
    left: auto;
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
    /* Own right margin instead of a `gap` on the container: the notice holds
       bare text nodes, and each of those counts as a flex item, so a gap also
       spaced the empty node after the button. */
    margin: 0 16px 0 0;
    padding: 0;
    font-size: 0;
    line-height: 0;
    background-color: currentColor;
    -webkit-mask: var(--ewut-notice-icon) center / contain no-repeat;
    mask: var(--ewut-notice-icon) center / contain no-repeat;
}

/* Per-variant tint: bg + border + icon colour. Body text stays dark and
   readable; only the icon, border and <strong> carry the variant colour. */

/* success (message) - green */
.woocommerce-message {
    background: #f6ffed;
    border-color: #b7eb8f;
    --ewut-notice-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 11.08V12a10 10 0 1 1-5.93-9.14'/%3E%3Cpolyline points='22 4 12 14.01 9 11.01'/%3E%3C/svg%3E");
}
.woocommerce-message::before { background-color: #389e0d; }
.woocommerce-message strong { color: #389e0d; }

/* info - blue */
.woocommerce-info {
    background: #e6f4ff;
    border-color: #91caff;
    --ewut-notice-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='16' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12.01' y2='8'/%3E%3C/svg%3E");
}
.woocommerce-info::before { background-color: #0958d9; }
.woocommerce-info strong { color: #0958d9; }

/* error - red */
.woocommerce-error {
    background: #fff2f0;
    border-color: #ffccc7;
    --ewut-notice-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='15' y1='9' x2='9' y2='15'/%3E%3Cline x1='9' y1='9' x2='15' y2='15'/%3E%3C/svg%3E");
}
.woocommerce-error::before { background-color: #cf1322; }
.woocommerce-error strong { color: #cf1322; }

/* The inline button (View cart / Continue shopping) sits at the right edge. */
/* Action button (View cart / etc.) pinned to the right end of the row. The gap
   to the notice edge is the notice's own `padding-right` (24px, set on the
   notice rule above) - no extra margin here, or the two would add up.

   `flex: 0 0 auto` is load-bearing. A flex item defaults to `flex-shrink: 1`, so
   in a narrow notice the button was compressed BELOW the width its label needs.
   With `white-space: nowrap` the text cannot rewrap, and `.button` has
   `min-width: 140px` + 28px side padding, so the label spilled straight out of
   the box and printed over the notice text next to it. Measured on
   /my-account/orders/ with the long "Confirm email address" label: box 140px
   against 149px of content, 9px of overflow at 375-425px (also 6px at 600 and
   3px at 900). "Browse products" is short enough to fit, which is why only one
   of the two notices on that page looked broken. */
.woocommerce-message .button,
.woocommerce-info .button,
.woocommerce-error .button {
    margin-left: auto;
    white-space: nowrap;
    flex: 0 0 auto;
    /* Always the last item on the row. WooCommerce is not consistent about where
       it puts the button: in "No order has been made yet. Browse products" the
       text comes first, but in the "Confirm email address" notice the <a> is
       printed BEFORE the message. With `margin-left: auto` on a first-in-DOM
       button that auto margin claimed all the free space on its left, pushing the
       button right and the text onto the next line. Ordering it last makes both
       notices read the same way - message left, action right - without touching
       WooCommerce markup. */
    order: 1;
}

/* Very narrow screens only: below this the message text and a long button label
   genuinely cannot share a line, so the row is allowed to break rather than
   overflow. Above it the notice stays a single row and the text rewraps to fit
   beside the button, which is how these notices are designed to read.

   `row-gap` (not `gap`) on purpose: it applies only when a break happens, and a
   column gap would space the EMPTY text node WooCommerce prints after the button
   - the trap documented on the notice rule above. */
@media (max-width: 480px) {
    .woocommerce-message,
    .woocommerce-info,
    .woocommerce-error {
        flex-wrap: wrap;
        row-gap: 14px;
    }

    /* On its own line the button starts at the message's left edge instead of the
       right one. `margin-left: auto` is what pins it right while it shares a row
       with the text; once it has wrapped, that same auto margin claims the whole
       line and pushes the button to the far right, which reads as unrelated to the
       text above it. Zeroing it here lines the button up under the message. */
    .woocommerce-message .button,
    .woocommerce-info .button,
    .woocommerce-error .button {
        margin-left: 0;
    }
}

/* Multi-line error list: WooCommerce prints .woocommerce-error as a <ul>. Keep
   the single icon on the container and stack the <li> items cleanly. */
.woocommerce-error li {
    list-style: none;
    margin: 0;
}
.woocommerce-error {
    flex-wrap: wrap;
}

/* WooCommerce gives notices role="alert" tabindex="-1" and focuses them to
   scroll into view; suppress the browser focus outline so it doesn't fight
   the coloured border. */
.woocommerce-message:focus,
.woocommerce-info:focus,
.woocommerce-error:focus {
    outline: none;
}

/* ──────────────────────────────────────────────────────────────
   Contact Form 7 - match theme form fields + button
   ────────────────────────────────────────────────────────────── */

.wpcf7-form p {
    margin-bottom: 16px;
}

.wpcf7-form label {
    display: block;
    font-size: .88em;
    font-weight: 500;
    color: var(--ewut-uny-dark);
    margin-bottom: 6px;
}

.wpcf7-form input[type=text],
.wpcf7-form input[type=email],
.wpcf7-form input[type=tel],
.wpcf7-form input[type=url],
.wpcf7-form input[type=number],
.wpcf7-form input[type=date],
.wpcf7-form textarea,
.wpcf7-form select {
    width: 100%;
    min-height: 48px;
    padding: 12px 14px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    font-family: var(--ewut-uny-font);
    font-size: .95em;
    color: var(--ewut-uny-dark);
    background-color: var(--ewut-uny-white);
    outline: none;
    transition: border-color .2s;
}

.wpcf7-form textarea {
    min-height: 140px;
    resize: vertical;
}

/* CF7 placeholders - muted tone, same as the builder CF7 skin
   (rgba(15,15,15,.5)) so theme-rendered CF7 forms match the plugin. */
.wpcf7-form input::placeholder,
.wpcf7-form textarea::placeholder {
    color: rgba(15, 15, 15, .5);
    opacity: 1;
}

/* Empty <select> first option reads in the muted placeholder tone, then
   switches back to dark once a real option is chosen. */
.wpcf7-form select:has(option[value=""]:checked) {
    color: rgba(15, 15, 15, .5);
}

.wpcf7-form input:focus,
.wpcf7-form textarea:focus,
.wpcf7-form select:focus {
    border-color: var(--ewut-uny-accent);
}

.wpcf7-form input[type=submit],
.wpcf7-form button[type=submit] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 140px;
    height: 48px;
    padding: 0 28px;
    color: var(--ewut-uny-on-accent);
    font-family: var(--ewut-uny-font);
    font-size: 1em;
    font-weight: 500;
    border: none;
    border-radius: 8px;
    background-color: var(--ewut-uny-accent);
    cursor: pointer;
    transition: background-color ease .2s;
}

.wpcf7-form input[type=submit]:hover,
.wpcf7-form button[type=submit]:hover {
    background-color: var(--ewut-uny-accent-hover);
}

.wpcf7-form .wpcf7-not-valid {
    border-color: #e2401c !important;
}

.wpcf7-not-valid-tip {
    font-size: .82em;
    color: #e2401c;
}

.wpcf7-form .wpcf7-spinner {
    margin: 0 0 0 12px;
}

.wpcf7 form .wpcf7-response-output {
    border-radius: 8px;
    border-width: 1px;
    font-size: .9em;
    margin: 16px 0 0;
    padding: 12px 16px;
}

/* ──────────────────────────────────────────────────────────────
   WooCommerce Blocks (cart / checkout / mini-cart) - block-based
   markup used by the modern Cart & Checkout blocks. Restyle the
   primary action button, quantity selector, fields and totals.
   ────────────────────────────────────────────────────────────── */

/* Empty-cart: WC paints a 220px masked sad-face icon via the
   heading's ::before. It's off-brand and oversized - remove it. */
.wc-block-cart__empty-cart__title.with-empty-cart-icon::before,
.with-empty-cart-icon::before {
    display: none !important;
}

/* "Your cart is currently empty!" - frame it in the same bordered card
   as the archive intro block (.ewut-archive__intro): 1px border with a
   4px accent top edge, 8px radius, left-aligned title (like an archive
   description). Mirrors /category/ and /YYYY/MM/ intro cards. */
.wp-block-woocommerce-cart .wc-block-cart__empty-cart__title,
.wp-block-woocommerce-empty-cart-block .wc-block-cart__empty-cart__title {
    border: 1px solid var(--ewut-uny-border);
    border-top: 4px solid var(--ewut-uny-accent);
    border-radius: 8px;
    padding: 20px 24px !important;
    margin: 0 0 32px !important;
    text-align: left !important;
    font-size: 1.25em !important;
    font-weight: 600 !important;
    line-height: 1.25 !important;
    color: var(--ewut-uny-dark);
}

/* Drop the WC separator (<hr>) between the empty-cart card and the
   "New in store" recommendations - the intro card carries its own
   border, so the extra rule reads as clutter. */
.wp-block-woocommerce-empty-cart-block .wp-block-separator {
    display: none !important;
}

/* ── WooCommerce Blocks heading scale ──────────────────────────
   WC block headings are unclassed <h2>/<h3> that inherit the theme's
   44px article section heading - so "Your cart is currently empty!",
   "Products in cart", "New in store", "Cart totals" all render huge.
   Pin them to a card-sized heading. */
.wc-block-cart h2,
.wc-block-cart h3,
.wp-block-woocommerce-cart h2,
.wp-block-woocommerce-cart h3,
.wc-block-components-totals-wrapper h2,
.wp-block-woocommerce-cart-cross-sells-block h2,
.wc-block-cart-cross-sells h2 {
    font-size: 1.4em !important;
    font-weight: 700 !important;
    line-height: 1.3 !important;
    margin: 0 0 16px !important;
    color: var(--ewut-uny-dark);
}

/* Recommended / cross-sell product grid ("New in store") - its
   titles render tiny and unreadable. Bring them to the loop-card
   scale (16px/600 dark) and give prices/buttons sensible sizing. */
.wc-block-cart-cross-sells .wc-block-grid__product-title,
.wp-block-woocommerce-cart-cross-sells-block .wc-block-grid__product-title,
.wc-block-grid__product-title,
.wc-block-components-product-name {
    /* Match the shop loop card title (16px / 600 dark). The block-grid
       container sets a small base font, so pin px rather than em. */
    margin: 4px 0 0 !important;
    font-size: 16px !important;
    font-weight: 600 !important;
    line-height: 1.3;
    color: var(--ewut-uny-dark) !important;
    /* One line only - clip overflow with an ellipsis so titles of
       different lengths never push the card taller than its neighbours. */
    display: block;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    /* The ellipsis needs something to clip against. Without a width limit the
       nowrap title stretched its own link past the card - 219px of text in a
       184px card - and the overflow landed on the neighbouring product instead
       of being trimmed. */
    max-width: 100%;
}

/* The link wrapping the title is the box that was being stretched, so it needs
   the same limit; `min-width: 0` lets it shrink inside the flex card. */
.wc-block-cart-cross-sells .wc-block-grid__product-link,
.wp-block-woocommerce-cart-cross-sells-block .wc-block-grid__product-link,
.wp-block-woocommerce-empty-cart-block .wc-block-grid__product-link,
.wc-block-grid__product .wc-block-grid__product-link {
    display: block;
    max-width: 100%;
    min-width: 0;
    overflow: hidden;
}

.wc-block-grid__product .wc-block-grid__product-price,
.wc-block-cart-cross-sells .wc-block-grid__product-price {
    /* Match the shop loop card price / blog meta (12.8px / 400 / muted). */
    font-size: 12.8px !important;
    font-weight: 400 !important;
    color: var(--ewut-uny-muted) !important;
}

/* Cross-sell grid images - match shop cards (3:2, rounded). A fixed
   aspect ratio keeps every image the SAME height regardless of the
   column's exact content width. */
.wc-block-cart-cross-sells .wc-block-grid__product-image img,
.wc-block-grid__product-image img {
    display: block;
    width: 100%;
    aspect-ratio: 3 / 2;
    object-fit: cover;
    border-radius: 8px;
}

/* The cross-sell product row (ul.wc-block-grid__products) ships a
   24px left padding that indents the whole row inside the empty-cart
   block. Zero it so the products align with the container edges. */
.wp-block-woocommerce-empty-cart-block ul.wc-block-grid__products,
.wc-block-cart-cross-sells ul.wc-block-grid__products {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* WC uses transparent left/right BORDERS on each grid item as the
   column gutter, which indents the first card's content by 8px and
   centers the text. Drop the outer gutters and left-align so the
   first product lines up exactly under the "New in store" heading. */
.wp-block-woocommerce-empty-cart-block .wc-block-grid__products .wc-block-grid__product,
.wc-block-cart-cross-sells .wc-block-grid__products .wc-block-grid__product {
    text-align: left;
}

/* WC's transparent side borders as gutters make card content widths
   unequal (crumbs: end cards get one 8px border, middle cards two →
   193px vs 185px), which cascades into DIFFERENT image heights. Drop
   the border gutters entirely and space the columns with a real gap so
   every card - and every image - is exactly the same width/height. */
.wp-block-woocommerce-empty-cart-block ul.wc-block-grid__products,
.wc-block-cart-cross-sells ul.wc-block-grid__products {
    gap: 20px;
}

.wp-block-woocommerce-empty-cart-block .wc-block-grid__products .wc-block-grid__product,
.wc-block-cart-cross-sells .wc-block-grid__products .wc-block-grid__product {
    border-left-width: 0 !important;
    border-right-width: 0 !important;
}

/* The four-column width belongs ONLY to the widths where the row is still a
   flex row. Below 480px WooCommerce itself switches ul.wc-block-grid__products
   to `display: block` (all-products.css, `.has-4-columns` and friends), and the
   card carries `margin: 0 auto` from the same stylesheet. While the 25% width
   below was unconditional and !important, that combination made every card
   70.5px wide inside a 342px column and centred it: the whole product list sat
   pushed half a screen to the right, with the images spilling out of their own
   cards. Scoping the width restores WooCommerce's one-column phone layout. */
/* Four across only from 960px. Below that the cards get narrower than their own
   contents: at 844px (a phone held sideways) a card was 184px while the titles
   measured 191-219px, so a title ran past its card and over the next one. Two
   columns give 388px per card at that width, which the longest title clears. */
@media (min-width: 960px) {
    .wp-block-woocommerce-empty-cart-block .wc-block-grid__products .wc-block-grid__product,
    .wc-block-cart-cross-sells .wc-block-grid__products .wc-block-grid__product {
        /* Keep 4 columns: account for the 3 × 20px gaps so the fourth card
           doesn't wrap to a new row (was 25% + gap → overflowed). */
        flex: 0 0 calc((100% - 60px) / 4) !important;
        max-width: calc((100% - 60px) / 4) !important;
    }
}

/* Two across between the phone portrait and 960px: tablets, and a phone turned
   sideways. One 20px gap, hence the single subtraction. */
@media (min-width: 481px) and (max-width: 959px) {
    .wp-block-woocommerce-empty-cart-block .wc-block-grid__products .wc-block-grid__product,
    .wc-block-cart-cross-sells .wc-block-grid__products .wc-block-grid__product {
        flex: 0 0 calc((100% - 20px) / 2) !important;
        max-width: calc((100% - 20px) / 2) !important;
    }
}

/* One full-width card per row on a phone. */
@media (max-width: 480px) {
    .wp-block-woocommerce-empty-cart-block .wc-block-grid__products .wc-block-grid__product,
    .wc-block-cart-cross-sells .wc-block-grid__products .wc-block-grid__product {
        width: 100% !important;
        max-width: 100% !important;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }
}

/* Cross-sell / "New in store" product grid buttons render as
   block buttons (.wp-block-button__link.add_to_cart_button) with a
   dark default bg and dark text (unreadable). Make them accent. */
.wc-block-grid__products .wp-block-button__link,
.wp-block-button__link.add_to_cart_button,
.wc-block-components-product-button .wp-block-button__link {
    background-color: var(--ewut-uny-accent) !important;
    color: var(--ewut-uny-on-accent) !important;
    border-radius: 8px !important;
}

.wc-block-grid__products .wp-block-button__link:hover,
.wp-block-button__link.add_to_cart_button:hover,
.wc-block-components-product-button .wp-block-button__link:hover {
    background-color: var(--ewut-uny-accent-hover) !important;
}

/* NOTE: WooCommerce's block stylesheets (wc-blocks.css, packages-style.css,
   cart.css) are enqueued AFTER this file, so plain single-class selectors here
   lose the cascade and the button text fell back to dark. Classes are doubled
   to raise specificity above them. */
.wc-block-components-button.wp-element-button,
.wp-block-woocommerce-cart .wc-block-cart__submit-button,
.wc-block-cart__submit-button.wc-block-cart__submit-button,
.wc-block-components-checkout-place-order-button.wc-block-components-checkout-place-order-button,
.wc-block-checkout__actions_row .wc-block-components-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 48px;
    height: auto;
    padding: 12px 28px;
    background-color: var(--ewut-uny-accent);
    color: var(--ewut-uny-on-accent);
    font-family: var(--ewut-uny-font);
    font-size: 1em;
    font-weight: 500;
    border: none;
    border-radius: 8px;
    box-shadow: none;
    transition: background-color ease .2s;
    cursor: pointer;
}

.wc-block-components-button.wp-element-button:hover,
.wc-block-cart__submit-button:hover,
.wc-block-components-checkout-place-order-button:hover,
.wc-block-checkout__actions_row .wc-block-components-button:hover {
    background-color: var(--ewut-uny-accent-hover);
    color: var(--ewut-uny-on-accent);
}

/* Button text node inside the block button. Doubled class so it beats WC's
   own later-loading block styles. */
.wc-block-components-button__text,
.wc-block-components-button .wc-block-components-button__text,
.wc-block-cart__submit-button .wc-block-components-button__text,
.wc-block-components-checkout-place-order-button .wc-block-components-button__text {
    color: inherit;
}

/* Primary block buttons keep white label text (WC's cart.css would otherwise
   paint it dark since it loads after this file). */
.wc-block-cart__submit-button.wc-block-cart__submit-button,
.wc-block-cart__submit-button.wc-block-cart__submit-button .wc-block-components-button__text,
.wc-block-components-checkout-place-order-button.wc-block-components-checkout-place-order-button,
.wc-block-components-checkout-place-order-button.wc-block-components-checkout-place-order-button .wc-block-components-button__text {
    color: var(--ewut-uny-on-accent);
}

/* Secondary / outline block buttons (e.g. "edit", apply coupon) */
.wc-block-components-button.is-secondary,
.wc-block-components-totals-coupon__button {
    background-color: transparent;
    color: var(--ewut-uny-dark);
    border: 2px solid var(--ewut-uny-accent);
    border-radius: 8px;
}

.wc-block-components-button.is-secondary:hover,
.wc-block-components-totals-coupon__button:hover {
    background-color: var(--ewut-uny-accent);
    color: var(--ewut-uny-on-accent);
}

/* Quantity selector */
.wc-block-components-quantity-selector {
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    overflow: hidden;
}

.wc-block-components-quantity-selector__button {
    color: var(--ewut-uny-dark);
}

/* The +/− buttons keep a visible 1px outline after click (looks like
   a stray border around the plus). Only show a focus ring on keyboard
   focus, not on mouse press. */
.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button,
.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button:focus,
.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button:active {
    outline: none !important;
    box-shadow: none !important;
    border: none !important;
}

.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button:focus-visible {
    outline: 2px solid var(--ewut-uny-accent) !important;
}

/* The number field inside the stepper must NOT draw its own border - the
   frame is owned by .wc-block-components-quantity-selector. Our generic
   `.woocommerce input[type=number]` rule would otherwise paint a second
   box inside the frame (visible as a rectangle around the digit), also on
   hover/focus. Keep it borderless in every state; keyboard users still get
   the accent ring via :focus-visible. */
.woocommerce .wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input,
.woocommerce-page .wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input,
.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input,
.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input:hover,
.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input:focus,
.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input:active {
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    outline: none !important;
    background: transparent !important;
}

.wc-block-components-quantity-selector input.wc-block-components-quantity-selector__input:focus-visible {
    outline: none !important;
}

/* Keyboard focus is shown on the stepper frame instead of the field, so the
   accent ring never reads as a second border inside the rounded box. */
.wc-block-components-quantity-selector:focus-within {
    border-color: var(--ewut-uny-accent);
}

/* Text inputs / selects */
.wc-block-components-text-input input,
.wc-block-components-text-input input[type=text],
.wc-block-components-text-input input[type=email],
.wc-block-components-text-input input[type=tel],
.wc-block-components-select .wc-block-components-select__container,
.wc-block-components-address-form input {
    border: 1px solid var(--ewut-uny-border) !important;
    border-radius: 8px !important;
    font-family: var(--ewut-uny-font);
    color: var(--ewut-uny-dark);
}

.wc-block-components-text-input input:focus {
    border-color: var(--ewut-uny-accent) !important;
    box-shadow: none !important;
    outline: none;
}

/* Product titles / prices in block cart.
   Reference: commerce-13 cart skin - product name is dark, weight 600,
   body size (16px). WC Blocks renders the name as an <a> and paints it
   accent/500 via its own (later-loaded) stylesheet, so we raise
   specificity with the cart-item wrapper to win without !important. */
.wc-block-cart-item__wrap .wc-block-components-product-name,
table.wc-block-cart-items .wc-block-cart-items__row .wc-block-components-product-name,
.wc-block-components-order-summary-item__description .wc-block-components-product-name,
.wc-block-components-order-summary .wc-block-components-product-name,
a.wc-block-components-product-name {
    color: inherit;
    font-weight: 600 !important;
    font-size: 16px !important;
    line-height: 1.4;
    text-decoration: none;
}

.wc-block-cart-item__wrap .wc-block-components-product-name:hover,
table.wc-block-cart-items .wc-block-cart-items__row .wc-block-components-product-name:hover,
a.wc-block-components-product-name:hover {
    color: var(--ewut-uny-accent);
}

.wc-block-components-product-price,
.wc-block-formatted-money-amount,
.wc-block-components-totals-item__value {
    color: var(--ewut-uny-dark);
    font-weight: 600;
}

/* Remove-link accent */
.wc-block-cart-item__remove-link {
    color: var(--ewut-uny-muted);
}

.wc-block-cart-item__remove-link:hover {
    color: var(--ewut-uny-accent);
}

/* Accent links throughout blocks */
.wc-block-components-checkout-step__description a,
.wc-block-components-address-card a,
.wc-block-components-totals-coupon-link {
    color: var(--ewut-uny-accent);
}

/* ──────────────────────────────────────────────────────────────
   WooCommerce Blocks select / combobox (checkout country, state,
   etc.). These are NOT native <select> - they're WC's own control
   (.wc-blocks-components-select / .wc-blocks-components-combobox)
   and keep a dark thin 4px border by default, which clashes with
   the theme's 1px/8px inputs. Normalise them to match.
   ────────────────────────────────────────────────────────────── */
.wc-blocks-components-select .wc-blocks-components-select__select,
.wc-blocks-components-combobox .components-form-token-field__input-container,
.wc-blocks-components-combobox-control input,
.wc-block-components-combobox .wc-blocks-components-select__container {
    border: 1px solid var(--ewut-uny-border) !important;
    border-radius: 8px !important;
    background-color: var(--ewut-uny-white) !important;
    font-family: var(--ewut-uny-font);
    color: var(--ewut-uny-dark);
}

.wc-blocks-components-select__container,
.wc-blocks-components-combobox {
    border-radius: 8px !important;
}

.wc-blocks-components-select .wc-blocks-components-select__select:focus,
.wc-blocks-components-combobox-control input:focus,
.wc-blocks-components-combobox.is-active .components-form-token-field__input-container {
    border-color: var(--ewut-uny-accent) !important;
    box-shadow: none !important;
    outline: none;
}

/* The floating field label baseline tone */
.wc-block-components-checkout-step__title,
.wc-block-components-form .wc-block-components-checkout-step__title {
    color: var(--ewut-uny-dark);
}

/* Address card (saved address summary) - soften to theme border. */
.wc-block-components-address-card {
    border: 1px solid var(--ewut-uny-border) !important;
    border-radius: 8px;
}

/* ──────────────────────────────────────────────────────────────
   WC Blocks - product metadata (cart/checkout line-item description
   + variation data) and quantity-selector focus state.
   ────────────────────────────────────────────────────────────── */

.wp-block-woocommerce-cart .wc-block-components-product-metadata .wc-block-components-product-metadata__description > p,
.wp-block-woocommerce-cart .wc-block-components-product-metadata .wc-block-components-product-metadata__variation-data,
.wp-block-woocommerce-checkout .wc-block-components-product-metadata .wc-block-components-product-metadata__description > p,
.wp-block-woocommerce-checkout .wc-block-components-product-metadata .wc-block-components-product-metadata__variation-data {
    font-size: 1em;
    line-height: 1.4;
    margin: 0 0 8px;
}

.wc-block-components-product-details__name,
.wc-block-components-product-details__value {
    display: inline;
    font-size: 1.1em;
    font-weight: 500;
}

.wc-block-cart-item__quantity .wc-block-cart-item__remove-link svg {
    fill: var(--ewut-uny-grey);
}

/* WC core paints the remove icon via `fill: currentColor` on the svg,
   so the real colour comes from the link's text `color` (dark). Set
   the link colour to grey so the icon (currentColor) follows. */
.wc-block-cart-item__remove-link,
table.wc-block-cart-items .wc-block-cart-items__row .wc-block-cart-item__quantity .wc-block-cart-item__remove-link svg {
    color: var(--ewut-uny-grey);
    fill: var(--ewut-uny-grey);
}

.wc-block-components-quantity-selector .wc-block-components-quantity-selector__button:focus {
    box-shadow: none;
    outline: none;
    background-color: var(--ewut-uny-light);
}

/* Cart line-item image cell - drop the left padding so the product
   thumbnail aligns flush with the column edge. The cart renders inside
   .ewut-article__body, whose generic `table td` padding (14px) would
   otherwise win, so scope to that context. */
.ewut-article__body .wc-block-cart-items .wc-block-cart-item__image,
.ewut-article__body td.wc-block-cart-item__image {
    padding-left: 0;
}

/* Checkout country/state combobox shows TWO arrows: our global
   base-select caret + WC's own __expand svg. Drop the WC svg and
   keep the single base-select caret (same as the sidebar selects). */
.wc-blocks-components-select .wc-blocks-components-select__expand,
.wc-blocks-components-select__container .wc-blocks-components-select__expand {
    display: none !important;
}

/* Our base-select caret on the WC combobox: pin it vertically centered
   and give it breathing room from the right edge. WC's floating-label
   layout otherwise drops it to the bottom-right corner. */
.wc-blocks-components-select__select {
    position: relative;
    padding-right: 16px !important;
}
.wc-blocks-components-select__select::picker-icon {
    position: absolute;
    right: 16px;
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
}

/* Open state: the global `select:open::picker-icon` rule (main.css:8335) sets
   `transform: rotate(180deg)`, and because `transform` is one property, that
   replaces the `translateY(-50%)` above instead of adding to it. The caret then
   loses its centring and drops by half its own height - measured on the checkout
   Country/Region select, the computed transform came out as
   `matrix(1, 0, 0, 1, 0, -6)`, i.e. the rotation gone and only a 6px shift left.
   Restating both functions in one declaration keeps the caret centred while it
   flips. Order matters: translate first, then rotate, so the rotation happens
   around the already-centred position. */
.wc-blocks-components-select__select:open::picker-icon {
    transform: translateY(-50%) rotate(180deg);
}

/* ──────────────────────────────────────────────────────────────
   Shipping / Payment options (radio-control blocks)
   WooCommerce ships these option rows with a dark/lime inset box-shadow
   frame and a green package border. Reskin to the theme form language:
   1px token border, 8px radius, white fill; the selected row gets an
   accent border. No harsh black/green outlines.
   ────────────────────────────────────────────────────────────── */

/* The whole rates control has no frame of its own - the individual
   option rows carry the border. */
.wc-block-components-shipping-rates-control__package {
    border: none !important;
    padding: 0 !important;
}

/* NO frames on option rows. WooCommerce (and the accordion payment
   variant) wrap each method in nested boxes, so any border/box-shadow
   produces the "everything is outlined / double outline" mess. Kill all
   of it - no border, no ring, no radius, transparent bg. The selected
   state is shown by the accent radio dot alone. Rows are separated by a
   single hairline divider, not a box. Covers every WC option variant:
   __option (shipping), -accordion-option (payment) and their checked /
   highlighted modifiers. */
.wc-block-components-radio-control__option,
.wc-block-components-radio-control-accordion-option,
.wc-block-components-radio-control__option-checked,
.wc-block-components-radio-control__option--checked-option-highlighted,
.wc-block-components-radio-control-accordion-option--checked-option-highlighted,
.wc-block-components-radio-control-accordion-option:has(.wc-block-components-radio-control__input:checked) {
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    background: transparent !important;
    margin: 0 !important;
}

/* No separators between methods either - WooCommerce's default bottom
   border here is dark (#0F0F0F); kill it entirely, no hairline. */
.wc-block-components-radio-control__option,
.wc-block-components-radio-control-accordion-option {
    border-bottom: 0 !important;
}

/* KILL the wrapping frame. WooCommerce draws a full rectangle around the
   whole radio group via `.wc-block-components-radio-control::after`
   (absolutely-positioned, 1px semi-transparent black, 4px radius) plus a
   highlight ring on the selected option's ::after. These are the stray
   outer/inner outlines. Remove every radio-control pseudo frame. */
.wc-block-components-radio-control::after,
.wc-block-components-radio-control::before,
.wc-block-components-radio-control__option::after,
.wc-block-components-radio-control__option::before,
.wc-block-components-radio-control-accordion-option::after,
.wc-block-components-radio-control-accordion-option::before {
    border: 0 !important;
    box-shadow: none !important;
    content: none !important;
    display: none !important;
}


/* The expandable description inside a selected payment method - flush,
   no inner box, muted text. */
.wc-block-components-radio-control-accordion-content {
    border: none !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding: 0 16px 16px 48px;
}


/* Secondary label (e.g. the "FREE" pill) - accent, not lime-green. */
.wc-block-components-radio-control__option .wc-block-components-radio-control__secondary-label,
.wc-block-checkout__shipping-option--free {
    color: var(--ewut-uny-accent) !important;
    font-weight: 600;
}

/* Radio option label (e.g. "Free shipping") ships at weight 500; bring
   it to 400 to match the surrounding form text. */
.wc-block-components-radio-control .wc-block-components-radio-control__label,
.wc-block-components-radio-control__option .wc-block-components-radio-control__label {
    font-weight: 400 !important;
    color: var(--ewut-uny-dark);
}

/* Any description text under a payment method (e.g. "Pay with cash upon
   delivery") - muted grey, not full-weight body. */
.wc-block-components-radio-control-accordion-content,
.wc-block-components-radio-control__description {
    color: var(--ewut-uny-grey);
}

/* ──────────────────────────────────────────────────────────────
   Checkout - elements NOT visible in this store's config but that a
   buyer WILL enable (extra shipping methods, gateways like Stripe /
   PayPal card fields, saved cards, order note, express-pay area).
   They all use WooCommerce Blocks classes and otherwise render with
   the plugin's default dark/thin outlines. Skin them ONCE here so the
   theme ships fully styled out of the box, not just for COD.
   ────────────────────────────────────────────────────────────── */

/* Card / gateway <input> and <textarea> that don't carry the
   .wc-block-components-text-input wrapper (e.g. Stripe's own fields,
   generic gateway inputs, the order-note textarea). Match our inputs. */
.wc-block-checkout__payment-method input:not([type="radio"]):not([type="checkbox"]),
.wc-block-checkout__payment-method textarea,
.wc-block-checkout__payment-method select,
.wc-block-components-checkout-step__content input[type="text"]:not(.wc-block-components-text-input input),
.wc-block-components-checkout-step__content textarea,
.wc-block-components-address-form textarea,
.wc-block-checkout__add-note textarea,
.wc-block-components-textarea {
    border: 1px solid var(--ewut-uny-border) !important;
    border-radius: 8px !important;
    background-color: var(--ewut-uny-white) !important;
    font-family: var(--ewut-uny-font);
    color: var(--ewut-uny-dark);
    box-shadow: none !important;
}

.wc-block-checkout__payment-method input:not([type="radio"]):not([type="checkbox"]):focus,
.wc-block-checkout__payment-method textarea:focus,
.wc-block-checkout__payment-method select:focus,
.wc-block-checkout__add-note textarea:focus,
.wc-block-components-textarea:focus {
    border-color: var(--ewut-uny-accent) !important;
    box-shadow: none !important;
    outline: none;
}

/* Hosted card fields (Stripe / PayPal render an iframe inside a themed
   wrapper). Frame the wrapper like our inputs so the embedded field
   sits in a token-bordered box instead of a black hairline. */
.wc-block-checkout__payment-method .wc-block-components-text-input,
.wcstripe-card-field,
.wc-stripe-elements-field,
.wc-block-checkout__payment-method .StripeElement,
.wc-block-checkout__payment-method [id*="card"] > iframe,
.wc-block-checkout__payment-method .payment-method-fields > div {
    border-radius: 8px;
}

/* ──────────────────────────────────────────────────────────────
   WooCommerce Blocks checkout: checkboxes and radios in brand colour
   ──────────────────────────────────────────────────────────────
   These used to be four `accent-color` declarations, and all four did nothing.
   WooCommerce Blocks puts `appearance: none` on its controls and draws them
   itself - the tick is an <svg class="wc-block-components-checkbox__mark">, the
   radio dot is a `::before`. `accent-color` only affects a control the BROWSER
   still draws, so with `appearance: none` it is ignored: measured on a checkout
   with an olive accent, the tick and the dot came out black while the order
   summary beside them was olive.
   So the theme overrides what WooCommerce actually paints. No `!important`
   anywhere - this file is enqueued after wc-blocks.css, so matching specificity
   already wins. */

/* Checkbox: accent box, white tick. The <svg> mark sits next to the input and
   inherits nothing useful, so its fill is set directly. */
.wc-block-components-checkbox__input[type="checkbox"]:checked {
    background: var(--ewut-uny-accent);
    border-color: var(--ewut-uny-accent);
}
.wc-block-components-checkbox__input[type="checkbox"]:checked + .wc-block-components-checkbox__mark {
    fill: #fff;
}

/* Radio: accent ring with an accent dot. Only the checked state is repainted -
   an unchecked control keeps WooCommerce's neutral grey, which is correct.
   The dot selector carries the PARENT class on purpose. WooCommerce writes
   `.wc-block-components-radio-control .wc-block-components-radio-control__input:checked:before`,
   and without that parent our rule was one class lighter and lost no matter the
   file order - measured: ring went accent, dot stayed black. */
.wc-block-components-radio-control__input:checked {
    border-color: var(--ewut-uny-accent);
}
.wc-block-components-radio-control .wc-block-components-radio-control__input:checked::before {
    background: var(--ewut-uny-accent);
}

/* Terms and marketing opt-in live in the payment step and are the same
   component, so they are covered by the checkbox rules above. Kept as one
   selector list rather than repeated per step. */
.wc-block-checkout__payment-method .wc-block-components-checkbox__input[type="checkbox"]:checked,
.wc-block-components-checkout-step__content .wc-block-components-checkbox__input[type="checkbox"]:checked {
    background: var(--ewut-uny-accent);
    border-color: var(--ewut-uny-accent);
}

/* Validation / error state - accent-family red border, no harsh black
   box. WooCommerce marks invalid fields with .has-error. */
.wc-block-components-text-input.has-error input,
.wc-block-components-textarea.has-error,
.wc-block-checkout__payment-method .has-error input {
    border-color: #d63638 !important;
    box-shadow: none !important;
}

.wc-block-components-validation-error {
    color: #d63638;
}

/* Block notice banners (coupon feedback, gateway messages, cart/checkout
   store notices) - match the theme's classic notices / .ewut-alert look:
   soft Ant Design tint + 1px border + 8px radius + left icon. WooCommerce
   Blocks add .is-success / .is-info / .is-warning / .is-error modifiers. */
/* Class is doubled to raise specificity above WooCommerce's own cart.css,
   which loads after this file with equal (0,2,0) specificity and would
   otherwise keep its 4px radius / 16px padding / stock tints. */
.wc-block-components-notice-banner.wc-block-components-notice-banner {
    display: flex;
    align-items: center;
    gap: 16px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    padding: 14px 18px;
    margin: 0 0 24px;
    font-family: var(--ewut-uny-font);
    font-size: .95em;
    line-height: var(--ewut-uny-lh-normal);
    color: var(--ewut-uny-dark);
    background: var(--ewut-uny-light);
}

/* Keep WooCommerce's own coloured circle icon (a solid disc with a white
   glyph); just normalise its size and spacing. */
.wc-block-components-notice-banner.wc-block-components-notice-banner > svg {
    flex: 0 0 auto;
    width: 24px;
    height: 24px;
    margin: 0;
}

/* Body copy wrapper keeps dark, readable text. */
.wc-block-components-notice-banner .wc-block-components-notice-banner__content {
    color: var(--ewut-uny-dark);
    padding: 0;
}

/* success - green */
.wc-block-components-notice-banner.wc-block-components-notice-banner.is-success {
    background: #f6ffed;
    border-color: #b7eb8f;
    color: #389e0d;
}
/* info - blue */
.wc-block-components-notice-banner.wc-block-components-notice-banner.is-info {
    background: #e6f4ff;
    border-color: #91caff;
    color: #0958d9;
}
/* warning - amber */
.wc-block-components-notice-banner.wc-block-components-notice-banner.is-warning {
    background: #fffbe6;
    border-color: #ffe58f;
    color: #d48806;
}
/* error - red */
.wc-block-components-notice-banner.wc-block-components-notice-banner.is-error {
    background: #fff2f0;
    border-color: #ffccc7;
    color: #cf1322;
}

/* A dismiss (×) button, when present, sits at the right edge. */
.wc-block-components-notice-banner .wc-block-components-button {
    margin-left: auto;
}

/* Express-checkout area separator ("Or") + buttons wrapper - keep it
   from inheriting stray borders. */
.wc-block-components-express-payment,
.wc-block-components-express-payment__event-buttons > li {
    border-radius: 8px;
}

/* Saved payment tokens list (returning customers) - each saved card is
   a radio-control option, already skinned above; just ensure the token
   label text uses theme colour. */
.wc-block-components-saved-payment-method-options .wc-block-components-radio-control__label {
    color: var(--ewut-uny-dark);
}

/* ── Block cart polish ─────────────────────────────────────────
   WC's cart.css loads AFTER this file with equal specificity, so a
   few defaults (qty border, totals framing) leak through. Raise
   specificity to land the theme skin. */

/* Quantity stepper - token border + 8px radius (WC ships 1px/4px
   semi-transparent). */
.wc-block-cart .wc-block-components-quantity-selector,
.wp-block-woocommerce-cart .wc-block-components-quantity-selector,
table.wc-block-cart-items .wc-block-components-quantity-selector {
    border: 1px solid var(--ewut-uny-border) !important;
    border-radius: 8px !important;
}

/* Keyboard focus lands on the frame (the field itself is borderless). */
.wc-block-cart .wc-block-components-quantity-selector:focus-within,
.wp-block-woocommerce-cart .wc-block-components-quantity-selector:focus-within,
table.wc-block-cart-items .wc-block-components-quantity-selector:focus-within {
    border-color: var(--ewut-uny-accent) !important;
}

/* Totals sidebar - frame it as a card like the builder commerce skin
   so the summary reads as a distinct panel, not loose text. */
.wc-block-cart .wc-block-cart__sidebar .wp-block-woocommerce-cart-order-summary-block,
.wp-block-woocommerce-cart .wc-block-cart__sidebar .wp-block-woocommerce-cart-order-summary-block {
    border: 1px solid var(--ewut-uny-border);
    border-top: 4px solid var(--ewut-uny-accent);
    border-radius: 8px;
    padding: 20px 24px 8px;
    background: var(--ewut-uny-white);
}

/* Totals rows: clear label/value alignment and a divider above the
   estimated total. */
.wc-block-components-totals-item {
    padding: 6px 0;
}

.wc-block-components-totals-item__label {
    color: var(--ewut-uny-grey);
}

.wc-block-components-totals-footer-item {
    margin-top: 8px;
    padding-top: 16px;
}

.wc-block-components-totals-footer-item .wc-block-components-totals-item__label {
    color: var(--ewut-uny-dark);
    font-weight: 600;
}

/* Checkout button fills the sidebar width and sits below the totals. */
.wc-block-cart__submit-container .wc-block-cart__submit-button {
    width: 100%;
    margin-top: 16px;
}

/* Product short-description / metadata in the cart line - keep it
   compact and grey, not full body weight. */
.wc-block-components-product-metadata {
    font-size: .9em;
    color: var(--ewut-uny-grey);
    margin-top: 4px;
}

/* ── Block cart table - match the builder commerce-13 lined-table
   skin: uppercase muted headers, 1px row separators, compact
   vertically-centred cells (instead of WC's 210px-tall loose rows). */

/* Column headers: small, uppercase, muted, tracked. */
.wc-block-cart-items__header-product,
.wc-block-cart-items__header-total,
.wc-block-cart-items__header-image {
    font-size: .82em !important;
    font-weight: 700 !important;
    color: var(--ewut-uny-muted) !important;
    text-transform: uppercase;
    letter-spacing: .05em;
    padding: 0 0 14px !important;
    border-bottom: 1px solid var(--ewut-uny-border);
    vertical-align: middle;
}

/* Row cells: tight, vertically-centred (no separators). */
table.wc-block-cart-items .wc-block-cart-items__row > td,
.wc-block-cart .wc-block-cart-items__row > td {
    padding-top: 18px !important;
    padding-bottom: 18px !important;
    vertical-align: middle !important;
}

/* The cart line dumps the FULL product description, bloating the row.
   Clamp it to ONE line: the whole text column has to stay within the height of
   the thumbnail next to it, and a second description line overflows that budget.

   A line-clamp needs `overflow: hidden`, and that hides whatever sticks out of
   the line box - so the line box must be tall enough for the glyphs. With
   line-height 1 it was exactly font-size and the clamp shaved the tops and
   bottoms off the letters; 1.25 leaves room for ascenders and descenders. */
.wc-block-components-product-metadata__description,
.wc-block-components-product-metadata__description p {
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
    line-height: 1.25;
    margin: 0;
}

/* Image cell - compact 64px thumb, small right gap.
   Vertically CENTRED against the row, like the product text and the TOTAL: with
   `vertical-align: top` the 64px thumb sat 26px above the row's centre line
   (measured), so the three cells did not line up with each other. */
table.wc-block-cart-items .wc-block-cart-items__row > td.wc-block-cart-item__image,
.wc-block-cart .wc-block-cart-items__row > td.wc-block-cart-item__image {
    width: var(--ewut-cart-thumb);
    padding-right: 16px !important;
    padding-left: 0 !important;
    vertical-align: middle !important;
}

/* One token for the thumb, shared with the text column's height cap, so the
   thumbnail stays the height budget for everything beside it. */
.wc-block-cart-items,
.wc-block-cart {
    --ewut-cart-thumb: 64px;
}

.wc-block-cart-item__image img {
    width: var(--ewut-cart-thumb) !important;
    height: var(--ewut-cart-thumb);
    object-fit: cover;
    border-radius: 8px;
}

/* Product cell. The row's own layout lives in the "Cart line" block below; the
   old `> * { margin: 0 0 6px }` stack was dropped because the wrap now has two
   children and each one states its own spacing. */
.wc-block-cart-item__product {
    padding-left: 0 !important;
}

/* Total price right-aligned and dark/600, vertically centred in the row.
   WC's own cart.css forces `display:flex` on this cell, which collapses it to
   its content height and pins the price to the top; restore the table cell so
   `vertical-align:middle` centres it against the row. */
.wc-block-cart-item__total {
    text-align: right;
    display: table-cell !important;
    vertical-align: middle !important;
}

/* ── Checkout: normalise box radii to the theme's 8px ──────────
   WC ships 4-5px radii on several checkout boxes (address card,
   shipping/payment option rows, no-payment notice, the order-summary
   panel). Bring them to 8px. Small circular controls (radio dot,
   quantity badge) are intentional and left alone. */
.wc-block-components-address-card,
.wc-block-components-radio-control__option,
.wc-block-checkout__no-payment-methods-notice,
.wp-block-woocommerce-checkout-order-summary-block,
.wc-block-components-checkout-step,
.wc-block-checkout__payment-method .wc-block-components-radio-control__option {
    border-radius: 8px !important;
}


/* ──────────────────────────────────────────────────────────────
   Checkout order-summary line items
   Row layout: [image+qty badge] | [name over unit price] | [total].
   Defaults make the qty badge oversized and starve the total column,
   so long names collide with the price. Shrink the badge, give the
   total column more room, and clamp the product name to one line.
   ────────────────────────────────────────────────────────────── */

/* Quantity badge over the thumbnail - smaller circle + smaller text. */
.wc-block-components-order-summary-item__quantity {
    min-width: 16px !important;
    width: 16px !important;
    min-height: 16px !important;
    height: 16px !important;
    font-size: 10px !important;
    line-height: 16px !important;
}

/* WooCommerce renders the line-item list as `display:table; width:100%`,
   which sizes to its min-content and overflows the card to the right when
   product names are long. Force block layout so width:100% is respected
   and the row's flex children can actually shrink. */
.wc-block-components-order-summary .wc-block-components-order-summary__content {
    display: block !important;
}

/* Middle column (image is separate) takes all free space and can shrink,
   so the total price is pushed to the row's right edge and every price
   lines up in one column. min-width:0 lets the name ellipsis kick in. */
.wc-block-components-order-summary-item__description {
    flex: 1 1 auto;
    min-width: 0;
}

/* Product name clamped to one line - long titles get an ellipsis instead
   of pushing the price out of the card. */
.wc-block-components-order-summary-item__description .wc-block-components-product-name {
    display: block;
    /* WooCommerce's checkout.css sets max-width:max-content on the name,
       which defeats the ellipsis (the element grows to fit its text and
       overruns the price). Override it so the name is bounded by the
       flex column and clips instead. */
    max-width: 100% !important;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Total price: hug the right edge, don't force extra width. The 16px
   right margin matches the inset of the Subtotal/Total values below, so
   every price lines up in one column instead of overflowing the card. */
.wc-block-components-order-summary-item__total-price {
    flex: 0 0 auto;
    margin-left: 12px;
    text-align: right;
}

/* Order-summary line-item image/price fine-tuning (vertical rhythm):
   nudge the thumbnail down and give the total price a touch more top
   padding so it sits on the product-name baseline. */
.wc-block-components-order-summary .wc-block-components-order-summary-item__image {
    margin-top: 12px !important;
    padding-bottom: 16px;
    position: relative;
    width: 48px;
}

.wc-block-components-order-summary .wc-block-components-order-summary-item__total-price {
    margin-left: auto;
    padding-top: 9px !important;
    text-align: right;
}


/* ──────────────────────────────────────────────────────────────
   Single-product review form (#review_form)
   WooCommerce ships the review form as a bare comment form - native
   tiny inputs with the browser's 1px border. Skin every field to match
   the theme's form controls (see .ewut-comment-form / .ewut-contact__form):
   full-width text fields, 12×16 padding, 1px token border, 8px radius,
   accent focus. The rating <select> reuses the global ::picker(select)
   skin, we only size the closed control here.
   ────────────────────────────────────────────────────────────── */
#review_form .comment-form {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* Each labelled row (author / email / comment) - label above, field full
   width, stacked vertically. */
#review_form .comment-form-author,
#review_form .comment-form-email,
#review_form .comment-form-comment {
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

/* Rating row: label + stars on the LEFT, the select filling the rest of the
   width on the RIGHT, on one line. 24px top gap from the description. */
#review_form .comment-form-rating {
    margin: 24px 0 0;
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-areas:
        "label  select"
        "stars  select";
    align-items: center;
    column-gap: 40px;
    row-gap: 8px;
}

#review_form .comment-form-rating > label {
    grid-area: label;
    /* "Your rating" label matches "Your review" (18px / 500). */
    font-size: 18px;
}

#review_form .comment-form-rating .stars {
    grid-area: stars;
    margin: 0;
}

#review_form .comment-form-rating select {
    grid-area: select;
    width: 100%;   /* fill the remaining width on the right */
    align-self: center;
}

/* Rating stars are inline links; strip the dotted underline the theme's
   `p a` rule would otherwise add. */
#review_form .comment-form-rating .stars a {
    border-bottom: none;
    text-decoration: none;
}

#review_form .comment-form label {
    font-weight: 500;
    color: var(--ewut-uny-dark);
}

#review_form .comment-form input[type="text"],
#review_form .comment-form input[type="email"],
#review_form .comment-form textarea,
#review_form .comment-form select {
    width: 100%;
    padding: 12px 16px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    font-family: var(--ewut-uny-font);
    font-size: var(--ewut-uny-fs-body);
    color: var(--ewut-uny-dark);
    background: var(--ewut-uny-white);
    outline: none;
    transition: border-color .15s ease;
}

/* The rating select is base-select; give the closed control the same box. */
#review_form .comment-form select {
    height: 48px;
    cursor: pointer;
}

#review_form .comment-form textarea {
    min-height: 120px;
    resize: vertical;
}

#review_form .comment-form input[type="text"]:focus,
#review_form .comment-form input[type="email"]:focus,
#review_form .comment-form textarea:focus,
#review_form .comment-form select:focus {
    border-color: var(--ewut-uny-accent);
}

/* Cookie-consent row: checkbox + label inline, not stacked. */
#review_form .comment-form-cookies-consent {
    flex-direction: row;
    align-items: center;
    gap: 10px;
    margin: 0;
}

/* Size only. The look (accent box, white tick) comes from the shared classic
   checkbox rule higher up in this file, which this selector was added to -
   `accent-color` used to live here and left the tick black on a light accent. */
#review_form .comment-form-cookies-consent input {
    flex: 0 0 auto;
}

#review_form .comment-form-cookies-consent label {
    font-weight: 400;
    color: var(--ewut-uny-muted);
}

/* Submit - theme accent button, matches .button. */
#review_form .form-submit {
    margin: 0;
}

/* ──────────────────────────────────────────────────────────────
   Catch-all: EVERY WooCommerce form control looks like a theme input.
   A single broad rule (rather than per-form selectors) guarantees any
   WC form - review, login, register, checkout (classic + blocks), cart,
   coupon, order tracking, address, lost-password - renders the same
   field skin as the theme: 1px token border, 8px radius, 12×16 padding,
   theme font, min-height 48, accent focus. Later specific rules may set
   heights, but the box style is unified here.
   ────────────────────────────────────────────────────────────── */
.woocommerce input[type="text"],
.woocommerce input[type="email"],
.woocommerce input[type="tel"],
.woocommerce input[type="url"],
.woocommerce input[type="number"],
.woocommerce input[type="password"],
.woocommerce input[type="search"],
.woocommerce input.input-text,
.woocommerce textarea,
.woocommerce select,
.woocommerce-page input[type="text"],
.woocommerce-page input[type="email"],
.woocommerce-page input[type="tel"],
.woocommerce-page input[type="url"],
.woocommerce-page input[type="number"],
.woocommerce-page input[type="password"],
.woocommerce-page input[type="search"],
.woocommerce-page input.input-text,
.woocommerce-page textarea,
.woocommerce-page select,
.wc-block-components-text-input input,
.wc-block-components-textarea {
    padding: 12px 16px;
    border: 1px solid var(--ewut-uny-border);
    border-radius: 8px;
    font-family: var(--ewut-uny-font);
    font-size: var(--ewut-uny-fs-body);
    color: var(--ewut-uny-dark);
    background: var(--ewut-uny-white);
    outline: none;
    transition: border-color .15s ease;
}

/* Single-line controls keep a consistent 48px height; textareas grow. */
.woocommerce input[type="text"],
.woocommerce input[type="email"],
.woocommerce input[type="tel"],
.woocommerce input[type="url"],
.woocommerce input[type="number"],
.woocommerce input[type="password"],
.woocommerce input[type="search"],
.woocommerce input.input-text,
.woocommerce select,
.woocommerce-page input.input-text,
.woocommerce-page select,
.wc-block-components-text-input input {
    height: 48px;
}

.woocommerce textarea,
.woocommerce-page textarea,
.wc-block-components-textarea {
    min-height: 120px;
    resize: vertical;
}

.woocommerce input[type="text"]:focus,
.woocommerce input[type="email"]:focus,
.woocommerce input[type="tel"]:focus,
.woocommerce input[type="url"]:focus,
.woocommerce input[type="number"]:focus,
.woocommerce input[type="password"]:focus,
.woocommerce input[type="search"]:focus,
.woocommerce input.input-text:focus,
.woocommerce textarea:focus,
.woocommerce select:focus,
.woocommerce-page input.input-text:focus,
.woocommerce-page textarea:focus,
.woocommerce-page select:focus,
.wc-block-components-text-input input:focus,
.wc-block-components-textarea:focus {
    border-color: var(--ewut-uny-accent);
}

/* Rating select: small breathing room below the closed control. */
#review_form .comment-form select {
    margin-bottom: 8px;
}

/* Tighten the review-form intro paragraphs ("no reviews yet", "be the first…",
   "required fields…") so they sit closer together. */
.woocommerce #review_form #respond p {
    margin: -4px 0 5px 0;
}

/* Rating stars sized to match the review label scale. */
.woocommerce p.stars a {
    font-size: 16px;
}

/* Single-product price on EVERY product page: 18px, dark colour, weight 600. */
.single-product .summary .price,
.single-product .summary .price .woocommerce-Price-amount,
.single-product .summary .price bdi {
    font-size: 18px !important;
    color: var(--ewut-uny-dark) !important;
    font-weight: 600 !important;
}

/* Cart line item (block cart). One horizontal band per row, vertically
   centred: [image] | [name over price] | [quantity] | [TOTAL].
   The product cell holds name + price stacked as a flex column on the left,
   with the quantity stepper sitting in the free space on its right, centred
   against the whole stack. Image and TOTAL are separate table cells kept
   vertically centred by `vertical-align:middle`. */
/* =========================================================================
   Cart line: text stack with the stepper centred beside it
   =========================================================================
   WooCommerce prints four FLAT children inside .wc-block-cart-item__wrap:

       name | prices | metadata | quantity

   There is no wrapper around the text, and the row needs the stepper centred
   against the whole text stack rather than against the title's line.

   This used to be solved by a script that moved the three text nodes into a
   theme-made wrapper. That script is gone: the cart is a React app, those nodes
   belong to its tree, and re-parenting them made React throw
   "Failed to execute 'insertBefore' on 'Node'" on the next render - removing a
   line item replaced the entire cart with an error notice.

   So the same result is built with CSS only:
     * the text blocks stack in WooCommerce's own column direction;
     * the stepper is positioned out of flow and centred vertically against the
       full row, which is exactly what the wrapper was for;
     * `padding-right` reserves the stepper's column so long text cannot run under
       it - one value instead of the old 63% + 2% + 35% split.

   The percentages are kept, and nothing scripts the cart DOM any more. */
table.wc-block-cart-items .wc-block-cart-items__row .wc-block-cart-item__wrap,
.wc-block-cart-item__wrap {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    /* The thumbnail is the height reference, so short rows keep its height while
       the stack is free to grow. */
    min-height: var(--ewut-cart-thumb);
    /* Reserves the stepper's column (35%) plus the gutter that keeps it off the
       TOTAL cell (5%). */
    padding-right: 40%;
}

/* Title and price read as ONE pair: line-height 1 on both, 4px between them, so
   the price belongs to the title rather than floating between two groups.

   The selectors carry the row prefix on purpose. The generic product-name rule
   further up this file is `table.wc-block-cart-items .wc-block-cart-items__row
   .wc-block-components-product-name` (three classes) and it sets line-height 1.4;
   a two-class selector here loses to it no matter how far down the file it sits.
   Measured before the prefix was added: 22.4px instead of 16px. */
table.wc-block-cart-items .wc-block-cart-items__row .wc-block-cart-item__wrap > .wc-block-components-product-name,
.wc-block-cart-item__wrap > .wc-block-components-product-name {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    margin: 0;
    /* 1.25, not 1. At line-height 1 the box is exactly font-size (16px) while the
       glyphs need 20px, so ascenders and descenders stuck out of the box and the
       `overflow: hidden` here sliced the tops and bottoms of the letters off -
       measured 2px cut at each edge on "Wander Leather Backpack". The line box has
       to contain the glyph; only the horizontal ellipsis clips now. */
    line-height: 1.25;
    white-space: nowrap;
    overflow-x: hidden;
    overflow-y: visible;
    text-overflow: ellipsis;
}

.wc-block-cart-item__wrap > .wc-block-cart-item__prices {
    width: 100%;
    max-width: 100%;
    margin: 4px 0 0;
    line-height: 1.25;
}

.wc-block-cart-item__wrap > .wc-block-cart-item__prices .wc-block-components-product-price {
    line-height: 1.25;
}

/* Meta (colour / description) is a separate group: 8px below the title+price
   pair, clamped to one line by the rule further up. */
.wc-block-cart-item__wrap > .wc-block-components-product-metadata {
    width: 100%;
    max-width: 100%;
    margin: 8px 0 0;
    line-height: 1.25;
}

/* The description paragraph is styled by a three-class WC-scoped rule earlier in
   this file (line-height 1.4 + margin-bottom 8px). Both had to go: the 8px pushed
   the text column past the thumbnail's height budget (measured 82.8px against a
   64px cap, so the description was being clipped). */
.wp-block-woocommerce-cart .wc-block-cart-item__wrap .wc-block-components-product-metadata__description > p,
.wp-block-woocommerce-checkout .wc-block-cart-item__wrap .wc-block-components-product-metadata__description > p,
.wc-block-cart-item__wrap .wc-block-components-product-metadata__description,
.wc-block-cart-item__wrap .wc-block-components-product-metadata__description > p {
    line-height: 1.25;
    margin: 0;
}

/* Quantity stepper: out of flow and centred against the whole row, which is what
   the removed wrapper script existed to achieve. `top: 50%` plus a half-height
   pull-back is the standard vertical centring for an absolutely placed box, and it
   is the only way to centre against siblings that are not in the same flex line. */
.wc-block-cart-item__wrap > .wc-block-cart-item__quantity {
    position: absolute;
    right: 5%;
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    column-gap: 12px;
}


/* Selected payment method - a single 1px token frame + rounded corners,
   and a little breathing room above its expanded description. Scoped
   under .woocommerce-checkout so it outranks the "no border" reset. */
.woocommerce-checkout .wc-block-components-radio-control__option-checked {
    border: 1px solid var(--ewut-uny-border) !important;
    border-radius: 8px;
}

.woocommerce-checkout .wc-block-components-radio-control__option-checked ~ .wc-block-components-radio-control-accordion-content {
    padding-top: 8px;
}


/* Checkout order-summary panel - card with an accent top rule, matching
   the cart sidebar summary. Scoped under .woocommerce-checkout to outrank
   WooCommerce's own (later-loaded) block styles. */
.woocommerce-checkout .wp-block-woocommerce-checkout-order-summary-block {
    border: 1px solid var(--ewut-uny-border);
    border-top: 4px solid var(--ewut-uny-accent);
    border-radius: 8px;
    box-sizing: border-box;
    font-size: var(--wp--preset--font-size--small, 14px);
    line-height: 1.4;
    padding: 8px 16px 0;
}

/* Order-summary heading - uppercase, bold, sized to the theme scale.
   WooCommerce styles this at (0,3,0) via the block > title > text chain,
   so match that depth to win the cascade. */
.woocommerce-checkout .wp-block-woocommerce-checkout-order-summary-block .wc-block-components-checkout-order-summary__title .wc-block-components-checkout-order-summary__title-text {
    font-size: 21.28px;
    text-transform: uppercase;
    font-weight: 700;
}


/* Order-summary line item: product name + individual price at normal
   weight (400), not bold. */
.wc-block-components-order-summary-item__description .wc-block-components-product-name,
.wc-block-components-order-summary-item__individual-price {
    font-weight: 400 !important;
}


/* ──────────────────────────────────────────────────────────────
   Product reviews (#reviews)
   ────────────────────────────────────────────────────────────── */

/* Star glyphs. WooCommerce draws stars as the letter "S" repeated, rendered
   with its icon font. The theme's global `* { font-family: … }` reset leaks
   into the nested `.star-rating span` and swaps that icon font for the body
   font - so the raw letters "SSSSS" show instead of stars. Force the
   WooCommerce icon font back on the rating element AND its inner span/::before
   so both the empty track and the filled overlay render as real stars. */
.woocommerce .star-rating,
.woocommerce .star-rating::before,
.woocommerce .star-rating span,
.woocommerce .star-rating span::before,
.woocommerce p.stars a,
.woocommerce p.stars a::before {
    font-family: "WooCommerce" !important;
}

/* Reviews heading ("N reviews for …") - match the "Related products" heading
   size/weight (1.6em / 700) instead of the oversized 44px section title. */
.woocommerce #reviews #comments > h2,
.woocommerce #reviews .woocommerce-Reviews-title {
    font-size: 1.6em;
    font-weight: 700;
    line-height: 1.3;
    color: var(--ewut-uny-dark);
    /* Space the heading 40px from the first review below it. */
    margin: 0 0 40px;
}


/* Product tiles keep the page colour showing through on a custom background:
   the tile is set off by its own hairline, and readable text is handled in PHP
   by ewut_uny_background_text_css(), which repaints the colour tokens. */
