/**
 * Wishlist — the design-system skin for TI WooCommerce Wishlist (Premium).
 *
 * SURFACE: the wishlist page family — /wishlists/ (one list),
 * /manage-wishlists/ (rename / privacy / delete), /public-wishlists/,
 * /search-wishlist/ — plus the three modals the plugin appends to <body>
 * (Create list, Notification settings, Move to list). Those pages are served
 * by templates/plain-page.php, so this sheet styles the plugin's markup
 * INSIDE the .cwpl shell; the shell itself (page title, width) is
 * plain-page.css's job and is left alone.
 *
 * WHY A THEME SHEET AND NOT A PLUGIN EDIT: same reasoning as
 * assets/css/pickup-delivery-popup.css — the wishlist is a customer-facing
 * surface of OUR store that happens to be rendered by a third-party plugin,
 * so the design lives here where a plugin update cannot revert it. Nothing in
 * this file depends on the plugin's own markup being changed.
 *
 * ------------------------------------------------------------------------
 * THE ZONE — STEEL. Flat machined greys, and lime as the only colour on the
 * page.
 * ------------------------------------------------------------------------
 * The wishlist is the come-back-later counterpart to the basket, so it is
 * built to READ as a sibling of assets/css/cart.css — same card, same 12px
 * radius, same row rhythm, same button geometry, same tabular numerals.
 *
 * What differs is that this surface is MONOCHROME. Every structural element —
 * the tabs, the table head, the totals band, the panels, the modals — is
 * drawn from the EXISTING ink ramp in cw-tokens.css (--cw-card, --cw-ground,
 * --cw-line/-2, --cw-ink/-2) — flat fills, no gradients anywhere. No new
 * colour was invented for any of it: --cw-ink-2 is the logo grey, i.e.
 * literally half the brand mark. (A first pass here used gradients for the
 * raised/recessed surfaces — user decision 2026-08-24: flat only, gradients
 * read as decoration this surface doesn't need.)
 *
 * WHY MONOCHROME IS THE POINT, not a limitation (user decision 2026-08-23,
 * replacing a first pass built on a purple complement — which read feminine
 * rather than factory): with nothing else on the surface competing, the one
 * lime "Add to Cart" is the only colour a customer sees, so the buy action
 * cannot be missed. That also resolves what had been the judgement call in
 * this file — "Add to Cart" / "Add All to Cart" stay LIME because buying is
 * the same act here as on the shop grid, the PDP and the basket, and steel
 * owns everything the wishlist itself is (the list, its structure, its
 * management actions: Create, Move, Rename, My Wishlists, Notifications,
 * Search). --wl-buy / --wl-buy-text are still the only two tokens that carry
 * it, so it stays a two-line change.
 *
 * MONOCHROME MEANS HOVER CANNOT BORROW A HUE. Two conventions do that work
 * instead, and both need to be kept if rules are added: controls DARKEN
 * (--wl-steel to --wl-steel-deep, matching the lime zone's own rule — a
 * filled control goes flat steel to flat ink, nothing fades), and content
 * links grow a rule underneath rather than changing colour. Do not reach for
 * a second hue, and do not reach for a gradient, to signal interaction.
 *
 * ------------------------------------------------------------------------
 * SPECIFICITY / LOAD ORDER — read before adding a rule that "does nothing".
 * ------------------------------------------------------------------------
 * The plugin ships THREE colour layers, and the third is the awkward one:
 *   1. assets/css/public.min.css          handle `tinvwl`
 *   2. templates/soft_skin/theme.min.css  handle `tinvwl-theme`
 *   3. a ~10KB <style id="tinvwl-theme-inline-css"> generated from the
 *      plugin's own admin colour settings, attached to handle `tinvwl-theme`
 *      and therefore printed immediately AFTER that stylesheet's <link>.
 * Layer 3 is why this sheet declares `tinvwl-theme` as a dependency in
 * functions.php: that puts our <link> after both, so for ordinary
 * declarations matching specificity is enough. Layers 2 and 3 run deep on
 * selector weight — `.woocommerce.tinv-wishlist button.tinvwl-button` (0,3,1),
 * `.tinv-wishlist .navigation-button > li > a:not(.tinvwl-button)` (0,3,2) —
 * so rules here are written to at least that weight on purpose, even where a
 * shorter selector would look tidier. The `:not(.tinvwl-button)` tails
 * scattered around are exactly that: weight, not logic.
 *
 * AND THEY ALSO USE `!important` — about 70 declarations of it, mostly on
 * button padding / font-size / border-radius / background-color / colour, on
 * `table th` and `table td` font-size, on the remove button's box, and on the
 * item table's 36px bottom margin. There is no specificity that beats an
 * `!important`, so on those exact properties this file answers in kind. Every
 * `!important` below is there because the plugin used one first, and is
 * commented with what it is answering; none of them is a shortcut around a
 * cascade problem of our own making. If a rule here "does nothing", check
 * whether the property is on that list before adding weight.
 *
 * ------------------------------------------------------------------------
 * `.tinv-wishlist` IS NOT A PAGE MARKER — READ THIS BEFORE ADDING A RULE.
 * ------------------------------------------------------------------------
 * The plugin puts that same class on EVERY "add to wishlist" heart wrapper,
 * site-wide: `<div class="tinv-wraper woocommerce tinv-wishlist …">` wraps the
 * heart on every shop-grid card, every PDP, the home carousel and related
 * products. So a bare `.tinv-wishlist a { … }` here does not stay on the
 * wishlist page — it lands on every product surface on the site (found and
 * fixed during this build: the loop heart was inheriting the zone link colour).
 *
 * The dividing line drawn here, and it is a deliberate one:
 *   - `.tinv-wraper` = a HOST surface's heart. Off limits. The heart is
 *     already skinned three times, per surface, by cw-pdp.css,
 *     shop-simple-grid.css and home.css, each into that surface's own idiom,
 *     and this zone's greys must not restate them. The
 *     scope-setting rules in section 2 therefore carry
 *     `:not(.tinv-wraper)`, which is what keeps this file's type and link
 *     colour off those surfaces. The token block deliberately does NOT —
 *     custom properties paint nothing, and the dialog below needs them.
 *   - The wishlist's OWN controls get the steel treatment wherever they
 *     appear, including
 *     the `.tinvwl_button_add` / `.tinvwl_button_close` pair in the
 *     "added to wishlist" dialog that lives inside every `.tinv-wraper`.
 *     That dialog is the wishlist talking, not the product page.
 *
 * The header's Wishlist nav item (inc/chrome.php) is chrome, so it stays
 * lime; it is our own markup and this file never touches it.
 *
 * @package cw-bricks-child
 */

/* -------------------------------------------------------------------------
 * 1. ZONE TOKENS
 *
 * Aliased from cw-tokens.css with literal fallbacks — the established
 * convention (see cart.css). The literal is load-bearing: if cw-tokens.css
 * ever fails to register on some render path, the zone keeps its colour
 * instead of collapsing to unset.
 *
 * Declared on BOTH scopes because the modals are appended to <body> as
 * siblings of .tinv-wishlist, not children of it — a modal opened from a
 * product page has no .tinv-wishlist ancestor at all.
 * ---------------------------------------------------------------------- */

.tinv-wishlist,
.tinv-modal {
	/*
	 * THE ZONE IS STEEL, and it is built entirely from tokens the system
	 * already had — the logo grey is literally half the brand mark, so this
	 * needed no new colour at all. --wl-steel carries fills and secondary
	 * type; --wl-steel-deep is both the hover state and the primary type
	 * colour, which is what lets a monochrome surface still signal
	 * interaction: everything DARKENS, exactly as the lime zone does.
	 */
	--wl-steel: var(--cw-ink-2, #52575a);
	--wl-steel-deep: var(--cw-ink, #263238);
	--wl-tint: var(--cw-ground, #f7f7f5);
	--wl-row: var(--cw-ground, #f7f7f5);
	--wl-edge: var(--cw-line-2, #d6d3ca);


	--wl-ink: var(--cw-ink, #263238);
	--wl-ink-2: var(--cw-ink-2, #52575a);
	--wl-grey: var(--cw-grey, #6b6b6b);
	--wl-faint: var(--cw-faint, #9a9a94);
	--wl-line: var(--cw-line, #e7e5df);
	--wl-line-2: var(--cw-line-2, #d6d3ca);
	--wl-card: var(--cw-card, #fff);
	--wl-brick: var(--cw-brick, #a3372c);
	--wl-brick-tint: var(--cw-brick-tint, #fbeeec);
	--wl-brick-line: var(--cw-brick-line, #eed3ce);

	/*
	 * THE BUY PAIR — see the header note. Swap these two to --wl-steel /
	 * #fff to make the whole surface single-hued.
	 */
	--wl-buy: var(--cw-lime, #80bc00);
	--wl-buy-deep: var(--cw-lime-deep, #5f8c00);
	--wl-buy-text: var(--cw-olive, #16210a);

	/* Focus ring + modal scrim, both off --cw-ink. A grey zone still needs a
	 * clearly visible focus ring, so this one is dark rather than tinted. */
	--wl-ring: rgba(38, 50, 56, 0.5);
	--wl-scrim: rgba(38, 50, 56, 0.6);

	--wl-radius: 12px;
}

/* -------------------------------------------------------------------------
 * 2. BASE
 * ---------------------------------------------------------------------- */

/*
 * `:not(.tinv-wraper)` on every scope-setting rule below — see the note in the
 * file header. Without it this type block reaches the add-to-wishlist heart on
 * every product surface on the site.
 */
.tinv-wishlist:not(.tinv-wraper),
.tinv-modal {
	box-sizing: border-box;
	font-family: system-ui, -apple-system, "Segoe UI", roboto, sans-serif;
	font-size: 14.5px;
	line-height: 1.5;
	color: var(--wl-ink-2);
	-webkit-font-smoothing: antialiased;
}

.tinv-wishlist:not(.tinv-wraper) *,
.tinv-wishlist:not(.tinv-wraper) *::before,
.tinv-wishlist:not(.tinv-wraper) *::after,
.tinv-modal *,
.tinv-modal *::before,
.tinv-modal *::after {
	box-sizing: border-box;
}

.tinv-wishlist button,
.tinv-modal button {
	font-family: inherit;
	cursor: pointer;
}

.tinv-wishlist:not(.tinv-wraper) :focus-visible,
.tinv-modal :focus-visible {
	outline: 3px solid var(--wl-ring);
	outline-offset: 2px;
	border-radius: 4px;
}

/* Checkboxes and radios pick up the zone for free. */
.tinv-wishlist input[type="checkbox"],
.tinv-wishlist input[type="radio"],
.tinv-modal input[type="checkbox"],
.tinv-modal input[type="radio"] {
	accent-color: var(--wl-steel);
	width: 16px;
	height: 16px;
	margin: 0;
	vertical-align: middle;
}

/*
 * Money is set in tabular figures everywhere, exactly as the basket does it,
 * so a column of prices lines up on the decimal.
 */
.tinv-wishlist .woocommerce-Price-amount,
.tinv-wishlist .entry-date {
	font-variant-numeric: tabular-nums;
}

/* Prices come wrapped in <ins>, which the UA underlines. */
.tinv-wishlist ins {
	text-decoration: none;
	background: none;
}

/*
 * Links: steel. The plugin gives every non-button anchor a `border-bottom:
 * 1px solid` as its underline mechanism, which reads as a boxed-in link on a
 * product name; underlines here are set with text-decoration where they are
 * wanted (the login prompt) and off everywhere else.
 */
.tinv-wishlist:not(.tinv-wraper) a:not(.tinvwl-button):not(.button) {
	color: var(--wl-steel);
	border-bottom: 0;
	text-decoration: none;
}

.tinv-wishlist:not(.tinv-wraper) a:not(.tinvwl-button):not(.button):hover,
.tinv-wishlist:not(.tinv-wraper) a:not(.tinvwl-button):not(.button):focus {
	color: var(--wl-steel-deep);
}

/* -------------------------------------------------------------------------
 * 3. HEADER — the list name, and the navigation pill row.
 *
 * This <h2> is set at PAGE-HEADING scale, not as a sub-heading, and that is a
 * workaround rather than a preference: plain-page.php does print the page's
 * own <h1> ("Wishlist"), but the child theme's `body.page h1 { display: none }`
 * — the Bricks automatic-title suppressor in style.css — hides it on every
 * page the shared plain-page template serves, all 49 of them. Until that is
 * fixed in the shell (it needs one content fix first: Privacy Policy is the
 * only plain page carrying its own <h1> in post_content, so un-hiding the
 * template's would double it up), the list name is the only heading this
 * surface has, so it is sized to be one. When the shell is fixed, drop this
 * back to 20px and it becomes the sub-heading it should be.
 *
 * Either way it needs restating: layer 3 sets it to 40px/black, i.e. LARGER
 * than the page h1 it is meant to sit under.
 * ---------------------------------------------------------------------- */

.tinv-wishlist .tinv-header {
	margin: 0 0 18px;
}

.tinv-wishlist .tinv-header h2 {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0 0 16px;
	font-size: 26px;
	line-height: 1.2;
	font-weight: 800;
	letter-spacing: -0.01em;
	color: var(--wl-steel-deep);
}

/* A steel heart marks the list name as the zone's own object. */
.tinv-wishlist .tinv-header h2::before {
	content: "";
	flex: 0 0 auto;
	width: 23px;
	height: 23px;
	background: currentcolor;
	/* heart outline */
	-webkit-mask: var(--wl-heart) center / contain no-repeat;
	mask: var(--wl-heart) center / contain no-repeat;
}

.tinv-wishlist {
	--wl-heart: url("data:image/svg+xml;charset=utf-8,%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%3Cpath d='M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8l8.8 8.8 8.8-8.8a5.5 5.5 0 0 0 0-7.8z'/%3E%3C/svg%3E");
}

/* The pill row. Rendered twice — above and below the table — by design: on a
 * long list the bottom copy saves a scroll. Both get the same treatment. */
.tinv-wishlist ul.navigation-button {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.tinv-wishlist ul.navigation-button::before,
.tinv-wishlist ul.navigation-button::after {
	content: none;
}

.tinv-wishlist ul.navigation-button > li {
	margin: 0;
	padding: 0;
	list-style: none;
}

.tinv-wishlist ul.navigation-button > li::before {
	content: none;
}

/*
 * The nav tab — shared by every nav item.
 *
 * The `:not(.tinvwl-button)` tail is weight, not logic: the plugin sets this
 * anchor's padding-bottom and border-bottom from a (0,3,2) selector of
 * exactly that shape, which a plain descendant chain cannot reach.
 */
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > a:not(.tinvwl-button),
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button) {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 8px 14px;
	/*
	 * 1px, not the 1.5px the buttons use: the plugin sets `border-bottom: 1px
	 * solid` on this exact anchor as its underline mechanism, and matching it
	 * is a better trade than an !important nobody asked for.
	 */
	border: 1px solid var(--wl-line-2);
	border-radius: 8px;
	background: var(--wl-card);
	color: var(--wl-ink-2);
	font-size: 13px;
	font-weight: 700;
	line-height: 1.2;
	text-decoration: none;
	transition: border-color 0.15s ease, color 0.15s ease, background-color 0.15s ease;
}

.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > a:not(.tinvwl-button):hover,
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > a:not(.tinvwl-button):focus,
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button):hover,
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button):focus {
	border-color: var(--wl-steel);
	background: var(--wl-tint);
	color: var(--wl-steel-deep);
}

/*
 * Create is the one FILLED tab: it is the primary list-management action,
 * and the plugin already renders it differently from its siblings (wrapped
 * in .tinv-create-list rather than a bare <a>), so promoting it costs no
 * markup change.
 *
 * Flat steel at rest, flat ink on hover — darkening is the substitute for
 * the hue change a coloured zone would have used.
 */
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button) {
	border-color: transparent;
	background: var(--wl-steel-deep);
	color: #fff;
}

.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button):hover,
.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button):focus {
	border-color: transparent;
	background: var(--wl-steel-deep);
	color: #fff;
}

/* The plugin's own icon margins fight the flex gap. */
.tinv-wishlist ul.navigation-button a i,
.tinv-wishlist .navigation-button a i {
	margin: 0;
	font-size: 12px;
	line-height: 1;
}

/* The bottom copy sits below the card, visually secondary. */
.tinv-wishlist > form + .tinv-wishlist-clear + ul.navigation-button,
.tinv-wishlist > ul.navigation-button:last-child {
	margin-top: 18px;
}

/* -------------------------------------------------------------------------
 * 4. THE LIST CARD
 *
 * The card lives on the <form>, not the <table>: border-radius + overflow on
 * a table element does not clip its children reliably across browsers, and on
 * the wishlist and manage-lists pages the form's only real child IS the
 * table. Scoped to a DIRECT child so the search page's nested <form> never
 * picks this up.
 *
 * /public-wishlists/ IS THE EXCEPTION: its template renders the table as a
 * direct child of .tinv-wishlist with no form around it at all, so that page
 * needs the card on the table — and there the corners are rounded cell by
 * cell rather than trusted to `overflow`, which is what makes it safe.
 * ---------------------------------------------------------------------- */

.tinv-wishlist > form {
	margin: 0;
	background: var(--wl-card);
	border: 1px solid var(--wl-line);
	border-radius: var(--wl-radius);
	overflow: hidden;
}

/* `margin-bottom: 36px !important` on the item table would push a gap inside
 * the card the table now lives in. */
.tinv-wishlist table.tinvwl-table-manage-list,
.tinv-wishlist table.tinvwl-table-manage-lists {
	width: 100%;
	margin: 0 !important;
	border: 0;
	border-collapse: collapse;
	background: none;
}

/* --- head --- */
/*
 * The head is a raised plate with a strong rule under it — that shadow line
 * is what separates it from the rows now that no colour does.
 * Answering `.tinv-wishlist table th { font-size: 14px !important }`.
 */
.tinv-wishlist table.tinvwl-table-manage-list th,
.tinv-wishlist table.tinvwl-table-manage-lists th {
	padding: 11px 14px;
	background: var(--wl-row);
	border: 0;
	border-bottom: 1px solid var(--wl-edge);
	color: var(--wl-steel);
	font-size: 11px !important;
	font-weight: 800;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	text-align: left;
	white-space: nowrap;
}

.tinv-wishlist table.tinvwl-table-manage-list th.product-price,
.tinv-wishlist table.tinvwl-table-manage-list th.product-subtotal,
.tinv-wishlist table.tinvwl-table-manage-list th.product-action {
	text-align: right;
}

/* --- rows --- */
/*
 * Answering `.tinv-wishlist table td { font-size: 14px !important }`.
 * Deliberately TBODY-scoped: an `!important` on every cell in the table would
 * also outrank this file's own footer and per-column type, which is a cascade
 * problem of our own making rather than one the plugin handed us.
 */
.tinv-wishlist table.tinvwl-table-manage-list tbody td,
.tinv-wishlist table.tinvwl-table-manage-lists tbody td {
	padding: 14px;
	border: 0;
	border-bottom: 1px solid var(--wl-line);
	vertical-align: middle;
	background: none;
	font-size: 14.5px !important;
}

.tinv-wishlist table.tinvwl-table-manage-list tbody tr:last-child td,
.tinv-wishlist table.tinvwl-table-manage-lists tbody tr:last-child td {
	border-bottom-color: var(--wl-line-2);
}

.tinv-wishlist table.tinvwl-table-manage-list tbody tr:hover td,
.tinv-wishlist table.tinvwl-table-manage-lists tbody tr:hover td {
	background: var(--wl-row);
}

/*
 * /public-wishlists/ — the formless table, see the section note above. This
 * sits AFTER the generic table rules on purpose: those reset border,
 * background and border-collapse at the same specificity, so ordering is what
 * makes this stick.
 */
.tinv-wishlist > table.tinvwl-table-manage-lists {
	background: var(--wl-card);
	border: 1px solid var(--wl-line);
	border-radius: var(--wl-radius);
	border-collapse: separate;
	border-spacing: 0;
	overflow: hidden;
}

.tinv-wishlist > table.tinvwl-table-manage-lists thead th:first-child {
	border-top-left-radius: var(--wl-radius);
}

.tinv-wishlist > table.tinvwl-table-manage-lists thead th:last-child {
	border-top-right-radius: var(--wl-radius);
}

.tinv-wishlist > table.tinvwl-table-manage-lists tbody tr:last-child td:first-child {
	border-bottom-left-radius: var(--wl-radius);
}

.tinv-wishlist > table.tinvwl-table-manage-lists tbody tr:last-child td:last-child {
	border-bottom-right-radius: var(--wl-radius);
}

/* No footer on that page, so the last body row is the card's bottom edge. */
.tinv-wishlist > table.tinvwl-table-manage-lists tbody tr:last-child td {
	border-bottom: 0;
}

/* --- the remove × --- */
.tinv-wishlist .tinvwl-table-manage-list td.product-remove,
.tinv-wishlist .tinvwl-table-manage-list td.product-cb,
.tinv-wishlist .tinvwl-table-manage-lists td.wishlist-cb {
	width: 44px;
	padding-right: 0;
	text-align: center;
}

/*
 * The plugin ships this as a 44px box with `padding: 12px !important` and
 * `font-size: 20px !important`, plus `background-color: transparent
 * !important; color: initial !important` — hence the four answers here.
 */
.tinv-wishlist .tinvwl-table-manage-list .product-remove button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	padding: 0 !important;
	border: 0;
	border-radius: 50% !important;
	background-color: transparent !important;
	color: var(--wl-faint) !important;
	font-size: 12px !important;
	line-height: 1;
	transition: background-color 0.15s ease, color 0.15s ease;
}

.tinv-wishlist .tinvwl-table-manage-list .product-remove button:hover,
.tinv-wishlist .tinvwl-table-manage-list .product-remove button:focus {
	background-color: var(--wl-brick-tint) !important;
	color: var(--wl-brick) !important;
}

.tinv-wishlist .tinvwl-table-manage-list .product-remove button i {
	margin: 0;
}

/* --- thumbnail --- */
.tinv-wishlist .tinvwl-table-manage-list td.product-thumbnail {
	width: 92px;
	padding-right: 4px;
}

.tinv-wishlist .tinvwl-table-manage-list td.product-thumbnail > a {
	display: block;
	width: 76px;
	height: 76px;
	padding: 6px;
	background: #fff;
	border: 1px solid var(--wl-line);
	border-radius: 10px;
	transition: border-color 0.15s ease;
}

.tinv-wishlist .tinvwl-table-manage-list tbody tr:hover td.product-thumbnail > a {
	border-color: var(--wl-edge);
}

.tinv-wishlist .tinvwl-table-manage-list td.product-thumbnail img {
	display: block;
	width: 100%;
	height: 100%;
	margin: 0;
	object-fit: contain;
}

/* --- name --- */
.tinv-wishlist td.product-name {
	padding-left: 4px;
	font-size: 14.5px;
	line-height: 1.35;
}

/*
 * `:not(.tinvwl-button)` for weight again — the plugin colours this anchor
 * black from a (0,3,1) selector, and it has to lose to the generic steel link
 * rule above (also (0,3,1)) without that rule then beating THIS one.
 */
.tinv-wishlist:not(.tinv-wraper) td.product-name a:not(.tinvwl-button) {
	color: var(--wl-ink);
	font-weight: 700;
	border-bottom: 0;
	text-decoration: none;
}

/*
 * Content links are already at the darkest step, so hover cannot darken them.
 * The rule growing underneath is the feedback — see the MONOCHROME note in
 * the file header. Set on border-bottom, not text-decoration, because the
 * plugin forces `text-decoration: none !important` on every anchor.
 */
.tinv-wishlist:not(.tinv-wraper) td.product-name a:not(.tinvwl-button):hover,
.tinv-wishlist:not(.tinv-wraper) td.product-name a:not(.tinvwl-button):focus {
	color: var(--wl-steel-deep);
	border-bottom: 1px solid var(--wl-edge);
}

/* Variation / item meta the plugin prints under the name. */
.tinv-wishlist td.product-name dl.variation,
.tinv-wishlist td.product-name .wishlist-item-meta {
	margin: 4px 0 0;
	color: var(--wl-grey);
	font-size: 12.5px;
}

/* --- price / subtotal --- */
.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-price,
.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-subtotal {
	color: var(--wl-ink);
	font-size: 15px !important;
	font-weight: 800;
	text-align: right;
	white-space: nowrap;
}

/*
 * The amount inside <ins> carries its own `color: #202020 !important` and
 * `font-weight: normal`, so the cell's own type never reaches it.
 */
.tinv-wishlist td.product-price ins span.amount,
.tinv-wishlist td.product-subtotal ins span.amount,
.tinv-wishlist td.product-price .woocommerce-Price-amount,
.tinv-wishlist td.product-subtotal .woocommerce-Price-amount {
	color: var(--wl-ink) !important;
	font-size: 15px;
	font-weight: 800;
	background-color: transparent !important;
}

.tinv-wishlist td.product-price del,
.tinv-wishlist td.product-subtotal del {
	display: block;
	color: var(--wl-faint);
	font-size: 12.5px;
	font-weight: 600;
}

/* --- date (optional column) --- */
/* Written at (0,3,3) to outrank this file's OWN tbody-cell type rule. */
.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-date,
.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-date,
.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-author {
	color: var(--wl-grey);
	font-size: 12.5px !important;
	white-space: nowrap;
}

/* --- quantity (optional column) --- */
.tinv-wishlist.woocommerce table.tinvwl-table-manage-list .quantity {
	display: inline-flex;
}

.tinv-wishlist .product-quantity input[type="text"].qty,
.tinv-wishlist.woocommerce table .quantity .qty {
	width: 58px;
	padding: 7px 8px;
	border: 1.5px solid var(--wl-line-2);
	border-color: var(--wl-line-2) !important;
	border-radius: 8px !important;
	background-color: #fff !important;
	color: var(--wl-ink);
	font: inherit;
	font-size: 14px;
	font-weight: 700;
	text-align: center;
	box-shadow: none;
}

.tinv-wishlist .product-quantity input[type="text"].qty:hover {
	border-color: var(--wl-edge);
	box-shadow: none;
}

.tinv-wishlist .product-quantity input[type="text"].qty:focus {
	border-color: var(--wl-steel);
	box-shadow: 0 0 0 3px var(--wl-ring);
	outline: none;
}

/* --- stock (optional column) --- */
.tinv-wishlist .tinvwl-table-manage-list td.product-stock {
	font-size: 12.5px !important;
	font-weight: 700;
	white-space: nowrap;
}

.tinv-wishlist .tinvwl-table-manage-list td.product-stock .stock.in-stock {
	color: var(--cw-success, #4c7000);
}

.tinv-wishlist .tinvwl-table-manage-list td.product-stock .stock.out-of-stock {
	color: var(--wl-brick);
}

.tinv-wishlist .product-stock i {
	margin-right: 5px;
}

/* -------------------------------------------------------------------------
 * 5. ROW ACTIONS + THE SHARED BUTTON
 * ---------------------------------------------------------------------- */

.tinv-wishlist table.tinvwl-table-manage-list td.product-action,
.tinv-wishlist table.tinvwl-table-manage-lists td.wishlist-action {
	width: 1%;
	text-align: right;
	white-space: nowrap;
}

.tinv-wishlist table.tinvwl-table-manage-list td.product-action > * {
	vertical-align: middle;
}

/*
 * ONE button geometry for the whole zone — matching .cwct-btn in cart.css so
 * the two surfaces feel machined to the same spec.
 *
 * THE GEOMETRY IS SPLIT IN TWO, and the split is not cosmetic. Everything the
 * plugin does NOT force goes in the plain rule below; the five properties it
 * DOES force — padding, min-width, font-size, border-radius, font-weight —
 * are re-stated in the `!important` block after it, at (0,3,1) to match
 * `.woocommerce.tinv-wishlist button.tinvwl-button`. Keeping them apart means
 * the `!important` list stays a short, auditable inventory of what the plugin
 * forced rather than creeping across the whole file.
 */
.tinv-wishlist .tinvwl-button,
.tinv-wishlist button.tinvwl-button,
.tinv-wishlist .button.tinvwl-button,
.tinv-modal .tinvwl-button,
.tinv-modal button.tinvwl-button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	min-height: 0;
	margin: 0;
	border: 1.5px solid transparent;
	background: var(--wl-card);
	color: var(--wl-ink-2);
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
	text-transform: none;
	letter-spacing: normal;
	box-shadow: none;
	transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

/* The forced five. See the note above. */
.tinv-wishlist .tinvwl-button,
.tinv-wishlist.woocommerce a.tinvwl-button,
.tinv-wishlist.woocommerce button.tinvwl-button,
.tinv-wishlist.woocommerce input.tinvwl-button,
.tinv-modal.tinv-modal .tinvwl-button,
.tinv-modal.tinv-modal button,
.tinv-modal.tinv-modal .tinvwl-buttons-group button,
.tinv-modal.tinv-modal .tinvwl-input-group-btn button {
	padding: 9px 15px !important;
	min-width: 0 !important;
	border-width: 1.5px !important;
	border-style: solid !important;
	border-radius: 10px !important;
	font-size: 13px !important;
	font-weight: 800 !important;
}

.tinv-wishlist .tinvwl-button i,
.tinv-modal .tinvwl-button i {
	margin: 0;
	font-size: 12px;
	line-height: 1;
}

/*
 * Ghost is the default for a secondary action (Move, Delete, Apply).
 * `background-color` and `color` are forced by the plugin on
 * `.tinv-wishlist .tinvwl-button` (0,2,0), so they are answered here.
 */
.tinv-wishlist button.tinvwl-button:not(.alt),
.tinv-wishlist .button.tinvwl-button:not(.alt),
.tinv-wishlist input.tinvwl-button:not(.alt) {
	border-color: var(--wl-line-2) !important;
	background-color: var(--wl-card) !important;
	color: var(--wl-ink-2) !important;
}

.tinv-wishlist button.tinvwl-button:not(.alt):hover,
.tinv-wishlist button.tinvwl-button:not(.alt):focus,
.tinv-wishlist .button.tinvwl-button:not(.alt):hover,
.tinv-wishlist .button.tinvwl-button:not(.alt):focus {
	border-color: var(--wl-steel) !important;
	background-color: var(--wl-tint) !important;
	color: var(--wl-steel-deep) !important;
}

/*
 * "Add to Cart" and "Add All to Cart" — the plugin marks both `.alt`. This is
 * the LIME exception documented at the top of the file. (0,3,1) + !important
 * to match `.woocommerce.tinv-wishlist button.tinvwl-button.alt`, which
 * forces its own accent colour.
 */
.tinv-wishlist.woocommerce a.tinvwl-button.alt,
.tinv-wishlist.woocommerce button.tinvwl-button.alt,
.tinv-wishlist.woocommerce input.tinvwl-button.alt {
	border-color: transparent;
	background-color: var(--wl-buy) !important;
	color: var(--wl-buy-text) !important;
	border-radius: 10px !important;
	font-size: 13px !important;
	padding: 9px 15px !important;
}

.tinv-wishlist.woocommerce a.tinvwl-button.alt:hover,
.tinv-wishlist.woocommerce button.tinvwl-button.alt:hover,
.tinv-wishlist.woocommerce input.tinvwl-button.alt:hover,
.tinv-wishlist.woocommerce a.tinvwl-button.alt:focus,
.tinv-wishlist.woocommerce button.tinvwl-button.alt:focus,
.tinv-wishlist.woocommerce input.tinvwl-button.alt:focus {
	border-color: transparent;
	background-color: var(--wl-buy-deep) !important;
	color: #fff !important;
}

/*
 * Move — a steel ghost, sitting beside the lime buy button. Written at (0,4,1)
 * so it outranks this file's OWN generic `:not(.alt)` ghost rule above rather
 * than relying on source order.
 */
.tinv-wishlist button.tinvwl-button.tinvwl_move_product_button:not(.alt) {
	margin-left: 6px;
	border-color: var(--wl-edge) !important;
	background-color: var(--wl-card) !important;
	color: var(--wl-steel) !important;
}

.tinv-wishlist button.tinvwl-button.tinvwl_move_product_button:not(.alt):hover,
.tinv-wishlist button.tinvwl-button.tinvwl_move_product_button:not(.alt):focus {
	border-color: var(--wl-steel) !important;
	background-color: var(--wl-tint) !important;
	color: var(--wl-steel-deep) !important;
}

/*
 * The action column. The plugin's own intent here is a STACK — `width: 100%`
 * on `.product-action .button` plus `margin: auto`, so Add to Cart sits above
 * Move — which makes the row 105px tall for two controls. Side by side is
 * both tighter and the rhythm the basket's rows already use, so the width is
 * released and the cell keeps them on one line. It also tightens the padding
 * the plugin forces to 11.5px/12px at (0,3,0).
 */
.tinv-wishlist table.tinvwl-table-manage-list .product-action .tinvwl-button,
.tinv-wishlist table.tinvwl-table-manage-lists .wishlist-action .tinvwl-button {
	width: auto;
	padding: 9px 14px !important;
	margin: 0 !important;
}

/* Destructive actions read brick — the one place a second hue is allowed. */
.tinv-wishlist .wishlist-action button[value="manage_remove"],
.tinv-wishlist button[value="manage_remove"] {
	border-color: var(--wl-line-2) !important;
	background-color: var(--wl-card) !important;
	color: var(--wl-ink-2) !important;
}

.tinv-wishlist .wishlist-action button[value="manage_remove"]:hover,
.tinv-wishlist .wishlist-action button[value="manage_remove"]:focus,
.tinv-wishlist button[value="manage_remove"]:hover,
.tinv-wishlist button[value="manage_remove"]:focus {
	border-color: var(--wl-brick) !important;
	background-color: var(--wl-brick-tint) !important;
	color: var(--wl-brick) !important;
}

/* -------------------------------------------------------------------------
 * 6. THE FOOTER — running total, then the bulk-action row.
 *
 * The plugin lays the bulk row out with floats (.tinvwl-to-left /
 * .tinvwl-to-right inside one colspan cell) and that already works; it is
 * left alone deliberately. Only the surfaces are restyled.
 * ---------------------------------------------------------------------- */

.tinv-wishlist table.tinvwl-table-manage-list tfoot td,
.tinv-wishlist table.tinvwl-table-manage-lists tfoot td {
	padding: 14px;
	border: 0;
	border-top: 1px solid var(--wl-line);
	background: var(--wl-row);
}

.tinv-wishlist table.tinvwl-table-manage-list tfoot tr:first-child td {
	border-top: 0;
}

.tinv-wishlist table.tinvwl-table-manage-list tfoot td.wishlist-total {
	background: var(--wl-tint);
	color: var(--wl-grey);
	font-size: 13px !important;
	font-weight: 700;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	text-align: right;
}

.tinv-wishlist td.wishlist-total .woocommerce-Price-amount {
	margin-left: 10px;
	color: var(--wl-steel-deep) !important;
	font-size: 19px;
	font-weight: 800;
	letter-spacing: normal;
	text-transform: none;
}

/* Selects in the footer (per-page count, bulk actions) and on the manage
 * table (privacy) share one field style. */
/*
 * Selects need their caret DRAWN, and this is a bug fix, not decoration: both
 * the plugin and Bricks set `appearance: none`, and the plugin's replacement
 * caret is a `background-image` — so a `background: #fff` shorthand here (as
 * the first version of this file had) wipes it and leaves a select that looks
 * exactly like a plain text box. Hence `background-color` plus explicit
 * longhands throughout, never the shorthand, and a chevron drawn from two
 * tiny CSS triangles in the zone's own steel — an icon, not a surface
 * gradient, so it is not covered by the flat-only rule above.
 */
.tinv-wishlist select,
.tinv-wishlist .tinvwl-input-group select {
	max-width: 100%;
	padding: 8px 32px 8px 12px;
	border: 1.5px solid var(--wl-line-2);
	color: var(--wl-ink);
	font: inherit;
	font-size: 13.5px;
	font-weight: 600;
	box-shadow: none;
	/* border-radius is one of the properties the plugin forces. */
	border-radius: 8px !important;
	background-color: #fff;
	background-image:
		linear-gradient(45deg, transparent 50%, var(--wl-steel) 50%),
		linear-gradient(135deg, var(--wl-steel) 50%, transparent 50%);
	background-position: calc(100% - 16px) calc(50% + 1px), calc(100% - 11px) calc(50% + 1px);
	background-size: 5px 5px, 5px 5px;
	background-repeat: no-repeat;
}

.tinv-wishlist select:focus {
	border-color: var(--wl-steel);
	box-shadow: 0 0 0 3px var(--wl-ring);
	outline: none;
}

/* An input-group's trailing button butts against the field. */
.tinv-wishlist .tinvwl-input-group {
	display: inline-flex;
	align-items: stretch;
	gap: 8px;
	max-width: 100%;
}

/* -------------------------------------------------------------------------
 * 7. EMPTY STATE
 *
 * The plugin emits `<p class="cart-empty woocommerce-info">` + a separate
 * `<p class="return-to-shop">`. WooCommerce's own notice styling (blue bar,
 * ::before glyph) has to be neutralised before this reads as a panel. The
 * card is put on the <p> itself rather than on a wrapper, because on a
 * populated-but-empty list the plugin nests .tinv-wishlist inside
 * .tinv-wishlist and there is no single reliable container.
 * ---------------------------------------------------------------------- */

.tinv-wishlist p.cart-empty,
.tinv-wishlist p.cart-empty.woocommerce-info {
	display: block;
	max-width: 560px;
	margin: 8px auto 0;
	padding: 46px 24px 18px;
	border: 1px solid var(--wl-edge);
	border-radius: var(--wl-radius);
	background: var(--wl-tint) var(--wl-heart-lg) center 22px / 34px 34px no-repeat;
	color: var(--wl-steel-deep);
	font-size: 17px;
	font-weight: 800;
	text-align: center;
}

.tinv-wishlist p.cart-empty::before,
.tinv-wishlist p.cart-empty.woocommerce-info::before,
.tinv-wishlist p.cart-empty::after {
	content: none;
	display: none;
}

.tinv-wishlist p.return-to-shop {
	max-width: 560px;
	margin: 0 auto;
	padding: 0 24px 30px;
	border: 1px solid var(--wl-edge);
	border-top: 0;
	border-radius: 0 0 var(--wl-radius) var(--wl-radius);
	background: var(--wl-tint);
	text-align: center;
}

/*
 * The empty panel's own heart, drawn in steel rather than currentcolor so it
 * survives being a background-image. Kept on .tinv-wishlist so it resolves
 * for both halves of the split panel above.
 */
.tinv-wishlist {
	--wl-heart-lg: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2352575a' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8l8.8 8.8 8.8-8.8a5.5 5.5 0 0 0 0-7.8z'/%3E%3C/svg%3E");
}

/* The empty state's own CTA is a real buy-path button, so it is lime. */
.tinv-wishlist .return-to-shop a.tinvwl-button,
.tinv-wishlist a.button.tinvwl-button.wc-backward {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 11px 22px !important;
	border: 1.5px solid transparent;
	border-radius: 10px !important;
	/* !important because this file's own ghost rule forces those two too. */
	background-color: var(--wl-buy) !important;
	color: var(--wl-buy-text) !important;
	font-size: 14px !important;
	font-weight: 800;
	text-decoration: none;
}

.tinv-wishlist .return-to-shop a.tinvwl-button:hover,
.tinv-wishlist a.button.tinvwl-button.wc-backward:hover {
	background-color: var(--wl-buy-deep) !important;
	color: #fff !important;
}

/* -------------------------------------------------------------------------
 * 8. NOTICES + THE LOGGED-OUT PROMPT
 * ---------------------------------------------------------------------- */

.tinv-wishlist .woocommerce-message,
.tinv-wishlist .woocommerce-error,
.tinv-wishlist .woocommerce-info:not(.cart-empty) {
	margin: 0 0 14px;
	padding: 11px 14px;
	border-radius: 10px;
	background: var(--wl-tint);
	border: 1px solid var(--wl-edge);
	color: var(--wl-steel-deep);
	font-size: 13.5px;
	list-style: none;
}

.tinv-wishlist .woocommerce-error {
	background: var(--wl-brick-tint);
	border-color: var(--wl-brick-line);
	color: var(--wl-brick);
}

.tinv-wishlist .woocommerce-message::before,
.tinv-wishlist .woocommerce-error::before,
.tinv-wishlist .woocommerce-info:not(.cart-empty)::before {
	content: none;
	display: none;
}

.tinv-wishlist .tinvwl-login-wrap {
	margin: 0 0 16px;
}

.tinv-wishlist .tinv-login.tinv-wrapped-block {
	margin: 0;
	padding: 14px 16px;
	border: 1px solid var(--wl-edge);
	border-radius: 10px;
	background: var(--wl-tint);
}

.tinv-wishlist .tinv-login .tinv-txt {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
	color: var(--wl-steel-deep);
	font-size: 13.5px;
}

.tinv-wishlist .tinv-login .tinv-txt i {
	margin: 0;
	color: var(--wl-steel);
	font-size: 14px;
}

/*
 * The one underlined link on the surface. Drawn with border-bottom rather
 * than text-decoration on purpose: the plugin sets `text-decoration: none
 * !important` on every non-button anchor, and border-bottom — its own
 * underline mechanism — is not forced, so this needs no !important.
 */
.tinv-wishlist:not(.tinv-wraper) .tinv-login .tinv-txt a {
	color: var(--wl-steel-deep);
	font-weight: 800;
	border-bottom: 1px solid var(--wl-edge);
}

.tinv-wishlist:not(.tinv-wraper) .tinv-login .tinv-txt a:hover {
	color: var(--wl-steel-deep);
	border-bottom-color: currentcolor;
}

/* -------------------------------------------------------------------------
 * 9. MANAGE WISHLISTS — rename, privacy, delete.
 * ---------------------------------------------------------------------- */

.tinv-wishlist td.wishlist-name {
	font-size: 14.5px;
}

.tinv-wishlist:not(.tinv-wraper) td.wishlist-name a:not(.tinvwl-button),
.tinv-wishlist:not(.tinv-wraper) td.wishlist-name .tinvwl-name-to-rename a:not(.tinvwl-button) {
	color: var(--wl-ink);
	font-weight: 700;
	border-bottom: 0;
	text-decoration: none;
}

.tinv-wishlist:not(.tinv-wraper) td.wishlist-name a:not(.tinvwl-button):hover,
.tinv-wishlist:not(.tinv-wraper) td.wishlist-name .tinvwl-name-to-rename a:not(.tinvwl-button):hover {
	color: var(--wl-steel-deep);
	border-bottom: 1px solid var(--wl-edge);
}

/* The item count the plugin prints as a bare <sup>, read as a count pill. */
.tinv-wishlist td.wishlist-name .tinvwl-name-to-rename sup {
	top: 0;
	display: inline-block;
	min-width: 20px;
	margin-left: 6px;
	padding: 2px 7px;
	border-radius: 999px;
	background: var(--wl-tint);
	color: var(--wl-steel-deep);
	font-size: 11px;
	font-weight: 800;
	line-height: 1.4;
	text-align: center;
	vertical-align: middle;
}

/*
 * Rename sits INSIDE td.wishlist-name, so the list-name anchor rule above
 * catches it too — hence the extra weight here rather than the shorter
 * `.tinv-wishlist .tinvwl-rename-button` this would otherwise be.
 */
.tinv-wishlist:not(.tinv-wraper) td.wishlist-name a.tinvwl-rename-button:not(.tinvwl-button) {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-left: 10px;
	color: var(--wl-grey);
	font-size: 12px;
	font-weight: 700;
	border-bottom: 0;
	text-decoration: none;
	white-space: nowrap;
}

.tinv-wishlist:not(.tinv-wraper) td.wishlist-name a.tinvwl-rename-button:not(.tinvwl-button):hover,
.tinv-wishlist:not(.tinv-wraper) td.wishlist-name a.tinvwl-rename-button:not(.tinvwl-button):focus {
	color: var(--wl-steel-deep);
}

.tinv-wishlist .tinvwl-rename-button i {
	margin: 0;
	font-size: 11px;
}

.tinv-wishlist .tinvwl-rename-button span {
	font-size: 12px;
}

.tinv-wishlist .tinvwl-rename-input input[type="text"],
.tinv-wishlist input[type="text"].tinvwl-rename-input {
	padding: 7px 11px;
	border: 1.5px solid var(--wl-steel);
	border-color: var(--wl-steel) !important;
	border-radius: 8px !important;
	background-color: #fff !important;
	color: var(--wl-ink);
	font: inherit;
	font-size: 14px;
	font-weight: 700;
	box-shadow: 0 0 0 3px var(--wl-ring);
}

.tinv-wishlist td.wishlist-author {
	color: var(--wl-ink-2);
	font-size: 13.5px;
}

/* -------------------------------------------------------------------------
 * 10. PUBLIC LISTS + THE SEARCH FORM
 * ---------------------------------------------------------------------- */

.tinv-wishlist table.tinvwl-table-manage-lists.tinvwl-public th {
	background: var(--wl-row);
}

.tinv-wishlist .tinv-lists-nav {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	margin: 18px 0 0;
	padding: 0;
	list-style: none;
	font-size: 13.5px;
}

.tinv-wishlist:not(.tinv-wraper) .tinv-lists-nav a,
.tinv-wishlist:not(.tinv-wraper) .tinv-lists-nav span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 34px;
	padding: 6px 10px;
	border: 1.5px solid var(--wl-line-2);
	border-radius: 8px;
	color: var(--wl-ink-2);
	font-weight: 700;
	text-decoration: none;
}

.tinv-wishlist:not(.tinv-wraper) .tinv-lists-nav a:hover,
.tinv-wishlist:not(.tinv-wraper) .tinv-lists-nav a:focus {
	border-color: var(--wl-steel);
	background: var(--wl-tint);
	color: var(--wl-steel-deep);
}

.tinv-wishlist .tinv-search-form.tinv-wrapped-block {
	margin: 0 0 20px;
	padding: 18px 20px;
	border: 1px solid var(--wl-edge);
	border-radius: var(--wl-radius);
	background: var(--wl-tint);
}

.tinv-wishlist .tinv-search-form .tinvwl-input-group {
	display: flex;
	width: 100%;
	gap: 8px;
}

/*
 * The field is `type="search"` (not text) and its container carries BOTH
 * .tinv-search-form and .tinv-wrapped-block, which is what the plugin styles
 * it from — `.tinv-wishlist .tinv-wrapped-block input[type="search"]` at
 * (0,3,1) with !important on the radius. So both classes are in the chain
 * here. Without the extra weight the field also loses its `flex` and stops
 * shrinking, which overflows the panel; the button's padding and radius are
 * forced the same way every other button's are.
 */
.tinv-wishlist .tinv-search-form.tinv-wrapped-block input.tinv-search-field,
.tinv-wishlist .tinv-search-form input.tinv-search-field {
	flex: 1 1 auto;
	min-width: 0;
	padding: 10px 14px !important;
	border: 1.5px solid var(--wl-line-2);
	border-color: var(--wl-line-2) !important;
	border-radius: 8px !important;
	/* Forced transparent by the plugin on wrapped-block search inputs, which
	 * is invisible against the panel's fill. */
	background-color: #fff !important;
	color: var(--wl-ink);
	font: inherit;
	font-size: 14px;
	box-shadow: none;
}

.tinv-wishlist .tinv-search-form.tinv-wrapped-block input.tinv-search-field:focus {
	border-color: var(--wl-steel) !important;
	box-shadow: 0 0 0 3px var(--wl-ring);
	outline: none;
}

.tinv-wishlist .tinv-search-form .tinvwl-input-group-btn {
	display: flex;
	flex: 0 0 auto;
	width: auto;
	padding: 0;
}

.tinv-wishlist .tinv-search-form .tinv-search-submit,
.tinv-wishlist .tinv-search-form button.tinv-search-submit {
	flex: 0 0 auto;
	width: auto;
	padding: 10px 18px !important;
	border: 1.5px solid transparent;
	border-radius: 8px !important;
	background-color: var(--wl-steel) !important;
	color: #fff !important;
	font-size: 13.5px !important;
	font-weight: 800 !important;
	white-space: nowrap;
}

.tinv-wishlist .tinv-search-form .tinv-search-submit:hover,
.tinv-wishlist .tinv-search-form .tinv-search-submit:focus {
	background-color: var(--wl-steel-deep) !important;
	color: #fff !important;
}

/* -------------------------------------------------------------------------
 * 11. SOCIAL SHARE
 * ---------------------------------------------------------------------- */

.tinv-wishlist .social-buttons {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
	margin: 18px 0 0;
	padding: 0;
	list-style: none;
}

.tinv-wishlist .social-buttons li {
	margin: 0;
	list-style: none;
}

.tinv-wishlist:not(.tinv-wraper) .social-buttons .social {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border: 1.5px solid var(--wl-edge);
	border-radius: 50%;
	background: var(--wl-tint);
	color: var(--wl-steel-deep);
	font-size: 14px;
	text-decoration: none;
	transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

/* `.tinv-wishlist .social-buttons li a:hover` forces a transparent ground. */
.tinv-wishlist:not(.tinv-wraper) .social-buttons li a.social:hover,
.tinv-wishlist:not(.tinv-wraper) .social-buttons li a.social:focus {
	border-color: transparent;
	background-color: var(--wl-steel) !important;
	color: #fff;
}

.tinv-wishlist:not(.tinv-wraper) .social-buttons .social i {
	margin: 0;
}

/* -------------------------------------------------------------------------
 * 12. MODALS — Create list, Notification settings, Move to list.
 *
 * Rendered BOTH inside the page's own .tinv-wishlist (the per-row Move
 * dialogs, and the Create / Notifications dialogs the nav opens) AND as
 * standalone copies appended to <body> — where the plugin wraps them in a
 * second, full-width .tinv-wishlist of its own. So every plugin rule here is
 * `.tinv-wishlist .tinv-modal …` at (0,3,0), and many of them are
 * `!important` on top (the modal's text colour, the close button, the button
 * fills).
 *
 * WHY `.tinv-modal.tinv-modal` THROUGHOUT: doubling the class buys exactly
 * the one step of weight needed to match (0,3,0), without making these rules
 * depend on a .tinv-wishlist ancestor that a future plugin version might stop
 * emitting. `!important` cannot be answered by specificity, so where the
 * plugin used one, so does this section — same rule as the rest of the file.
 * ---------------------------------------------------------------------- */

.tinv-modal.tinv-modal .tinv-overlay {
	background: var(--wl-scrim);
}

.tinv-modal.tinv-modal .tinv-modal-inner {
	max-width: 480px;
	padding: 26px 26px 24px;
	border: 0;
	border-radius: 14px;
	background: #fff;
	box-shadow: 0 18px 48px rgba(38, 50, 56, 0.26);
	color: var(--wl-ink-2) !important;
	line-height: 1.5;
	text-align: left;
}

.tinv-modal.tinv-modal .tinv-modal-inner h2 {
	margin: 0 0 16px;
	color: var(--wl-steel-deep);
	font-size: 19px;
	font-weight: 800;
	line-height: 1.25;
}

.tinv-modal.tinv-modal .tinv-close-modal,
.tinv-modal.tinv-modal a.tinv-close-modal {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	top: 14px;
	right: 14px;
	border: 0;
	border-radius: 50%;
	background-color: transparent !important;
	color: var(--wl-faint) !important;
	font-size: 13px;
	text-decoration: none;
	transition: background-color 0.15s ease, color 0.15s ease;
}

.tinv-modal.tinv-modal .tinv-close-modal:hover,
.tinv-modal.tinv-modal .tinv-close-modal:focus,
.tinv-modal.tinv-modal a.tinv-close-modal:hover,
.tinv-modal.tinv-modal a.tinv-close-modal:focus {
	background-color: var(--wl-tint) !important;
	color: var(--wl-steel-deep) !important;
}

.tinv-modal.tinv-modal .tinv-close-modal i {
	margin: 0;
}

/* The Move modal's decorative heart. */
.tinv-modal.tinv-modal .icon_big_heart_next {
	color: var(--wl-steel);
}

/* Fields */
.tinv-modal.tinv-modal .tinvwl-input-group {
	display: flex;
	gap: 8px;
	width: 100%;
	margin: 0 0 12px;
}

/* `.tinv-modal-inner` for weight: the plugin styles these fields from
 * `.tinv-wishlist .tinv-modal .tinv-modal-inner select` (0,3,1) with
 * !important, which a bare `.tinv-modal select` (0,2,1) cannot reach. */
.tinv-modal.tinv-modal .tinv-modal-inner input[type="text"],
.tinv-modal.tinv-modal .tinv-modal-inner .form-control,
.tinv-modal.tinv-modal .tinv-modal-inner select {
	flex: 1 1 auto;
	min-width: 0;
	padding: 10px 14px;
	/* border-radius and border-colour are both forced by the plugin. */
	border: 1.5px solid var(--wl-line-2);
	border-color: var(--wl-line-2) !important;
	border-radius: 8px !important;
	background-color: #fff !important;
	color: var(--wl-ink);
	font: inherit;
	font-size: 14px;
	box-shadow: none;
}

/* The Move dialog's list picker — same drawn caret as the page selects. */
.tinv-modal.tinv-modal .tinv-modal-inner select {
	padding-right: 32px;
	background-image:
		linear-gradient(45deg, transparent 50%, var(--wl-steel) 50%),
		linear-gradient(135deg, var(--wl-steel) 50%, transparent 50%);
	background-position: calc(100% - 16px) calc(50% + 1px), calc(100% - 11px) calc(50% + 1px);
	background-size: 5px 5px, 5px 5px;
	background-repeat: no-repeat;
}

.tinv-modal.tinv-modal .tinv-modal-inner input[type="text"]:focus,
.tinv-modal.tinv-modal .tinv-modal-inner select:focus {
	border-color: var(--wl-steel) !important;
	box-shadow: 0 0 0 3px var(--wl-ring);
	outline: none;
}

/*
 * The plugin builds input-groups as a display:table row — the trailing button
 * cell is `display: table-cell; width: 1%`, then a second rule stretches both
 * the cell and its button to `width: 100%` unless the group carries
 * `.tinvwl-no-full`. Inside a flex group that leaves the button with no
 * intrinsic width at all, so both widths are released here.
 */
.tinv-modal.tinv-modal .tinvwl-input-group-btn {
	display: flex;
	flex: 0 0 auto;
	width: auto;
	padding: 0;
	white-space: nowrap;
}

.tinv-modal.tinv-modal .tinvwl-input-group-btn > button {
	width: auto;
	white-space: nowrap;
}

/*
 * Every modal button is graphite — nothing in a modal is a buy action.
 *
 * `.tinv-modal-inner` is in every chain for weight: without it these land on
 * (0,3,1), which TIES this file's own `.tinv-wishlist button.tinvwl-button:
 * not(.alt)` ghost rule (the modals sit inside .tinv-wishlist), and a tie
 * decided by source order is the kind of thing a later edit silently flips.
 * The plugin also stretches modal buttons to `width: 100%`, hence the release.
 */
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-input-group-btn button,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group button,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl-button,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl_button_move,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl_button_view,
.tinv-modal.tinv-modal .tinv-modal-inner form button {
	width: auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	border: 1.5px solid transparent;
	background-color: var(--wl-steel) !important;
	color: #fff !important;
	line-height: 1.2;
	text-decoration: none;
	box-shadow: none;
}

.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-input-group-btn button:hover,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group button:hover,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl-button:hover,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl_button_move:hover,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl_button_view:hover,
.tinv-modal.tinv-modal .tinv-modal-inner form button:hover,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-input-group-btn button:focus,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group button:focus,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl-button:focus,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl_button_move:focus,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl_button_view:focus,
.tinv-modal.tinv-modal .tinv-modal-inner form button:focus {
	background-color: var(--wl-steel-deep) !important;
	color: #fff !important;
}

/*
 * Secondary actions inside a modal read as ghosts so the primary one is
 * obvious: select-all / select-none in the bulk dialogs, and Close in the
 * "which wishlist?" dialog the heart opens on the shop grid and PDP (that
 * dialog is a .tinv-modal too, which is why it inherits this whole section).
 *
 * The plugin sizes the select-* pair at (0,4,0) with forced padding and a
 * calc() width, so this group has to reach the same weight.
 */
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group .tinvwl-select-all,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group .tinvwl-select-none,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl_button_close {
	width: auto;
	padding: 9px 15px !important;
	border-color: var(--wl-line-2) !important;
	background-color: #fff !important;
	color: var(--wl-ink-2) !important;
}

.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group .tinvwl-select-all:hover,
.tinv-modal.tinv-modal .tinv-modal-inner .tinvwl-buttons-group .tinvwl-select-none:hover,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl_button_close:hover,
.tinv-modal.tinv-modal .tinv-modal-inner button.tinvwl_button_close:focus {
	border-color: var(--wl-steel) !important;
	background-color: var(--wl-tint) !important;
	color: var(--wl-steel-deep) !important;
}

.tinv-modal.tinv-modal .tinvwl-buttons-group {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 16px;
}

/* The privacy radios (Create) and notification checkboxes share one row style. */
.tinv-modal.tinv-modal .tinv-modal-inner ul {
	margin: 4px 0 0;
	padding: 0;
	list-style: none;
}

.tinv-modal.tinv-modal .tinv-modal-inner ul > li {
	margin: 0;
	padding: 0;
	list-style: none;
	border-top: 1px solid var(--wl-line);
}

.tinv-modal.tinv-modal .tinv-modal-inner ul > li:first-child {
	border-top: 0;
}

.tinv-modal.tinv-modal .tinv-modal-inner ul > li > label {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	margin: 0;
	padding: 11px 2px;
	color: var(--wl-ink-2);
	font-size: 13.5px;
	line-height: 1.45;
	cursor: pointer;
}

.tinv-modal.tinv-modal .tinv-modal-inner ul > li > label:hover {
	color: var(--wl-steel-deep);
}

.tinv-modal.tinv-modal .tinv-modal-inner ul > li > label input {
	flex: 0 0 auto;
	margin-top: 2px;
}

.tinv-modal.tinv-modal .tinv-modal-inner ul > li > label b {
	color: var(--wl-ink);
	font-weight: 800;
}

.tinv-modal.tinv-modal .tinvwl-txt {
	margin: 0 0 4px;
	color: var(--wl-ink-2);
	font-size: 13.5px;
	font-weight: 700;
}

.tinv-modal.tinv-modal .tinvwl-error {
	margin: 0 0 12px;
	padding: 9px 12px;
	border: 1px solid var(--wl-brick-line);
	border-radius: 8px;
	background: var(--wl-brick-tint);
	color: var(--wl-brick);
	font-size: 13px;
}

/* -------------------------------------------------------------------------
 * 13. MOBILE
 *
 * 768px is the plugin's OWN breakpoint, matched deliberately: below it the
 * plugin turns every <td> into a full-width centred block, and there is no
 * value in having two different collapse points fighting. Its
 * `width: 100% !important` on the cell is the one place this file answers
 * with !important — a grid item at 100% of its own track is harmless, but
 * the declaration cannot be beaten any other way.
 * ---------------------------------------------------------------------- */

@media only screen and (max-width: 768px) {
	/* Still the surface's only heading on mobile — see the section 3 note. */
	.tinv-wishlist .tinv-header h2 {
		font-size: 22px;
	}

	.tinv-wishlist .tinv-header h2::before {
		width: 20px;
		height: 20px;
	}

	.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > a:not(.tinvwl-button),
	.tinv-wishlist:not(.tinv-wraper) ul.navigation-button > li > .tinv-create-list > a:not(.tinvwl-button) {
		padding: 7px 12px;
		font-size: 12.5px;
	}

	/* The head carries no information once the rows become cards. */
	.tinv-wishlist table.tinvwl-table-manage-list thead {
		display: none;
	}

	.tinv-wishlist table.tinvwl-table-manage-list,
	.tinv-wishlist table.tinvwl-table-manage-list tbody,
	.tinv-wishlist table.tinvwl-table-manage-list tfoot {
		display: block;
		width: 100%;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tbody tr.wishlist_item,
	.tinv-wishlist table.tinvwl-table-manage-list tbody tr {
		display: grid;
		grid-template-columns: 68px minmax(0, 1fr) 30px;
		grid-template-areas:
			"thumb name   remove"
			"thumb price  remove"
			"action action action";
		align-items: center;
		gap: 4px 12px;
		padding: 14px;
		border-bottom: 1px solid var(--wl-line);
	}

	/*
	 * `min-width: 0` + wrapping is load-bearing, not polish: a grid item's
	 * automatic minimum size is its min-content width, so a long product name
	 * paints straight out of its `minmax(0, 1fr)` track and under the buttons
	 * in the next column. Confirmed on a real list before fixing.
	 */
	.tinv-wishlist table.tinvwl-table-manage-list tbody td {
		display: block;
		width: auto !important;
		min-width: 0;
		padding: 0;
		border: 0;
		text-align: left;
		overflow-wrap: anywhere;
	}

	/*
	 * Explicit width, not `auto`: as a grid item in a fixed 68px track an
	 * auto-width cell still reports (and can paint) wider than the track,
	 * which puts its box under the name column.
	 */
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-thumbnail {
		grid-area: thumb;
		align-self: start;
		width: 68px !important;
	}

	.tinv-wishlist .tinvwl-table-manage-list td.product-thumbnail > a {
		width: 68px;
		height: 68px;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-name {
		grid-area: name;
		align-self: end;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-price,
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-subtotal {
		grid-area: price;
		align-self: start;
		text-align: left;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-remove {
		grid-area: remove;
		align-self: start;
		text-align: right;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-action {
		grid-area: action;
		display: flex;
		gap: 8px;
		margin-top: 10px;
		text-align: left;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-action > button,
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-action > .button {
		flex: 1 1 auto;
	}

	.tinv-wishlist .tinvwl_move_product_button {
		margin-left: 0;
	}

	/* Columns that only make sense in a table go inline under the name. */
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-stock,
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-date,
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-quantity,
	.tinv-wishlist table.tinvwl-table-manage-list tbody td.product-cb {
		grid-area: price;
		align-self: start;
	}

	.tinv-wishlist table.tinvwl-table-manage-list tfoot td,
	.tinv-wishlist table.tinvwl-table-manage-list tfoot tr {
		display: block;
		width: 100% !important;
		text-align: right;
	}

	/* Manage-wishlists: a 2x3 card instead of a 5-column table. */
	.tinv-wishlist table.tinvwl-table-manage-lists,
	.tinv-wishlist table.tinvwl-table-manage-lists tbody,
	.tinv-wishlist table.tinvwl-table-manage-lists tfoot {
		display: block;
		width: 100%;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists thead {
		display: none;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody tr {
		display: grid;
		grid-template-columns: 24px minmax(0, 1fr) auto;
		grid-template-areas:
			"cb name    action"
			"cb privacy date";
		align-items: center;
		gap: 8px 12px;
		padding: 14px;
		border-bottom: 1px solid var(--wl-line);
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody td {
		display: block;
		width: auto !important;
		min-width: 0;
		padding: 0;
		border: 0;
		text-align: left;
		overflow-wrap: anywhere;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-cb {
		grid-area: cb;
		align-self: start;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-name {
		grid-area: name;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-privacy {
		grid-area: privacy;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-date {
		grid-area: date;
		text-align: right;
	}

	.tinv-wishlist table.tinvwl-table-manage-lists tbody td.wishlist-action {
		grid-area: action;
		text-align: right;
	}

	.tinv-wishlist .tinvwl-rename-button {
		margin-left: 0;
		margin-top: 4px;
	}

	.tinv-wishlist td.wishlist-name .tinvwl-name-to-rename {
		display: block;
	}

	/* Modals */
	.tinv-modal .tinv-modal-inner {
		padding: 22px 18px 20px;
	}

	.tinv-modal .tinvwl-input-group {
		flex-wrap: wrap;
	}

	.tinv-modal .tinvwl-input-group-btn,
	.tinv-modal .tinvwl-input-group-btn button {
		width: 100%;
	}
}
