/* ---------------------------------------------------------- length rows */

.tim-length-form {
	margin: 1.5em 0;
}

.tim-rows-head h3 {
	margin: 0 0 .25em;
	font-size: 1.1em;
}

.tim-rows-hint {
	margin: 0 0 1em;
	font-size: .88em;
	color: #666;
}

.tim-row {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: .75em;
	padding: .75em;
	margin-bottom: .6em;
	background: #fafafa;
	border: 1px solid #e4e4e4;
	border-radius: 3px;
}

.tim-row.has-error {
	border-color: #c0392b;
	background: #fdf3f2;
}

.tim-row-field label {
	display: block;
	font-size: .78em;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .04em;
	color: #555;
	margin-bottom: .25em;
}

.tim-row-field select,
.tim-row-field input {
	padding: .45em .55em;
}

.tim-row-length select {
	min-width: 180px;
}

.tim-row-qty input {
	width: 80px;
}

.tim-dims {
	display: inline-flex;
	align-items: center;
	gap: .4em;
}

.tim-dims input {
	width: 90px;
}

.tim-x {
	color: #888;
}

/* Hidden until there is a second row to remove; quote.js adds .is-visible. */
.tim-row-remove {
	display: none;
	margin-left: auto;
}

.tim-row-remove.is-visible {
	display: block;
}

.tim-remove-row {
	background: none;
	border: 1px solid #ccc;
	border-radius: 3px;
	width: 30px;
	height: 30px;
	font-size: 1.1em;
	line-height: 1;
	color: #888;
	cursor: pointer;
}

.tim-remove-row:hover:not(:disabled) {
	border-color: #c0392b;
	color: #c0392b;
}

/* A lone row cannot be removed. Hiding the control says that more plainly than
   greying it out, and keeps it from occupying a line of its own in the stacked
   inline layout below. It returns as soon as there is a second row. */
.tim-remove-row:disabled {
	display: none;
}

.tim-row-error {
	flex-basis: 100%;
	margin: .35em 0 0;
	font-size: .85em;
	color: #c0392b;
	display: none;
}

.tim-row-error.is-visible {
	display: block;
}

.tim-rows-actions {
	margin: .5em 0 1.2em;
}

/* ------------------------------------------------- inline (product page)

	On the product page Length sits above Quantity, each its own full-width
	block, matching the reference's .catalog-length / .catalog-quantity pair.

	Scoped to data-context="inline" on purpose: the popup keeps its rows
	side by side. It repeats them, and at two lines apiece ten lengths would
	not fit on screen.
--------------------------------------------------------------------- */

/*
	The form itself is the flex container, with the field stack and the submit
	as its two items. align-items:flex-end is what puts the button level with
	Quantity — the last thing in the stack — rather than below it or floating
	against Length, which is how the reference sets the pair.

	The fields cannot simply be laid out as one grid: .tim-submit sits outside
	.tim-rows in the markup, and flattening the two with display:contents would
	collapse every row together on the multi-row fallback.
*/
.tim-length-form[data-context="inline"] {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 0 1.25em;
}

/* Full-width items: these read as headings and messages for the whole form,
   not as a column beside the button. Hidden inputs never become flex items —
   the UA stylesheet keeps them display:none. */
.tim-length-form[data-context="inline"] .tim-rows-head,
.tim-length-form[data-context="inline"] .tim-form-errors,
.tim-length-form[data-context="inline"] .tim-form-success {
	flex: 1 1 100%;
}

.tim-length-form[data-context="inline"] .tim-rows {
	flex: 0 1 auto;
}

/*
	The error box sits between .tim-rows and .tim-submit in the markup, and it
	is full-width — so the moment validation fails it would break the line and
	drop the button below the fields. Ordering it last keeps the button beside
	Quantity whether or not there is an error. Visual order only: focus order
	still runs fields, then button, and the box carries its own aria-live.
*/
.tim-length-form[data-context="inline"] .tim-rows-head {
	order: 0;
}

.tim-length-form[data-context="inline"] .tim-rows {
	order: 1;
}

.tim-length-form[data-context="inline"] .tim-submit {
	order: 2;
}

.tim-length-form[data-context="inline"] .tim-form-errors,
.tim-length-form[data-context="inline"] .tim-form-success {
	order: 3;
}

.tim-length-form[data-context="inline"] .tim-row {
	flex-direction: column;
	align-items: flex-start;
	gap: 1em;
	/* Zeroed so the bottom of the stack is the bottom of the Quantity box, and
	   the button beside it lines up on that edge. */
	margin-bottom: 0;
	/* No card: the reference draws these fields bare, and with the button now
	   outside the box its border would cut between the two halves of one line. */
	padding: 0;
	background: none;
	border: 0;
	border-radius: 0;
}

/* The card earns its place when the row is wrong — restored here because the
   rule above out-specifies the shared .tim-row.has-error. */
.tim-length-form[data-context="inline"] .tim-row.has-error {
	padding: .75em;
	background: #fdf3f2;
	border: 1px solid #c0392b;
}

.tim-length-form[data-context="inline"] .tim-row-field {
	width: 100%;
}

/* Sized to sit comfortably against the site button rather than at the browser
   default, which is barely half its height. */
.tim-length-form[data-context="inline"] .tim-row-field select,
.tim-length-form[data-context="inline"] .tim-row-field input {
	height: 56px;
	padding: .5em .75em;
	border: 1px solid var(--secondary, #de4826);
	background: #fff;
	font-size: 1rem;
}

/* The controls keep their own widths inside those blocks — a full-bleed
   number box for a quantity of 1 reads as a text field. */
.tim-length-form[data-context="inline"] .tim-row-length select {
	width: 100%;
	max-width: 260px;
}

.tim-length-form[data-context="inline"] .tim-row-qty input {
	width: 110px;
}

/* margin-left:auto pushed the × to the right of a horizontal row; in a column
   it would instead indent it, so it is reset. */
.tim-length-form[data-context="inline"] .tim-row-remove {
	margin-left: 0;
}

.tim-length-form[data-context="inline"] .tim-submit {
	flex: 0 0 auto;
	margin: 0;
}

/* Height matched to the fields so the pair reads as one line; the site button's
   own vertical padding is what would otherwise make it taller. */
.tim-length-form[data-context="inline"] .tim-submit .single_add_to_cart_button {
	display: inline-flex;
	align-items: center;
	height: 56px;
	padding-top: 0;
	padding-bottom: 0;
}

/* Stacked, the button is a full-width action under the fields again. */
@media (max-width: 600px) {
	.tim-length-form[data-context="inline"] {
		display: block;
	}

	.tim-length-form[data-context="inline"] .tim-row-length select,
	.tim-length-form[data-context="inline"] .tim-row-qty input {
		width: 100%;
		max-width: none;
	}

	.tim-length-form[data-context="inline"] .tim-submit {
		margin-top: 1em;
	}

	.tim-length-form[data-context="inline"] .tim-submit .single_add_to_cart_button {
		width: 100%;
		justify-content: center;
	}
}

.tim-form-errors,
.tim-form-success {
	display: none;
	padding: .7em .9em;
	margin-bottom: 1em;
	border-radius: 3px;
	font-size: .92em;
}

.tim-form-errors.is-visible {
	display: block;
	background: #fdf3f2;
	border-left: 3px solid #c0392b;
}

.tim-form-success.is-visible {
	display: block;
	background: #f0f8f1;
	border-left: 3px solid #27ae60;
}

.single_add_to_cart_button.loading {
	opacity: .6;
	pointer-events: none;
}

@media (max-width: 600px) {
	.tim-row {
		flex-direction: column;
		align-items: stretch;
	}

	.tim-row-remove {
		margin-left: 0;
		align-self: flex-end;
	}

	.tim-row-length select,
	.tim-row-qty input,
	.tim-dims input {
		width: 100%;
	}
}

/* ------------------------------------------------------------ quote page */

.tim-quote-heading {
	margin: 0 0 .75em;
	color: var(--primary, #002c72);
}

/* Eight columns do not fit a phone; scroll the table rather than the page. */
.tim-quote-table-wrap {
	overflow-x: auto;
	margin-bottom: .9375rem;
}

/*
	The reference outlines the whole cart in orange with a light header band and
	no rules between rows — the outline is what holds it together, which is why
	the row borders below are dropped rather than restyled.
*/
.tim-quote-items {
	width: 100%;
	border-collapse: collapse;
	border: .0625rem solid var(--secondary, #de4826);
	margin-bottom: .9375rem;
}

.tim-quote-items thead {
	background-color: var(--light-gray, #f9f9f9);
	font-size: 1rem;
	font-weight: 700;
	line-height: 1.1;
}

.tim-quote-items th {
	padding: .9375rem;
	text-align: left;
	vertical-align: middle;
	color: var(--primary, #002c72);
	white-space: nowrap;
}

.tim-quote-items td {
	padding: .3125rem .9375rem;
	text-align: left;
	vertical-align: middle;
}

/* Remove is an icon column and reads better centred under its heading. */
.tim-quote-items th:last-child,
.tim-quote-items td:last-child {
	text-align: center;
}

.tim-quote-items td a {
	color: var(--secondary, #de4826);
	text-decoration: underline;
}

.tim-quote-items td a:hover,
.tim-quote-items td a:focus {
	color: var(--primary, #002c72);
}

.tim-col-image img {
	display: block;
	max-width: 2.5rem;
	max-height: 2.5rem;
	height: auto;
}

.tim-col-item a {
	font-weight: 700;
}

.tim-col-desc {
	min-width: 190px;
}

.tim-col-prime {
	white-space: nowrap;
}

.tim-quote-items .tim-na {
	color: #84989f;
}

/* Controls inside the cart take the orange edge, not the softer one the
   contact fields below use — they sit inside an orange-outlined table. */
.tim-quote-items select,
.tim-quote-items input,
.tim-quote-items textarea {
	border: .0625rem solid var(--secondary, #de4826);
	border-radius: 0;
	background-color: #fff;
	font-size: 1rem;
	color: var(--text-color, #4d4d4f);
}

.tim-quote-items .tim-qs-size {
	min-width: 110px;
	height: 3rem;
	padding: .3125rem .9375rem;
}

.tim-quote-items .tim-col-qty input {
	width: 6.25rem;
	height: 3rem;
	padding: .3125rem 0 .3125rem .9375rem;
}

.tim-qs-custom {
	margin-top: .5rem;
}

.tim-qs-custom input {
	width: 5.625rem;
	height: 3rem;
	padding: .3125rem .5rem;
}

.tim-col-req textarea {
	width: 16rem;
	height: 3rem;
	margin-top: .5rem;
	padding: .3125rem .9375rem;
	resize: vertical;
}

/* A bare orange glyph, as on the reference — no button chrome. */
.tim-remove-item {
	background: none;
	border: 0;
	padding: 0 .2em;
	font-size: 1.25rem;
	font-weight: 700;
	line-height: 1;
	color: var(--secondary, #de4826);
	cursor: pointer;
}

.tim-remove-item:hover,
.tim-remove-item:focus-visible {
	color: var(--primary, #002c72);
}

/* ------------------------------------------------------- quote form */

/* ---- the two opt-in checkboxes above the contact fields ---- */

.tim-quote-option {
	margin: 1rem 0 0;
}

.tim-quote-option label {
	display: inline-flex;
	align-items: flex-start;
	gap: .875rem;
	font-size: .9375rem;
	line-height: 1.6;
	color: var(--text-color, #4d4d4f);
	cursor: pointer;
}

.tim-quote-form {
	padding: 5rem 0;
}

/*
	A square orange box with a white tick, as the reference draws it. It builds
	that out of a hidden input plus a .checkmark span; here the input styles
	itself, which keeps the label markup plain and the control natively
	focusable. The tick is a background image rather than a pseudo-element:
	pseudo-elements on <input> are not something every engine honours.
*/
.tim-quote-form input[type="checkbox"] {
	appearance: none;
	-webkit-appearance: none;
	flex: none;
	width: 1rem;
	height: 1rem;
	margin: .25rem 0 0;
	border: 1px solid var(--secondary, #de4826);
	border-radius: 0;
	background-color: #fff;
	background-position: center;
	background-repeat: no-repeat;
	background-size: .75rem;
	cursor: pointer;
}

.tim-quote-form input[type="checkbox"]:checked {
	background-color: var(--secondary, #de4826);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8.5l3.5 3.5L13 4.5'/%3E%3C/svg%3E");
}

.tim-quote-form input[type="checkbox"]:focus-visible {
	outline: 2px solid var(--primary, #002c72);
	outline-offset: 2px;
}

/*
	The .button elements here are <button>s, which default to cursor:default —
	only the <a class="button"> variants get a pointer for free. Disabled ones
	are excluded so they keep the not-allowed cursor _woo.scss gives them.
*/
.tim-quote-form .button:not(:disabled):not(.disabled),
.tim-quote-proceed .button,
.tim-quote-form a,
.tim-quote-empty a {
	cursor: pointer;
}

.tim-quote-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 1em;
	justify-content: center;
	margin: 1.875rem 0;
}

/* ---- numbered section headings ---- */

.tim-section-title {
	margin: 1.5625rem 0 .9375rem;
	color: var(--primary, #002c72);
}

/*
	Four across, as the reference lays the contact block out with .w25. An
	explicit track count rather than auto-fit: Delivery is date / zip / method,
	and only a fixed grid lets the method pair span the half-width the
	reference gives it.
*/
.tim-field-grid {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 1.125rem 1.875rem;
	align-items: start;
}

.tim-field-grid .tim-field-choice {
	grid-column: span 2;
}

@media (max-width: 900px) {
	.tim-field-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 600px) {
	.tim-field-grid {
		grid-template-columns: minmax(0, 1fr);
	}

	.tim-field-grid .tim-field-choice {
		grid-column: auto;
	}
}

.tim-quote-form .tim-field {
	margin-bottom: 0;
}

/*
	:not(.tim-choice) is load-bearing. Each shipping-method option is itself a
	<label> inside .tim-field, so without the exclusion this rule out-specifies
	.tim-choice below and turns the pair into two stacked navy headings instead
	of one row of two options.
*/
.tim-quote-form .tim-field label:not(.tim-choice),
.tim-quote-form .tim-field-label,
.tim-field-wide label {
	display: block;
	margin-bottom: .5rem;
	font-size: 1rem;
	font-weight: 600;
	line-height: 1.1;
	color: var(--primary, #002c72);
}

/*
	Flat white boxes with a hairline edge. The reference sets that edge to its
	--color-light (#f9f9f9), which on a white page is invisible; the slightly
	darker value here is the one already used for the specification table and
	the size popup, so the field actually reads as a field.
*/
.tim-quote-form .tim-field input,
.tim-quote-form .tim-field select,
.tim-quote-form .tim-field textarea,
.tim-quote-form .tim-field-wide textarea {
	width: 100%;
	height: 3rem;
	border: .0625rem solid #e2e2e4;
	border-radius: 0;
	background-color: #fff;
	font-size: 1rem;
	color: var(--text-color, #4d4d4f);
}

.tim-quote-form .tim-field input:not([type="radio"]),
.tim-quote-form .tim-field select,
.tim-quote-form .tim-field textarea,
.tim-quote-form .tim-field-wide textarea {
	padding: .125rem .9375rem;
}

.tim-quote-form .tim-field input:focus,
.tim-quote-form .tim-field select:focus,
.tim-quote-form .tim-field textarea:focus,
.tim-quote-form .tim-field-wide textarea:focus {
	outline: none;
	border-color: var(--primary, #002c72);
}

.tim-quote-form ::placeholder {
	color: #84989f;
	opacity: 1;
}

.tim-field-wide {
	margin: 1.125rem 0 0;
}

.tim-quote-form .tim-field-wide textarea {
	height: 14.625rem;
	padding-top: .9375rem;
	resize: vertical;
}

.tim-required {
	color: var(--primary, #002c72);
}

.tim-field-choice {
	display: block;
}

.tim-choice {
	display: inline-flex;
	align-items: center;
	gap: .875rem;
	margin-right: 1.875rem;
	font-size: .9375rem;
	font-weight: 400;
	color: var(--text-color, #4d4d4f);
	cursor: pointer;
}

/*
 * The design draws the shipping method as ticked squares. These stay radios for
 * the semantics — picking up and delivering are exclusive — but wear the same
 * orange box as the checkboxes above so the two read as one family.
 */
.tim-choice input[type="radio"] {
	appearance: none;
	-webkit-appearance: none;
	flex: none;
	width: 1rem;
	height: 1rem;
	margin: 0;
	border: 1px solid var(--secondary, #de4826);
	border-radius: 0;
	background-color: #fff;
	background-position: center;
	background-repeat: no-repeat;
	background-size: .75rem;
	cursor: pointer;
}

.tim-choice input[type="radio"]:checked {
	background-color: var(--secondary, #de4826);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8.5l3.5 3.5L13 4.5'/%3E%3C/svg%3E");
}

.tim-choice input[type="radio"]:focus-visible {
	outline: 2px solid var(--primary, #002c72);
	outline-offset: 2px;
}

.tim-quote-submit {
	margin: 1.875rem 0;
}

.tim-quote-submit .button {
	width: 100%;
}

.tim-quote-proceed {
	text-align: right;
	margin-top: 1.5em;
}

/* Honeypot — visually hidden but not display:none (bots skip those). */
.tim-hp {
	position: absolute !important;
	left: -9999px !important;
	height: 0;
	overflow: hidden;
}

@media (max-width: 600px) {
	.tim-quote-actions .button {
		width: 100%;
		text-align: center;
	}
}

/* ----------------------------------------------------------- size popup */

.tim-modal[hidden] {
	display: none;
}

.tim-modal {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1.5em;
}

.tim-modal__backdrop {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .55);
}

.tim-modal__dialog {
	position: relative;
	width: 100%;
	max-width: 800px;
	max-height: calc(100vh - 3em);
	overflow-y: auto;
	padding: 2.5em 3em;
	background: #fff;
	border-radius: 0;
	box-shadow: 0 10px 40px rgba(0, 0, 0, .3);
	text-align: center;
}

.tim-modal__dialog:focus {
	outline: none;
}

/* The close control sits over the corner rather than in a header row, so the
   title can centre against the dialog itself. */
.tim-modal__head {
	position: static;
}

.tim-modal__title {
	margin: 0 0 .35em;
	font-family: var(--heading-font-family, inherit), sans-serif;
	font-size: 2.25rem;
	font-weight: 700;
	line-height: 1.1;
	color: var(--primary, #002c72);
	text-align: center;
}

.tim-modal__close {
	position: absolute;
	top: .5em;
	right: .65em;
	background: none;
	border: 0;
	font-size: 1.6em;
	line-height: 1;
	color: #b5b5b5;
	cursor: pointer;
	padding: 0 .15em;
}

.tim-modal__close:hover,
.tim-modal__close:focus-visible {
	color: var(--primary, #002c72);
}

.tim-modal__loading,
.tim-modal__error {
	margin: 1.5em 0;
	text-align: center;
	color: #666;
}

.tim-modal__error {
	color: #c0392b;
}

/* ------------------------------------------------- popup form (custom size)

	Matches the reference popup: a centred title and one line of instruction
	over a single Length / Quantity row, with the two actions stacked beneath
	as icon text rather than filled buttons.
--------------------------------------------------------------------------- */

.tim-modal .tim-length-form {
	margin: 0;
}

.tim-modal .tim-rows-lede {
	margin: 0 0 1.5em;
	font-size: 1rem;
	color: var(--text-color, #4d4d4f);
}

/* The max-cut note repeats what the input's own max already enforces, and the
   reference popup does not carry it. */
.tim-modal .tim-rows-hint {
	display: none;
}

.tim-modal .tim-row {
	flex-direction: row;
	align-items: stretch;
	flex-wrap: nowrap;
	gap: 0;
	padding: 0;
	margin-bottom: .75em;
	background: none;
	border: 0;
	border-radius: 0;
	text-align: left;
}

/* Length takes the room, quantity a fixed slot beside it — the two read as one
   control, so the shared edge is collapsed rather than doubled. */
.tim-modal .tim-row-custom {
	flex: 1 1 auto;
	min-width: 0;
}

.tim-modal .tim-row-qty {
	flex: 0 0 150px;
	margin-left: -1px;
}

.tim-modal .tim-row-field select,
.tim-modal .tim-row-field input {
	width: 100%;
	height: 56px;
	padding: .75em 1em;
	border: 1px solid #e2e2e4;
	border-radius: 0;
	background: #fff;
	font-size: 1rem;
	color: var(--text-color, #4d4d4f);
}

.tim-modal .tim-row-field input::placeholder {
	color: #9a9a9a;
	opacity: 1;
}

.tim-modal .tim-row-field input:focus,
.tim-modal .tim-row-field select:focus {
	outline: none;
	border-color: var(--primary, #002c72);
	position: relative;
	z-index: 1;
}

/* Sheet mode keeps its two boxes; the W x L pair fills the length slot. */
.tim-modal .tim-dims {
	display: flex;
	align-items: stretch;
	gap: 0;
	width: 100%;
}

.tim-modal .tim-dims input {
	flex: 1 1 0;
}

.tim-modal .tim-dims .tim-x {
	display: flex;
	align-items: center;
	padding: 0 .5em;
	color: #9a9a9a;
}

/* One row needs no remove control; with several, it returns. */
.tim-modal .tim-row-remove {
	flex: none;
	margin-left: .5em;
	align-items: center;
}

.tim-modal .tim-row-remove.is-visible {
	display: flex;
}

.tim-modal .tim-remove-row:disabled {
	display: none;
}

.tim-modal .tim-row-error {
	text-align: left;
}

/* ---- the two stacked text actions ---- */

.tim-modal .tim-rows-actions,
.tim-modal .tim-submit {
	margin: 0;
	text-align: center;
}

.tim-modal .tim-rows-actions {
	margin-top: 1.25em;
}

.tim-modal .tim-submit {
	margin-top: .5em;
}

.tim-modal .tim-add-row,
.tim-modal .tim-submit .single_add_to_cart_button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .5em;
	width: auto;
	padding: .4em .6em;
	border: 0;
	background: none;
	border-radius: 0;
	font-family: inherit;
	font-size: 1.0625rem;
	font-weight: 400;
	letter-spacing: 0;
	line-height: 1.2;
	text-transform: none;
	text-decoration: none;
	cursor: pointer;
	transition: color .2s ease-in-out;
}

.tim-modal .tim-add-row {
	color: var(--primary, #002c72);
}

.tim-modal .tim-submit .single_add_to_cart_button {
	color: var(--secondary, #de4826);
}

.tim-modal .tim-add-row:hover,
.tim-modal .tim-add-row:focus-visible,
.tim-modal .tim-submit .single_add_to_cart_button:hover,
.tim-modal .tim-submit .single_add_to_cart_button:focus-visible {
	background: none;
	text-decoration: underline;
}

.tim-modal .tim-add-row .fa-solid,
.tim-modal .tim-submit .fa-solid {
	font-size: .95em;
}

@media (max-width: 600px) {
	.tim-modal__dialog {
		padding: 2em 1.25em;
	}

	.tim-modal__title {
		font-size: 1.75rem;
	}

	.tim-modal .tim-row {
		flex-direction: column;
		gap: .5em;
	}

	.tim-modal .tim-row-qty {
		flex: none;
		margin-left: 0;
	}

	.tim-modal .tim-row-remove {
		margin-left: 0;
		align-self: flex-end;
	}
}

/* The popup supplies its own heading, so the form's is redundant here. */
.tim-modal .tim-rows-head h3 {
	display: none;
}

.tim-modal .tim-length-form {
	margin: 0;
}

/* Stops the page scrolling behind the popup. */
body.tim-modal-open {
	overflow: hidden;
}

/* ---------------------------------------------------------------- toast */

.tim-toast {
	position: fixed;
	left: 50%;
	bottom: 1.5em;
	z-index: 100001;
	transform: translate(-50%, 1em);
	max-width: calc(100vw - 3em);
	padding: .8em 1.2em;
	background: var(--secondary, #de4826);
	color: #fff;
	border-radius: 4px;
	box-shadow: 0 6px 24px rgba(0, 0, 0, .28);
	font-size: .92em;
	opacity: 0;
	visibility: hidden;
	transition: opacity .2s ease, transform .2s ease, visibility .2s;
}

.tim-toast.is-visible {
	opacity: 1;
	visibility: visible;
	transform: translate(-50%, 0);
}

.tim-toast__link {
	color: #fff;
	text-decoration: underline;
	white-space: nowrap;
}

/* Navy on the orange, the way the theme's orange buttons flip elsewhere —
   the old mint pair was picked against the dark background this toast used
   to have. */
.tim-toast__link:hover {
	color: var(--primary, #002c72);
}

@media (prefers-reduced-motion: reduce) {
	.tim-toast {
		transition: opacity .01ms, visibility .01ms;
		transform: translate(-50%, 0);
	}
}

/* -------------------------------------------------- catalog add button */

.acf-product-catalog__add.is-loading {
	opacity: .5;
	pointer-events: none;
}
/* ------------------------------------------------- reference price (equipment) */

.tim-display-price { font-weight: 600; }

.tim-price-note {
	font-size: .9em;
	color: #666;
}

.tim-price-caveat {
	display: block;
	font-size: .8em;
	font-weight: 400;
	color: #777;
	margin-top: .2em;
}
