/*!
 * Party Rental Core — the booking platform's own pages, in the theme's style.
 *
 * InflatableOffice renders the category grids, item pages and quote form
 * itself (and BookFlow adds its browse grid and item calendar there). These
 * rules re-point their look at the active theme's tokens (--prt-*). Loaded
 * only on those pages (prt_io_pages_css()), after prt-io.css, which holds
 * what every page needs (cart panel, BookFlow's windows). Split out of
 * prt-io.css in polish round 8; the order of the rules is unchanged.
 */

/* ---------- page frame ---------- */
.prt-io-page .prt-page__body { font-family: var(--prt-font-body); color: var(--prt-ink); }
.prt-io-page .elementor-section.elementor-section-boxed > .elementor-container { max-width: 1240px; }
/* Content headings only: the theme's own header and footer headings keep their font (round 9, A#1), and so does
   the page header core puts on the platform's booking steps (.prt-io-flowhead, round 15). */
.prt-io-page :where(#main) :is(h1, h2, h3):where(:not(.prt-io-flowhead *)),
.catNameIO, .io_product_title {
	font-family: var(--prt-font-display) !important;
	color: var(--prt-ink);
	letter-spacing: -.01em;
}
.catNameIO { font-size: clamp(1.9rem, 3.6vw, 2.8rem) !important; line-height: 1.1 !important; margin: .4em 0 .6em !important; }
.catNameIO .io_forrent { color: var(--prt-primary-text); }
/* ---------- category grid ---------- */
.io_item2_list.simpleCart_ioShelfItem {
	background: var(--prt-surface) !important;
	border: 1px solid var(--prt-line) !important;
	border-radius: var(--prt-radius) !important;
	box-shadow: var(--prt-shadow) !important;
	overflow: hidden;
	transition: transform .25s ease, box-shadow .25s ease;
}
.io_item2_list.simpleCart_ioShelfItem:hover { transform: translateY(-4px); }
.io_item2_list .cat_div { background: var(--prt-surface-alt); border-radius: 0 !important; }
.io_item2_list .cat_img, .io_item2_list .category_big_img {
	width: 100% !important; aspect-ratio: 4 / 3; object-fit: contain !important;
	border-radius: 0 !important; background: var(--prt-surface-alt);
}
.io_item2_list .view-product-button { display: none !important; }
.io_item2_list .io_category_thumbox { display: none !important; }
.io_item2_list_inner { padding: 14px 16px 16px !important; }
.io_item2_list .rentNameIO, .io_item2_list .rentNameIO a {
	font-family: var(--prt-font-display) !important;
	font-size: 1.05rem !important; font-weight: 700 !important;
	color: var(--prt-ink) !important; text-decoration: none !important; line-height: 1.25 !important;
}
.rentNameIO_price { color: var(--prt-muted) !important; font-family: var(--prt-font-body) !important; margin: .35em 0 .7em !important; }
.rentNameIO_pricespan { color: var(--prt-ink) !important; font-weight: 800 !important; font-size: 1.1rem; }
.cat_from { font-size: .8rem; text-transform: uppercase; letter-spacing: .06em; }
.io_buttons_container { display: flex !important; gap: 8px; flex-wrap: wrap; align-items: center; }
.io_more_info_button {
	display: inline-flex !important; align-items: center; justify-content: center;
	padding: .6em 1em !important; border-radius: var(--prt-radius-sm) !important;
	border: 1.5px solid var(--prt-line) !important; background: transparent !important;
	color: var(--prt-ink) !important; font: 700 .82rem/1 var(--prt-font-body) !important;
	letter-spacing: .04em; text-decoration: none !important;
}
.io_more_info_button:hover { border-color: var(--prt-primary) !important; color: var(--prt-primary-text) !important; }
/* ---------- item page ---------- */
.io_product_container { font-family: var(--prt-font-body); color: var(--prt-ink); }
.io_product_container .cartInfo { display: none !important; }
.io_product_picbox #io_main_media_container,
.io_product_picbox .io_image_big {
	border-radius: var(--prt-radius) !important;
	background: var(--prt-surface-alt);
}
.io_product_picbox .io_image_thumb { border-radius: var(--prt-radius-sm) !important; border: 2px solid var(--prt-line) !important; }
/* body.prt: Toolkit paints this box white with an equally specific rule. */
body.prt .io_product_infobox {
	background: var(--prt-surface) !important;
	border: 1px solid var(--prt-line) !important;
	border-radius: var(--prt-radius) !important;
	box-shadow: var(--prt-shadow) !important;
	padding: clamp(18px, 3vw, 32px) !important;
}
.io_product_title { font-size: clamp(1.7rem, 3vw, 2.4rem) !important; line-height: 1.1 !important; }
.io_product_price_box { border-radius: var(--prt-radius-sm) !important; border-color: var(--prt-line) !important; }
.io_product_price_top_left { color: var(--prt-primary-text) !important; }
/* "You might also be interested in" and similar platform headings. */
.io_upsell_h3, .io_upsell_h3 * { color: var(--prt-ink) !important; font-family: var(--prt-font-display) !important; text-shadow: none !important; }
/* ---------- checkout / quote pages ---------- */
.prt-io-page input[type="text"], .prt-io-page input[type="email"], .prt-io-page input[type="tel"],
.prt-io-page input[type="date"], .prt-io-page select, .prt-io-page textarea {
	border-radius: var(--prt-radius-sm);
	border: 1.5px solid var(--prt-line);
	font-family: var(--prt-font-body);
}
.prt-io-page input:focus, .prt-io-page select:focus, .prt-io-page textarea:focus {
	outline: 3px solid var(--prt-primary-text);
	outline-offset: 2px;
	border-color: var(--prt-primary-text);
}
/* Toolkit's price box hard-codes an orange tint and floats the two halves,
   which overlap when the price is wide. A plain row in the theme's colours. */
.prt .io_product_infobox .io_product_price_box {
	background: var(--prt-surface-alt) !important;
	border: 1.5px solid var(--prt-line) !important;
}
/* Never set display on the box itself: the platform shows one price tier and
   hides the others with display:none. */
.prt .io_product_infobox .io_product_price_box > p {
	float: none !important; width: auto !important;
	display: inline-block !important; vertical-align: baseline; margin: 0 .5em 0 0 !important;
}
.prt .io_product_infobox .io_button { box-shadow: none !important; }
.prt .io_product_infobox h2, .prt .io_product_infobox h3,
.prt .io_product_detailbox h2, .prt .io_product_detailbox h3 { color: var(--prt-ink) !important; }
.prt .io_product_infobox .io_product_price_box > p,
.prt .io_product_infobox .io_product_price_left,
.prt .io_product_infobox .io_product_price_right {
	max-width: none !important; min-width: 0 !important; flex: none !important; white-space: nowrap;
}
.prt .io_product_upsell .io_upsell_h3,
.prt .io_product_upsell .io_upsell_h3 * { color: var(--prt-ink) !important; text-shadow: none !important; }
/* The box is sized narrower than "$1,199.00 per day"; let it fit its content. */
.prt .io_product_infobox .io_product_price_box { width: fit-content !important; max-width: 100% !important; white-space: nowrap; column-gap: .45em; }
/* Round 19 (B#1): Firefox sizes the platform's two-column grid as one column inside fit-content, stacking "$199 / per day";
   two auto tracks give one row in every engine. */
.prt .io_product_infobox .io_product_price_box { grid-template-columns: auto auto !important; align-items: baseline !important; }
/* The platform's Elementor button widgets are sized to their text, so
   "Check Delivery" breaks onto two lines. Keep each on one line. */
.prt .io_product_infobox .elementor-widget-button { width: auto !important; max-width: 100%; }
.prt .io_product_infobox .elementor-button.io_button { white-space: nowrap !important; width: auto !important; }
.prt .io_product_infobox #checkDeliveryButton { margin-left: 0 !important; }
.prt .io_product_infobox > div:has(> .delivery_charge_check_container) { flex-wrap: wrap; gap: 12px; }
.prt .welcome-wrap, .prt .container-fluid.io { background: transparent !important; }
.prt .io_form [class*="_header "]::before { color: var(--prt-primary-text); }
.prt .io_sc_welcome, .prt .io_form { font-family: var(--prt-font-body) !important; color: var(--prt-ink); }
.prt .io_form .io_eventtime, .prt .io_form .io_inventory, .prt .io_form .io_customer, .prt .io_form .io_event {
	background: var(--prt-surface) !important;
	border: 1px solid var(--prt-line) !important;
	border-radius: var(--prt-radius) !important;
	box-shadow: var(--prt-shadow) !important;
	padding: 18px 22px !important;
	margin-bottom: 16px !important;
}
/* Section titles carry the icon font on their box; the words get the theme's. */
.prt .io_form [class*="_header "] { color: var(--prt-primary-text) !important; font-size: 1.15rem !important; }
.prt .io_form [class$="_header_text"], .prt .io_form .io_item_count {
	font-family: var(--prt-font-display) !important; font-weight: 700 !important; color: var(--prt-ink) !important; margin-left: .5em;
}
.prt .io_form .io_event_body_time_display_edit, .prt .io_form .io_event_body_time_display_edit a { color: var(--prt-primary-text) !important; }
.prt .io_form .accordion-group { border-color: var(--prt-line) !important; border-radius: var(--prt-radius-sm) !important; background: var(--prt-surface); margin-bottom: 10px !important; overflow: hidden; }
.prt .io_form .accordion-toggle { color: var(--prt-ink) !important; font-family: var(--prt-font-display); font-weight: 700; text-decoration: none !important; }
.prt .io_form .thumbnail { border-color: var(--prt-line) !important; border-radius: var(--prt-radius-sm) !important; background: var(--prt-surface); box-shadow: none !important; }
.prt .io_form .btn { border-radius: 999px !important; font-family: var(--prt-font-display) !important; font-weight: 700 !important; text-shadow: none !important; box-shadow: none !important; border: 0 !important; background-image: none !important; }
.prt .io_form .btn-success { background-color: var(--prt-cta-ground, var(--prt-cta)) !important; color: #fff !important; }
.prt .io_form .btn-success:hover { background-color: var(--prt-cta-hover, var(--prt-cta-ground, var(--prt-cta))) !important; }
.prt .io_form .io_grey_button { background-color: var(--prt-line) !important; color: var(--prt-ink) !important; }
.prt .io_form input[type="text"], .prt .io_form input[type="email"], .prt .io_form input[type="tel"], .prt .io_form select, .prt .io_form textarea {
	border-radius: var(--prt-radius-sm) !important; border: 1.5px solid var(--prt-ui-mark, var(--prt-line)) !important; box-shadow: none !important; font-family: var(--prt-font-body) !important;
}
/* ---------- category pages, as Toolkit dresses them ----------
   Toolkit styles the platform's category page for a dark photo banner: Lilita
   One headings with a glow, frosted glass boxes, Montserrat text. The themes
   put these on their own ground, in their own type. */
.prt .io_category_wrapper .catNameIO,
.prt .io_category_wrapper .catNameIO .io_forrent {
	font-family: var(--prt-font-display) !important; font-weight: 700 !important;
	text-shadow: none !important; letter-spacing: -.01em !important; animation: none !important;
}
.prt .io_category_wrapper .catNameIO .io_forrent { color: var(--prt-primary-text) !important; opacity: 1 !important; }
.prt .io_category_wrapper .catNameIO::after { box-shadow: none !important; background: var(--prt-accent) !important; height: 4px !important; width: 72px !important; }
.prt .cat_div_wrapper > .io_cat_description,
.prt .cat_div_wrapper > .io_cat_description p,
.prt .cat_div_wrapper > .io_cat_description span,
.prt .cat_div_wrapper > .io_cat_description li,
.prt .page-content > .io_landingpages, .prt .page-content > .io_landingpages p, .prt .page-content > .io_landingpages span,
.prt .page-content > .io_cat_longdescription, .prt .page-content > .io_cat_longdescription p,
.prt .page-content > .io_cat_longdescription span, .prt .page-content > .io_cat_longdescription li,
.prt .page-content > .io_cat_longdescription div {
	font-family: var(--prt-font-body) !important; text-shadow: none !important;
}
.prt .cat_div_wrapper > .io_cat_description {
	background: var(--prt-surface) !important; border: 1px solid var(--prt-line) !important;
	backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
	box-shadow: var(--prt-shadow) !important; border-radius: var(--prt-radius) !important;
}
/* A category with no description would show an empty box under its heading. */
.prt .cat_div_wrapper:has(> .io_cat_description:empty) { display: none !important; }
.prt .page-content > .io_landingpages .io_city_list, .prt .io_city_list { color: var(--prt-primary-text) !important; text-shadow: none !important; font-family: inherit !important; }
.prt .page-content > .io_cat_longdescription a { color: var(--prt-primary-text) !important; }
/* The category cards on the inventory page: whole lines of description, and
   every picture filling its frame. */
.io_item2_list .category_big_img, .io_item2_list .cat_img { object-fit: cover !important; }
.prt .io_item2_listcat {
	height: auto !important; min-height: 0 !important;
	background: var(--prt-surface) !important; border: 1px solid var(--prt-line) !important;
	border-radius: var(--prt-radius) !important; box-shadow: var(--prt-shadow) !important;
	overflow: hidden; transition: transform .25s ease;
}
.prt .io_item2_listcat:hover { transform: translateY(-4px); }
.prt .io_item2_listcat img { width: 100% !important; height: auto !important; aspect-ratio: 4 / 3; object-fit: cover !important; border-radius: 0 !important; margin: 0 !important; }
.prt .io_item2_listcat .cat_div_inner { height: auto !important; padding: 14px 18px 18px !important; }
.prt .io_item2_listcat .rentNameIO { font-family: var(--prt-font-display) !important; font-size: 1.15rem !important; font-weight: 700 !important; color: var(--prt-ink) !important; margin: 0 0 .35em !important; }
.prt .io_item2_listcat a { text-decoration: none !important; }
/* BookFlow's "Set Event Date" bar on category pages, as a theme button. */
.prt .pageDateRangeWrapper { margin: 8px auto 16px !important; text-align: center; }
.prt .pageDateRangeWrapper .elementor-button {
	border-radius: 999px !important; padding: .75em 1.8em !important; font-family: var(--prt-font-display) !important;
	font-weight: 700 !important; background: var(--prt-cta-ground, var(--prt-cta)) !important; color: #fff !important;
}
.prt .pageDateRangeWrapper .ioDateRange:empty { display: none; }
.prt .io_item2_listcat { padding: 0 !important; }
.prt .io_item2_listcat .cat_div { height: auto !important; display: block !important; padding: 0 !important; position: relative; background: var(--prt-surface-alt); }
/* The platform's hover button sits in the flow (invisible until hover) and
   pushed every picture down; float it over the picture instead. */
.prt .io_item2_listcat .view-product-button {
	position: absolute !important; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 2; margin: 0 !important;
	border-radius: 999px !important; background: var(--prt-primary-ground, var(--prt-primary)) !important; border: 0 !important; color: var(--prt-primary-ink) !important;
	font-family: var(--prt-font-display) !important; font-weight: 700 !important; text-shadow: none !important; box-shadow: var(--prt-shadow) !important;
	transition: opacity .2s ease;
}
.prt .io_item2_listcat:hover .view-product-button, .prt .io_item2_listcat a:focus-visible .view-product-button { opacity: 1 !important; }
/* The platform's forms can run a pixel or two wider than the page. */
.prt-io-page #main { overflow-x: hidden; overflow-x: clip; } /* hidden first for Safari < 16 (round 19, A#2) */
/* ---------- dark themes (prt-dark) ----------
   The platform and BookFlow assume a light page. On a dark theme the
   platform's own panels take the theme's dark surfaces and light text, and
   BookFlow's widgets stay white cards that set their own dark text (their
   text would otherwise inherit the theme's light colour). */
.prt-dark .io_form, .prt-dark .io_sc_welcome, .prt-dark .io_product_container, .prt-dark .io_product_detailbox { color: var(--prt-ink); }
.prt-dark .io_form :is(h1,h2,h3,h4,h5,h6,p,span,div,label,td,th,li,strong,b,small,a:not(.btn)) { color: inherit; }
.prt-dark .io_form .caption, .prt-dark .io_form .thumbnail { color: var(--prt-ink) !important; }
.prt-dark .io_form .accordion-group, .prt-dark .io_form .thumbnail { background: var(--prt-surface-alt) !important; }
.prt-dark .io_form .io_event_body_time_display_edit, .prt-dark .io_form .io_event_body_time_display_edit a { color: var(--prt-accent) !important; }
.prt-dark .io_brand, .prt-dark .hidden-print.io_brand { background: transparent !important; }
.prt-dark :is(.io_form, .io_product_container) :is(input:not([type=checkbox]):not([type=radio]), select, textarea) { background: #fff !important; color: #1e1660 !important; }
.prt-dark .io_product_infobox :is(h1,h2,h3,h4,p,span,div,li,b,strong) { color: inherit; }
.prt-dark .io_product_infobox .io_product_price_box { background: var(--prt-surface-alt) !important; }
.prt-dark .io_product_infobox .io_product_price_box * { color: var(--prt-ink) !important; }
.prt-dark .io_product_detailbox, .prt-dark .io_product_detailbox * { color: var(--prt-ink); }
.prt-dark .io_item2_list .rentNameIO, .prt-dark .io_item2_list .rentNameIO a, .prt-dark .rentNameIO_pricespan { color: var(--prt-ink) !important; }
.prt-dark .wdz-browse__card :is(h3,h4,p,span,b,strong) { color: inherit; }
/* body. — Toolkit colours several of these with equally specific !important rules. */
body.prt-dark .io_form [class*="_header "], body.prt-dark .io_form .io_event_body_time_display_text,
body.prt-dark .io_form p, body.prt-dark .io_form .rental-desc, body.prt-dark .io_product_infobox .io_product_desc, body.prt-dark .io_product_infobox .io_product_desc * { color: var(--prt-ink) !important; }
body.prt-dark .io_form .rental-desc, body.prt-dark .io_product_infobox .io_product_desc { opacity: .85; }
body.prt-dark .io_form [class*="_header "]::before { color: var(--prt-accent) !important; }
/* The platform fades long descriptions into white; on a dark card, into the card. */
body.prt-dark .io_form .read-more { background-image: linear-gradient(transparent, var(--prt-surface-alt)) !important; }
/* The platform forces #333 on every label and div in its forms (!important);
   on a dark theme they must be light. */
body.prt-dark .io_form :is(label, div, p, span, td, th, li, small, strong, b):not(.btn):not(.btn *) { color: var(--prt-ink) !important; }
body.prt-dark .io_form a:not(.btn) { color: var(--prt-accent) !important; }
body.prt-dark .io_city_list { color: var(--prt-accent) !important; }
.prt-dark .wdz-itemcal :is(p, small, span) { color: #4b4f7a; }
/* Words and small labels drawn in the brand colour use its readable variant
   (computed in bridge.php); buttons keep the design's colour. */
.prt .io_product_infobox :is(.io_product_dimensions_left,.io_product_footprint_left,.io_product_circuits_left,.io_product_price_left) { color: var(--prt-muted) !important; filter: none; }
.prt .wdz-itemcal__month, .prt .wdz-browse__card-price { color: var(--prt-primary-text) !important; }
body.prt-dark .wdz-itemcal__month, body.prt-dark .wdz-browse__card-price { color: #3b2a99 !important; }
/* IO list view: "More info" text, full-width rows on phones. */
.prt .io_item2_list .io_more_info_button { color: var(--prt-ink) !important; }
@media (max-width: 767px) {
	.prt .io_catdiv2.list-view { max-width: 100% !important; }
	.prt .io_catdiv2.list-view .io_item2_list { width: 100% !important; max-width: 100% !important; }
}
.prt .io_catdiv2.list-view :is(.io_detail_value, .io_detail_label) { color: var(--prt-ink) !important; }
.prt .io_catdiv2.list-view .io_detail_label { opacity: .75; }
/* Item page: the spec rows stay inside their card. */
.prt .io_product_infobox :is(.io_product_detail_box, .io_product_detailbox) { max-width: 100% !important; width: auto !important; box-sizing: border-box !important; margin-left: 0 !important; margin-right: 0 !important; }
.prt .io_product_infobox > * { max-width: 100%; box-sizing: border-box; }
/* Quote form: descriptions end on a whole line; the platform's grey strip goes. */
.prt .io_form .rental-desc { display: -webkit-box !important; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden !important; height: auto !important; max-height: none !important; }
.prt .io_brand, .prt .hidden-print.io_brand { background: transparent !important; }
.prt .io_form input[type="text"], .prt .io_form input[type="email"], .prt .io_form input[type="tel"] { min-height: 40px; }
/* Glow: BookFlow's browse heading sits on the dark page. */
body.prt-dark .wdz-browse__cat-title { color: var(--prt-ink) !important; }
/* Item page: Set Date and Check Delivery side by side, no gap between. */
/* (Never set display here: the platform hides fields it does not need, such
   as a banner's phrase input, with display:none on these same containers.) */
.prt .io_product_infobox :is(.delivery_charge_check_container, .elementor-widget-button) { margin-top: 8px !important; margin-bottom: 8px !important; }
.prt .io_product_infobox #checkDeliveryButton, .prt .io_product_infobox .item_add_set_date { margin: 0 !important; }
/* Check Delivery sits in a container that already has the 8px margin: no second one inside. */
.prt .io_product_infobox .delivery_charge_check_container .elementor-widget-button { margin-top: 0 !important; margin-bottom: 0 !important; }
/* "You might also be interested in" with nothing in it (the platform's
   carousel sometimes never fills): hide the empty block. Hiding only. */
.prt .io_product_upsell:not(:has(img)) { display: none !important; }
html body.prt-dark .wdz-browse .wdz-browse__cat-title{color:var(--prt-ink)!important}
/* Item page: the platform insets its container on phones; use the full width. */
@media (max-width:600px){.prt .io_product_container{margin-left:0!important;margin-right:0!important;padding-left:0!important;padding-right:0!important}}
/* Phones: the inventory grid always spans its column, and the platform's 250px
   minimum column can never overflow or squeeze it (themes' own !important columns win). */
@media (max-width: 599px) {
	.prt .io_catdiv2:not(.list-view) { width: 100% !important; max-width: 100% !important; margin-left: 0 !important; margin-right: 0 !important; grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 350px)); }
	.prt .io_catdiv2:not(.list-view) > .io_item2_listcat { min-width: 0; max-width: 100%; }
}
/* The inventory page's category grid: two across on tablets. */
@media (min-width: 600px) and (max-width: 1000px) {
	.prt .io_catdiv2:not(.list-view) { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; margin: 20px 0 !important; gap: 20px !important; }
}
/* ---------- round 22 (shared) ---------- */
/* The platform holds its item page at 80% width. */
.prt .io_product_container { width: 100% !important; max-width: 100% !important; }
/* Mid widths: the availability calendar takes a full row instead of a lonely column. */
@media (max-width: 1100px) { .prt .wdz-itemcal-row > .wdz-itemcal, .prt #wdz-itemcal { flex-basis: 100% !important; max-width: 100% !important; } }
/* Description sits on the card, not on a grey panel. */
.prt .io_product_infobox .io_product_desc { background: transparent !important; border-top: 0 !important; }
/* Quote form: descriptions end on a whole line. */
.prt .io_form .rental-desc { line-height: 1.4 !important; max-height: calc(3 * 1.4em) !important; }
.prt .io_form .accordion-toggle { display: flex !important; align-items: center; gap: 12px; }
.prt .io_brand { padding-bottom: 24px !important; }
/* ---------- round 21 (shared) ---------- */
/* The description block: on the card, with room to breathe. */
.prt .io_product_infobox .io_product_detailbox { background: transparent !important; border-top: 1px solid var(--prt-line) !important; padding: 18px 0 0 !important; }
/* Category long description: a readable measure wherever the theme wraps it. */
.prt .io_cat_longdescription { max-width: 60ch; margin-left: auto !important; margin-right: auto !important; }
.prt .io_cat_longdescription p { margin: 0 0 1em; }
/* BookFlow's browse cards in the theme's voice. */
.prt .wdz-browse__card { border-radius: var(--prt-radius) !important; border: 1px solid var(--prt-line) !important; box-shadow: var(--prt-shadow) !important; overflow: hidden; }
.prt .wdz-browse__card :is(h3, h4, .wdz-browse__card-title, .wdz-browse__card-name) { font-family: var(--prt-font-display) !important; font-weight: 700 !important; }
.prt .wdz-browse__card-price { font-weight: 800 !important; }
.prt .wdz-browse__add { background: var(--prt-cta-ground, var(--prt-cta)) !important; color: #fff !important; border-radius: 999px !important; font-family: var(--prt-font-display) !important; font-weight: 700 !important; }
/* Quote form product pictures: one shape. */
.prt .io_form .thumbnail img { aspect-ratio: 4 / 3; object-fit: cover; width: 100%; height: auto; }
.prt .io_product_infobox :is(.elementor-widget-button, .delivery_charge_check_container) { vertical-align: middle !important; }
/* ---------- round 24 (shared) ---------- */
/* List view replaces the card grid instead of adding to it. */
body:has(.io_catdiv2.list-view) .wdz-browse { display: none !important; }
.prt .io_catdiv2.list-view .io_item2_list img { object-fit: cover !important; height: 100% !important; }
/* The platform's grid/list switch. */
.prt .io_view_toggle_btn { border-radius: 8px !important; border: 1px solid var(--prt-line) !important; }
body.prt-dark .io_view_toggle_btn:not(.active) { background: rgba(255,255,255,.08) !important; color: var(--prt-ink) !important; }
/* Category text: regular weight, a readable measure. */
.prt :is(.io_cat_longdescription, .io_landingpages, .io_landingpages p) { font-weight: 400 !important; line-height: 1.7 !important; }
body.prt-dark :is(.io_cat_longdescription, .io_cat_longdescription *, .io_landingpages, .io_landingpages p) { color: var(--prt-muted) !important; }
/* Inventory page: an unfinished last row sits centred. */
.prt .io_catdiv2:not(.list-view) { justify-content: center !important; }
/* Mid widths: the item calendar keeps a sensible size. */
@media (max-width: 1100px) { .prt .wdz-itemcal { max-width: 560px !important; margin-left: auto !important; margin-right: auto !important; } }
/* Quote form fields use the width they are given. */
.prt .io_form .input-large { width: 100% !important; max-width: 100% !important; box-sizing: border-box; }
/* List view is centred on phones. */
@media (max-width: 600px) { .prt .io_catdiv2.list-view, .prt .io_catdiv2.list-view .io_item2_list { margin-left: 0 !important; width: 100% !important; } }
/* ---------- rounds 34/35 (shared): tablets and phones ---------- */
/* BookFlow's product row: two cards across on a portrait tablet, not one and a sliver. */
@media (min-width: 600px) and (max-width: 768px) { body.prt .wdz-browse__row { grid-auto-columns: calc(50% - 11px) !important; } }
/* Product page: no dead band between the breadcrumb and the photo. */
.prt .io_product_container { margin-top: 0 !important; padding-top: 8px !important; }
/* ---------- polish round (shared), 2026-10-02 ---------- */
/* Category card text: the platform's own min-height and flow-root display
   defeated the line clamp, so a half-cut line showed under the description. */
.prt .io_item2_listcat .catDescriptionIO_small { display: -webkit-box !important; min-height: 0 !important; }
/* Tablets: the calendar's day cells stay a sensible height instead of
   stretching to the column width (they were about 100px tall at 820px). */
@media (max-width: 1100px) { body.prt .wdz-itemcal .wdz-itemcal__cell { aspect-ratio: auto !important; height: 52px !important; } }
/* Phones: BookFlow's floating category button covered the calendar's Saturday
   column and the Add to Cart buttons on item pages, where it isn't needed. */
@media (max-width: 768px) { body.prt:has(.wdz-itemcal) .wdz-browse-fab { display: none !important; } }
/* The platform pins the product photo (position:sticky; top:10px) at every
   width; the item page layout below takes it out of that. */
@media (max-width: 1100px) { .prt .io_product_picbox { position: static !important; } }
/* BookFlow's weekday letters (#9aa3b2 at 9-10px) were too faint on light themes. */
body.prt:not(.prt-dark) .wdz-itemcal__wd span { color: #5f6878 !important; }
/* Desktop item page: the details column starts level with the photo and calendar. */
@media (min-width: 1101px) { .prt .io_product_infobox { margin-top: 0 !important; } }
/* Phones: room under the calendar, so its last row can scroll clear of the chat button. */
@media (max-width: 768px) { .prt .wdz-itemcal-row { padding-bottom: 64px !important; } }
/* =====================================================================
   Rental pages, client feedback 2026-10-02
   ===================================================================== */

/* ---------- item page: photo | details | calendar, then description, then related ----------
   .prt-item and the description/related sections come from core/inc/item-page.php.
   One column up to 1100px; three columns of one height above it. */
html body.prt .prt-item > .simpleCart_ioShelfItem {
	display: grid !important; grid-template-columns: minmax(0, 1fr); gap: 22px !important;
	align-items: start !important; width: 100% !important; max-width: none !important;
	margin: 0 !important; padding: 0 !important; float: none !important;
}
/* Kept low (0,2,1) so a theme can resize these boxes with an ordinary selector,
   e.g. body.prt .prt-item .io_product_infobox. The platform sets no !important widths here. */
body.prt :where(.prt-item > .simpleCart_ioShelfItem) > :is(.io_product_picbox, .io_product_infobox) {
	width: auto !important; max-width: none !important; min-width: 0 !important; flex: none !important;
	float: none !important; margin: 0 !important; position: relative !important; top: auto !important; box-sizing: border-box;
}
html body.prt .prt-item > .simpleCart_ioShelfItem > #wdz-itemcal {
	width: 100% !important; max-width: 560px !important; min-width: 0 !important; flex: none !important;
	margin: 0 auto !important; position: relative !important; top: auto !important; padding: 0 !important;
}
html body.prt .prt-item .io_product_picbox > br { display: none; }
html body.prt .prt-item .io_product_picbox #io_media_thumbbox { margin-top: 12px !important; }
/* The photo frame: the whole picture always shows; the frame around it takes
   a soft, blurred copy of the same photo (--prt-photo, set server side and
   kept in step with the gallery) instead of an empty band. */
html body.prt .prt-item #io_main_media_container {
	position: relative !important; overflow: hidden !important; isolation: isolate;
	width: 100% !important; aspect-ratio: 4 / 3; max-height: 540px; box-sizing: border-box;
	background: var(--prt-surface-alt) !important; border-radius: var(--prt-radius) !important;
}
html body.prt .prt-item #io_main_media_container::before {
	content: ""; position: absolute; inset: -40px; z-index: -1; pointer-events: none;
	background: var(--prt-photo, none) center / cover no-repeat; filter: blur(28px) saturate(1.15); opacity: .55;
}
html body.prt .prt-item #io_main_media_container > a#single_image {
	position: absolute; inset: 0; display: flex !important; align-items: center; justify-content: center;
}
html body.prt .prt-item #io_main_media_container .io_image_big {
	width: 100% !important; height: 100% !important; max-width: none !important; max-height: none !important;
	object-fit: contain !important; background: transparent !important; border-radius: 0 !important; box-shadow: none !important; margin: 0 !important;
}
@media (min-width: 1101px) {
	html body.prt .prt-item > .simpleCart_ioShelfItem {
		grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 26px !important; align-items: stretch !important;
	}
	/* BookFlow's calendar is printed in the footer and moved into the row by
	   its script; the third column is held for it from the first paint. */
	html body.prt:has(#wdz-itemcal[data-position="beside"]) .prt-item > .simpleCart_ioShelfItem,
	html body.prt.prt-itemcal-beside .prt-item > .simpleCart_ioShelfItem {
		grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(320px, 360px);
	}
	html body.prt .prt-item > .simpleCart_ioShelfItem > .io_product_picbox { grid-column: 1; grid-row: 1; display: flex !important; flex-direction: column; }
	html body.prt .prt-item > .simpleCart_ioShelfItem > .io_product_infobox { grid-column: 2; grid-row: 1; display: flex !important; flex-direction: column; }
	html body.prt .prt-item > .simpleCart_ioShelfItem > #wdz-itemcal { grid-column: 3; grid-row: 1; max-width: none !important; margin: 0 !important; }
	html body.prt .prt-item > .simpleCart_ioShelfItem > #wdz-itemcal :is(.wdz-itemcal__inner, .wdz-itemcal__card) { height: 100%; box-sizing: border-box; }
	/* The photo grows to the row's height; the specs follow the buttons directly. */
	html body.prt .prt-item #io_main_media_container { flex: 1 1 auto; aspect-ratio: auto; min-height: 320px; max-height: none; }
	html body.prt .prt-item .io_product_infobox > div:has(> div > .elementor-widget-button) { margin-bottom: 18px !important; }
	/* The details column is the narrowest of the three: a title that fits it. */
	html body.prt .prt-item .io_product_title { font-size: clamp(1.5rem, 2vw, 1.9rem) !important; }
}
/* The price and its unit ("$199.00 per day") never run together. */
html body.prt .prt-item .io_product_infobox .io_product_price_box > p + p { margin-left: .45em !important; }
@media (max-width: 600px) {
	html body.prt .prt-item > .simpleCart_ioShelfItem { gap: 16px !important; }
}
/* The description, full width under the first row. */
html body.prt .prt-item-desc {
	margin: clamp(24px, 3.5vw, 36px) 0 0; padding: clamp(20px, 3.4vw, 40px);
	background: var(--prt-surface); border: 1px solid var(--prt-line); border-radius: var(--prt-radius); box-shadow: var(--prt-shadow);
	color: var(--prt-ink); box-sizing: border-box;
}
html body.prt .prt-item-desc__title {
	font-family: var(--prt-font-display) !important; font-size: clamp(1.3rem, 2.2vw, 1.75rem) !important; line-height: 1.15 !important;
	margin: 0 0 .7em !important; color: var(--prt-ink) !important; text-align: left !important;
}
html body.prt .prt-item-desc .io_product_desc {
	font-family: var(--prt-font-body); font-size: 1.02rem; font-weight: 400; line-height: 1.75; color: var(--prt-ink);
	background: transparent !important; border: 0 !important; padding: 0 !important; margin: 0 !important;
	max-height: none !important; height: auto !important; overflow: visible !important;
}
html body.prt .prt-item-desc .io_product_desc > :last-child { margin-bottom: 0; }
@media (min-width: 900px) {
	html body.prt .prt-item-desc.is-long .io_product_desc { column-count: 2; column-gap: clamp(32px, 4vw, 56px); }
}
/* Related rentals: the platform's own upsell carousel steps aside for them. */
html body.prt .prt-item.has-prt-rel .io_product_upsell { display: none !important; }
html body.prt .prt-rel { margin: clamp(36px, 5vw, 60px) 0 8px; }
html body.prt .prt-rel__head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 24px; margin-bottom: 18px; }
html body.prt .prt-rel__title {
	font-family: var(--prt-font-display) !important; font-size: clamp(1.4rem, 2.4vw, 2rem) !important; line-height: 1.15 !important;
	margin: 0 !important; color: var(--prt-ink) !important; text-align: left !important;
}
html body.prt .prt-rel__all { display: inline-flex; align-items: center; gap: .4em; font-weight: 700; color: var(--prt-primary-text) !important; text-decoration: none !important; }
html body.prt .prt-rel__all .ic { width: 1.1em; height: 1.1em; }
html body.prt .prt-rel__grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 22px; }
html body.prt .prt-rel__card {
	display: flex; flex-direction: column; overflow: hidden; text-decoration: none !important; color: var(--prt-ink) !important;
	background: var(--prt-surface); border: 1px solid var(--prt-line); border-radius: var(--prt-radius); box-shadow: var(--prt-shadow);
	transition: transform .25s ease, box-shadow .25s ease;
}
html body.prt .prt-rel__card:hover { transform: translateY(-4px); }
html body.prt .prt-rel__card:focus-visible { outline: 3px solid var(--prt-primary-text); outline-offset: 3px; }
html body.prt .prt-rel__img { display: block; aspect-ratio: 4 / 3; overflow: hidden; background: var(--prt-surface-alt); }
html body.prt .prt-rel__img img { display: block; width: 100%; height: 100%; object-fit: cover; margin: 0; border-radius: 0; transition: transform .5s ease; }
html body.prt .prt-rel__card:hover .prt-rel__img img { transform: scale(1.04); }
html body.prt .prt-rel__body { flex: 1; display: flex; flex-direction: column; gap: 6px; padding: 14px 16px 16px; }
html body.prt .prt-rel__name {
	font-family: var(--prt-font-display); font-weight: 700; font-size: 1.05rem; line-height: 1.3; color: var(--prt-ink);
	display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; min-height: 2.6em;
}
html body.prt .prt-rel__price { font-weight: 800; color: var(--prt-ink); }
html body.prt .prt-rel__more { margin-top: auto; padding-top: 6px; display: inline-flex; align-items: center; gap: .4em; font-weight: 700; font-size: .92rem; color: var(--prt-primary-text); }
html body.prt .prt-rel__more .ic { width: 1em; height: 1em; transition: transform .2s ease; }
html body.prt .prt-rel__card:hover .prt-rel__more .ic { transform: translateX(3px); }
@media (max-width: 1000px) { html body.prt .prt-rel__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } }
@media (max-width: 420px) {
	html body.prt .prt-rel__grid { gap: 12px; }
	html body.prt .prt-rel__body { padding: 12px 12px 14px; }
	html body.prt .prt-rel__name { font-size: .98rem; }
}
@media (prefers-reduced-motion: reduce) {
	html body.prt .prt-rel__card, html body.prt .prt-rel__img img, html body.prt .prt-rel__more .ic { transition: none; transform: none !important; }
}
/* ---------- category pages: cards line up ---------- */
/* Grid view (BookFlow's cards): every name takes two lines, so the prices and
   the buttons of a row sit on the same lines; the buttons keep to the foot. */
html body.prt .wdz-browse .wdz-browse__row { align-items: stretch !important; }
html body.prt .wdz-browse .wdz-browse__card-name {
	line-height: 1.3 !important; min-height: 2.6em; display: -webkit-box !important; -webkit-box-orient: vertical;
	-webkit-line-clamp: 2; line-clamp: 2; overflow: hidden;
}
html body.prt .wdz-browse .wdz-browse__card-actions { margin-top: auto !important; }
/* List view (the platform's rows): one width, a fixed picture column the full
   height of the row, and name, price, details and buttons on the same lines. */
html body.prt .io_catdiv2.list-view {
	display: flex !important; flex-direction: column; gap: 18px; width: 100% !important; max-width: 1000px !important;
	margin: 24px auto !important; padding: 0 !important;
}
html body.prt .io_catdiv2.list-view .io_item2_list {
	display: grid !important; grid-template-columns: 250px minmax(0, 1fr); align-items: stretch !important;
	width: 100% !important; max-width: none !important; min-height: 210px; margin: 0 !important; padding: 0 !important; text-align: left !important; box-sizing: border-box;
}
html body.prt .io_catdiv2.list-view .io_item2_list .cat_div {
	position: relative !important; width: auto !important; max-width: none !important; height: auto !important; min-height: 100%;
	margin: 0 !important; padding: 0 !important; flex: none !important; overflow: hidden !important; border-radius: 0 !important;
}
html body.prt .io_catdiv2.list-view .io_item2_list .cat_div > :is(br, .io_category_thumbox) { display: none !important; }
html body.prt .io_catdiv2.list-view .io_item2_list .cat_div > a:not([id]) { position: absolute; inset: 0; display: block; }
html body.prt .io_catdiv2.list-view .io_item2_list .cat_div img.cat_img {
	position: absolute; inset: 0; width: 100% !important; height: 100% !important; max-height: none !important; aspect-ratio: auto;
	object-fit: cover !important; margin: 0 !important;
}
html body.prt .io_catdiv2.list-view .io_item2_list_inner {
	display: flex !important; flex-direction: column; justify-content: flex-start !important; gap: 0;
	min-height: 0 !important; height: auto !important; padding: 18px 22px 20px !important; margin: 0 !important;
}
html body.prt .io_catdiv2.list-view .rentNameIO { margin: 0 0 4px !important; font-size: 1.2rem !important; text-align: left !important; }
html body.prt .io_catdiv2.list-view .rentNameIO_price { margin: 0 0 10px !important; text-align: left !important; }
html body.prt .io_catdiv2.list-view .io_list_view_content { flex: 1 1 auto; height: auto !important; margin: 0 !important; justify-content: flex-start !important; }
html body.prt .io_catdiv2.list-view .io_item_details_labeled { margin: 0 !important; flex: none; }
html body.prt .io_catdiv2.list-view .io_buttons_container { margin-top: auto !important; padding-top: 14px; justify-content: flex-start !important; }
html body.prt .io_catdiv2.list-view .unavailable_message {
	margin-top: 8px; font-size: .85rem; color: var(--prt-muted) !important; text-align: left !important; text-decoration: underline; cursor: pointer;
}
/* Beside the buttons, not under them, so a row with the note is no taller than the rest. */
@media (min-width: 641px) {
	html body.prt .io_catdiv2.list-view .io_item2_list_inner { position: relative; }
	html body.prt .io_catdiv2.list-view .unavailable_message { position: absolute; right: 22px; bottom: 30px; margin: 0; max-width: 40%; }
}
@media (max-width: 640px) {
	html body.prt .io_catdiv2.list-view .io_item2_list { grid-template-columns: minmax(0, 1fr); min-height: 0; }
	html body.prt .io_catdiv2.list-view .io_item2_list .cat_div { aspect-ratio: 16 / 10; min-height: 0; }
	html body.prt .io_catdiv2.list-view .io_item2_list_inner { padding: 16px 18px 18px !important; }
}
/* ---------- item page photo, round 3 (2026-10-06) ----------
   Default: the photo at its own shape, uncropped, top-aligned, no blurred
   fill; thumbnails below. A theme that wants the photo stretched to the row's
   height over a blurred copy sets the token item_photo => 'fill' (body class
   prt-photo-fill), which keeps the rules above. */
html body.prt:not(.prt-photo-fill) .prt-item #io_main_media_container {
	aspect-ratio: auto !important; height: auto !important; min-height: 0 !important; max-height: none !important;
	flex: none !important; background: transparent !important;
}
html body.prt:not(.prt-photo-fill) .prt-item #io_main_media_container::before { content: none; display: none; }
html body.prt:not(.prt-photo-fill) .prt-item #io_main_media_container > a#single_image { position: static; display: block !important; }
html body.prt:not(.prt-photo-fill) .prt-item #io_main_media_container .io_image_big {
	display: block; width: 100% !important; height: auto !important; object-fit: contain !important;
	/* Holds a 4:3 box (the platform's photo shape) until the picture arrives, then its own shape:
	   the details and calendar no longer jump down when it loads (round 7, CLS). */
	aspect-ratio: auto 4 / 3;
}
@media (min-width: 1101px) {
	html body.prt:not(.prt-photo-fill) .prt-item > .simpleCart_ioShelfItem > .io_product_picbox { align-self: start; }
}
/* The spec rows (circuits, dimensions…) carry a fixed width from the platform
   that is wider than the details column at three columns: fit the column. */
html body.prt .prt-item .io_product_infobox .io_product_detail_box { width: auto !important; min-width: 0 !important; max-width: 100% !important; box-sizing: border-box !important; }
/* One column (tablet/phone): the photo keeps a sensible size instead of being
   blown up past the platform's 750px image. */
@media (max-width: 1100px) {
	body.prt:not(.prt-photo-fill) :where(.prt-item > .simpleCart_ioShelfItem) > .io_product_picbox { width: 100% !important; max-width: 720px !important; justify-self: center; }
}
/* Spec values (20'x20'x10') never split mid-measurement; the label wraps instead. */
html body.prt .io_product_infobox .io_product_detail_box { display: flex !important; }
.prt .io_product_infobox .io_product_detail_box { justify-content: space-between; column-gap: 12px; }
html body.prt .io_product_infobox .io_product_detail_box > [class$="_left"] { flex: 1 1 auto; min-width: 0; float: none !important; width: auto !important; }
html body.prt .io_product_infobox .io_product_detail_box > [class$="_right"] { flex: 0 0 auto; white-space: nowrap !important; float: none !important; width: auto !important; text-align: right; }
/* Item page: the delivery line lines up with the photo, the about box and the related grid (IO indents it 20px). */
.prt .io_product_container > .io_landingpages { margin-left: 0 !important; margin-right: 0 !important; padding-left: 0 !important; padding-right: 0 !important; }
/* The platform pads the photo column 10px, so the photo sat inside the page grid; line it up
   with the breadcrumb, description and related grid. Low weight: a theme that frames the photo
   can put padding back with an ordinary !important rule. */
body.prt:not(.prt-photo-fill) :where(.prt-item > .simpleCart_ioShelfItem) > .io_product_picbox { padding: 0 !important; }
@media (max-width: 760px), (pointer: coarse) {
.prt .io_product_infobox :is(#checkDeliveryButton, #bookNowBtn, .item_add_set_date) { min-height: 44px; }
body.prt .wdz-itemcal .wdz-itemcal__nav { width: 44px !important; height: 44px !important; min-width: 44px !important; }
body.prt .io_view_toggle_btn { min-width: 44px !important; min-height: 44px !important; }
.prt .pageDateRangeWrapper .elementor-button { min-height: 44px; display: inline-flex !important; align-items: center; justify-content: center; }
html body.prt .prt-rel__all { display: inline-flex; align-items: center; min-height: 44px; }
body.prt .wdz-itemcal__wd span { font-size: 11px !important; }
body.prt .wdz-itemcal__legend span { font-size: 12px !important; }
body.prt .wdz-itemcal__sub { font-size: 14px !important; }
}
/* ---------- tablets, polish round 3 (2026-10-07) ---------- */
/* Landscape tablets (861–1100px): photo and details side by side instead of a
   centred photo over a details card stretched across the page; the calendar
   keeps its own row under them. */
@media (min-width: 861px) and (max-width: 1100px) {
	html body.prt .prt-item > .simpleCart_ioShelfItem { grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); gap: 24px !important; }
	html body.prt .prt-item > .simpleCart_ioShelfItem > .io_product_picbox { grid-column: 1; grid-row: 1; }
	html body.prt .prt-item > .simpleCart_ioShelfItem > .io_product_infobox { grid-column: 2; grid-row: 1; }
	html body.prt .prt-item > .simpleCart_ioShelfItem > #wdz-itemcal { grid-column: 1 / -1; }
	body.prt:not(.prt-photo-fill) :where(.prt-item > .simpleCart_ioShelfItem) > .io_product_picbox { max-width: none !important; justify-self: stretch; }
}
/* ---------- polish round 4: keyboard focus ---------- */
/* Item page: Set Date / Check Delivery / Add to Cart and BookFlow's calendar showed a white or
   pale-yellow ring on the white card. They take the readable brand colour (Glow's calendar card is
   dark, so its light brand colour). */
html body.prt .io_product_infobox :is(.elementor-button, .io_button, #checkDeliveryButton):focus-visible,
html body.prt .wdz-itemcal :is(button, a, [tabindex="0"]):focus-visible { outline: 3px solid var(--prt-primary-text) !important; outline-offset: 2px !important; }
/* ---------- polish round 5 (R4 A#1): rings the platform's wrappers cut off ---------- */
/* The grid/list switch, BookFlow's qty stepper and the category card link sit inside rounded
   overflow:hidden boxes that cut a ring drawn outside them; draw those rings inside instead. */
html body.prt :is(.io_view_toggle_btn, .wdz-browse__qty :is(button, input), .io_item2_listcat a):focus-visible { outline-offset: -3px !important; }
/* Card names clamp to two lines on the <p>, which cut the link's ring: clamp on the link instead
   (an element never clips its own outline). */
html body.prt .wdz-browse .wdz-browse__card-name { display: block !important; overflow: visible; }
html body.prt .wdz-browse .wdz-browse__card-name > a { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }
/* IO category tile: the name/description link is inline around block children, so its ring had no
   box to draw (R6 A#1). The photo link's inset ring sank into the photo and the same-colour
   "View Products" pill (R6 A#2): a white band edged in near-black holds on any picture. */
.prt .io_item2_listcat .cat_div_inner > a { display: block; padding: 6px 8px; margin: -6px -8px; }
 /* room for the inset ring: it touched the name */
html body.prt .io_item2_listcat > a:focus-visible { outline: 0 !important; }
.prt .io_item2_listcat > a:focus-visible .cat_div::after { content: ""; position: absolute; inset: 0; z-index: 3; pointer-events: none; box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 6px #14161f; }
/* BookFlow's item calendar: the empty-panel prompt and "Prefer to talk?" are #6b7280 on its tinted
   panel (4.3–4.4:1) and the phone link is the raw brand colour (2.2:1 for Splash's cyan, Confetti's
   mint). Text a step toward the theme's ink; the link in the readable brand colour, deepened likewise. */
html body.prt .wdz-itemcal :is(.wdz-itemcal__pprompt, .wdz-itemcal__pcall) { color: var(--prt-ink) !important; }
html body.prt .wdz-itemcal .wdz-itemcal__pcall a { color: var(--prt-primary-text) !important; }
@supports (color: color-mix(in srgb, red 50%, blue)) { html body.prt .wdz-itemcal :is(.wdz-itemcal__pprompt, .wdz-itemcal__pcall) { color: color-mix(in srgb, var(--prt-ink) 55%, var(--prt-muted)) !important; }
html body.prt .wdz-itemcal .wdz-itemcal__pcall a { color: color-mix(in srgb, var(--prt-primary-text) 75%, var(--prt-ink)) !important; } }
/* BookFlow's category arrows on the browse grid: brand-colour glyphs (2.1–2.4:1 in Splash/Glow/Confetti). */
html body.prt:not(.prt-dark) .wdz-browse .wdz-browse__arrow { color: var(--prt-primary-text) !important; }
/* Dark themes: BookFlow's panels stay light, where the light brand text would vanish; the panel's own text colour. */
html body.prt.prt-dark .wdz-browse .wdz-browse__arrow { color: inherit !important; }
/* Item page photo link: its ring was cut by the photo frame's overflow (0 pixels changed, R6 A#5).
   Same white-and-near-black band, drawn inside the photo. */
:where(#io_main_media_container > #single_image) { position: relative; display: block; }
html body.prt #io_main_media_container > #single_image:focus-visible { outline: 0 !important; }
html body.prt #io_main_media_container > #single_image:focus-visible::after { content: ""; position: absolute; inset: 0; z-index: 3; pointer-events: none; border-radius: inherit; box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 6px #14161f; }
/* The grid/list switch: on the active (brand-filled) button the inset ring was ink on the fill (2.4–2.9:1, R6 B#7) or white
   on the white frame (Confetti, C#3). Same white band edged near-black as the photo links, inside the button. */
html body.prt .io_view_toggle_btn.active:focus-visible { outline: 0 !important; box-shadow: inset 0 0 0 2px #fff, inset 0 0 0 4px #14161f !important; }
/* ---------- polish round 7: performance ---------- */
/* Item page thumbnails: the platform caps them at 75px tall but gives them no size until they load,
   so the row under the photo grew from 4px to 75px as they arrived (layout shift). */
html body.prt .prt-item .io_image_thumbbox .io_image_thumb { height: 75px; width: auto; aspect-ratio: auto 4 / 3; }
/* Category pages: the platform's grid/list switch is shown by its script after the first paint (55px push-down of
   the whole grid, CLS 0.14 at 1440); core knows the page is a category (body class prt-io-cat) and shows it at once. */
html body.prt.prt-io-cat .io_view_toggle_container { display: flex !important; }
/* Item page: once a date is set the platform's Add to Cart becomes #bookNowBtn, which it gives a 50px top
   margin: an empty band opened under the price (C#1). */
html body.prt .io_product_infobox #bookNowBtn { margin-top: 0 !important; }
/* BookFlow's item calendar: "Prefer to talk? (phone)" link was a 20px tap target (A#5). */
@media (max-width: 760px), (pointer: coarse) {
	html body.prt .wdz-itemcal .wdz-itemcal__pcall a { display: inline-flex; align-items: center; min-height: 44px; }
}
html body.prt:not(.prt-dark) .wdz-itemcal .wdz-itemcal__price span { color: #5d6672 !important; }
/* Category list view: the platform's Add to Cart gave no sign it had worked apart from the header count (round 8).
   A tick for a moment after the cart grows (core/inc/item-page.php; the add is also announced). */
.prt .io_catdiv2 a.item_add.prt-just-added::after { content: "\2713"; content: "\2713" / ""; margin-left: .45em; font-weight: 800; }

/* Polish round 9 (typography). BookFlow's item calendar printed its weekday letters at 9.6px and its
   legend at 11.5px on desktops (the phone sizes from round 2 now apply everywhere). The platform
   separates the paragraphs of a category's long text with <br> only, so they ran together: each
   break now gets a paragraph's gap (prt-slider.js adds an empty .prt-br-gap after it). Its short description box ran 100 characters a line,
   centred; it is held to a readable width. */
body.prt .wdz-itemcal__wd span { font-size: 11px !important; }
body.prt .wdz-itemcal__legend span { font-size: 12px !important; }
.prt .io_cat_longdescription .prt-br-gap { display: block; height: .85em; }
.prt .cat_div_wrapper > .io_cat_description { max-width: 44rem !important; margin-left: auto !important; margin-right: auto !important; box-sizing: border-box; }
/* Requests round 9: "View Products" is capitals and needs a little tracking (A#2, C#2); the inventory
   page's intro paragraph is held to a readable measure (A#3, C#1). A theme's 'display_weight' token
   also sets the rental's title weight (A#5; printed with the tokens in core/inc/bridge.php). */
.prt .io_item2_listcat .view-product-button { letter-spacing: .05em !important; }
.prt-io-page .prt-page__body > center > p { max-width: 64ch; margin-left: auto; margin-right: auto; }
/* ---------- polish round 10: imagery ---------- */
/* Item page: a rental with one photo got one thumbnail under it repeating the main photo (A#3). The row only
   shows when there is a second picture to switch to. */
html body.prt .prt-item .io_image_thumbbox:not(:has(> .io_image_thumb ~ .io_image_thumb)) { display: none !important; }

/* Motion & states (polish round 11).
   - (The `transition: all` fix for the platform's buttons is in prt-io.css: its cart panel is on every page.)
   - Hover on the controls that showed none: "All Bounce Houses", BookFlow's qty buttons and card names, the
     grid/list switch, "Set Event Date". */
html body.prt .prt-rel__all:hover { text-decoration: underline !important; text-underline-offset: 3px; }
html body.prt .prt-rel__all .ic { transition: transform .2s ease; }
html body.prt .prt-rel__all:hover .ic { transform: translateX(3px); }
html body.prt .wdz-browse__qty button:not(:disabled):hover { background: var(--prt-surface-alt) !important; color: var(--prt-primary-text) !important; }
html body.prt .wdz-browse .wdz-browse__card-name > a:hover { color: var(--prt-primary-text) !important; text-decoration: underline; text-underline-offset: 3px; }
html body.prt .io_view_toggle_btn:not(.active):hover { border-color: var(--prt-primary-text) !important; color: var(--prt-primary-text) !important; }
html body.prt .wdz-itemcal .wdz-itemcal__pcall a:hover { text-decoration: underline; text-underline-offset: 3px; }
.prt .pageDateRangeWrapper .elementor-button:hover { background-color: var(--prt-cta-hover, var(--prt-cta-ground, var(--prt-cta))) !important; }
@media (prefers-reduced-motion: reduce) { html body.prt .prt-rel__all .ic { transition: none; } html body.prt .prt-rel__all:hover .ic { transform: none; } }

/* Category pages: products first (1.2.23). The platform prints the category intro (WDZ Toolkit's
   "About our …" heading + description) above the item grid, which on a phone put the first
   Add to Cart a screen and a half down. Order: items, then the intro, then the area text and
   the long description. Pages without a grid keep their source order. */
.prt-io-cat .prt-page__body:has(> :is(.io_catdiv2, #wdz-browse)) { display: flex; flex-direction: column; }
.prt-io-cat .prt-page__body:has(> :is(.io_catdiv2, #wdz-browse)) > .cat_div_wrapper { order: 1; margin-top: 12px; }
.prt-io-cat .prt-page__body:has(> :is(.io_catdiv2, #wdz-browse)) > .io_landingpages { order: 2; }
.prt-io-cat .prt-page__body:has(> :is(.io_catdiv2, #wdz-browse)) > .io_cat_longdescription { order: 3; }
/* BookFlow's cards replace the platform grid: the emptied grid keeps no spacing (flex margins don't
   collapse), and its tile/list switch does nothing there. */
.prt-io-cat .prt-page__body:has(> #wdz-browse:not([hidden])) > .io_catdiv2 { margin-top: 0 !important; margin-bottom: 0 !important; }
html body.prt.prt-io-cat .prt-page__body:has(> #wdz-browse:not([hidden])) > .io_view_toggle_container { display: none !important; }

/* 1.2.24 — item page with the booking calendar: two columns instead of three narrow ones.
   Left: photo, then the details as a card under it (price + "Pick a date to book", specs as a
   strip of tiles). Right: the calendar, sticky. Doubled classes beat every theme's own
   three-column grid (they all use `html body.prt .prt-item>.simpleCart_ioShelfItem...`). */
@media (min-width: 1101px) {
	html body.prt.prt .prt-item > .simpleCart_ioShelfItem.wdz-itemcal-row.wdz-itemcal-row {
		display: grid !important;
		grid-template-columns: minmax(0, 1fr) minmax(380px, 440px) !important;
		grid-template-areas: "pic cal" "info cal" !important;
		grid-template-rows: auto 1fr !important;
		column-gap: 36px !important; row-gap: 20px !important;
		align-items: start !important;
	}
	html body.prt.prt .wdz-itemcal-row.wdz-itemcal-row > .io_product_picbox { grid-area: pic !important; width: auto !important; max-width: none !important; margin: 0 !important; }
	html body.prt.prt .wdz-itemcal-row.wdz-itemcal-row > .io_product_infobox {
		grid-area: info !important; align-self: start !important; height: auto !important; min-height: 0 !important;
		width: auto !important; max-width: none !important; margin: 0 !important;
		display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; column-gap: 12px !important; row-gap: 0 !important;
	}
	html body.prt.prt .wdz-itemcal-row.wdz-itemcal-row > .wdz-itemcal { grid-area: cal !important; align-self: start !important; width: auto !important; max-width: none !important; margin: 0 !important; }
	/* everything in the details card spans the row, except the spec tiles */
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > * { grid-column: 1 / -1 !important; }
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > .io_product_detail_box.io_product_detail_box {
		grid-column: auto !important; grid-row: auto !important;
		display: flex !important; flex-direction: column !important; justify-content: flex-start !important; align-items: flex-start !important; gap: 4px !important;
		margin: 14px 0 0 !important; padding: 14px 16px !important;
		border: 1px solid var(--prt-line, #e3e6ea) !important; border-radius: 14px !important;
		background: var(--prt-surface-alt, #f6f8fa) !important;
	}
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > .io_product_detail_box > [class$="_left"] { flex: 0 0 auto !important; font-size: 12px !important; letter-spacing: .06em; text-align: left !important; }
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > .io_product_detail_box > [class$="_right"] { flex: 0 0 auto !important; font-size: 20px !important; text-align: left !important; white-space: normal !important; }
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > .io_product_detail_box > * { margin: 0 !important; padding: 0 !important; border: 0 !important; }
	/* empty platform bits keep their margins; drop them so the card starts with the price */
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox { grid-auto-flow: row dense !important; }
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > :is(.io_star_rating, .io_product_acc_pkg) { margin: 0 !important; }
	/* price and the "Pick a date to book" line on one row */
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > div:has(> .io_product_price_box) { grid-column: 1 / 3 !important; align-self: center !important; }
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox > div:has(.wdz-itemcal-jump) { grid-column: 3 / 4 !important; align-self: center !important; justify-self: end !important; margin: 0 !important; }
	html body.prt.prt .wdz-itemcal-row > .io_product_infobox .wdz-itemcal-jump { margin: 0 !important; white-space: nowrap; }
}
/* the two text links read in every theme's colours (dark themes too) */
html body.prt .wdz-itemcal-jump, html body.prt .wdz-itemcal__addonly { color: var(--prt-primary-text) !important; }
html body.prt.prt-dark .wdz-itemcal-jump, html body.prt.prt-dark .wdz-itemcal__addonly { color: var(--prt-ink) !important; }
