/*!
 * Marquee — WordPress additions to the design: the cart, icons in place of the
 * design's emoji, inline styles moved out of the markup, inner pages, and the
 * booking platform's pages.
 */

/* ---------- accessibility ---------- */
.skip{position:absolute;left:-9999px;top:0}
.skip:focus{left:16px;top:16px;z-index:999;padding:.7em 1.2em;background:var(--ink);color:#fff;border-radius:var(--r-sm);font-weight:700}
.nav-link:focus-visible,.btn:focus-visible,.cities a:focus-visible,.faq summary:focus-visible,.drop a:focus-visible,.hdr-cart:focus-visible{outline:3px solid var(--blue);outline-offset:2px}

/* ---------- header ---------- */
.util .ic,.hero .ic{width:15px;height:15px;vertical-align:-2px;margin-right:4px}
.util span{display:inline-flex;align-items:center}
.drop-all{grid-column:1/-1}
.drop-all a{background:var(--blue-lt);color:var(--blue-dk);font-weight:700;text-align:center}
.hdr-cart{position:relative;width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--ink);display:grid;place-items:center;cursor:pointer;flex-shrink:0;transition:border-color .2s,color .2s}
.hdr-cart:hover{border-color:var(--blue);color:var(--blue)}
.hdr-cart .ic{width:20px;height:20px}
.hdr-cart b{position:absolute;top:-5px;right:-5px;min-width:20px;height:20px;padding:0 5px;border-radius:99px;background:var(--orange);color:#fff;font:700 .7rem/20px var(--disp);text-align:center;transform:scale(0);transition:transform .25s ease}
.hdr-cart b.has{transform:scale(1)}
.nav-mobile-cta{display:none}
@media (max-width:900px){
  :root{--prt-mobile-bar:74px}
  .hdr-phone{display:none}
  .hdr-cta{margin-left:auto}
  .burger{margin-left:0}
  .nav-mobile-cta{display:block;padding:18px 0 6px}
  .nav-mobile-cta .btn{width:100%}
}

/* ---------- home ---------- */
.hero-note a{color:#fff;font-weight:700}
.promise-title{font-size:clamp(2rem,4vw,2.8rem)}
.promise-text{margin-top:18px;color:var(--muted)}
.area-text{margin-top:16px;color:var(--muted);max-width:52ch}
.area-btns{margin-top:26px;display:flex;gap:12px;flex-wrap:wrap}
.revs-more{text-align:center;margin-top:34px}
.cities a.cities-all{background:var(--ink);color:#fff;border-color:var(--ink)}
.feat .ic .ic,.feat .ic svg{width:22px;height:22px;color:var(--blue)}
.cstep .ic{stroke-width:1.6}
.aud .shot,.cats .shot{text-decoration:none;color:#fff}

/* ---------- footer ---------- */
.ft-brand img{max-height:90px;width:auto}
.ft-contact .ic{width:18px;height:18px;flex-shrink:0;margin-top:3px;color:var(--orange)}
.ft-phone{color:#fff;font-size:1.1rem}
.ft-book{margin-top:20px}
.socials a .ic{width:17px;height:17px}
.ft-links{list-style:none;display:flex!important;flex-wrap:wrap;gap:14px;margin:0;padding:0}
.mbar .ic{width:15px;height:15px;vertical-align:-2px}

/* =====================================================================
   Inner pages, blog and the booking platform's pages
   ===================================================================== */
.pagehead{background:var(--mist);border-bottom:1px solid var(--line);padding:clamp(34px,5vw,60px) 0 clamp(26px,4vw,44px)}
.pagehead--io{padding:16px 0 4px;background:#fff;border-bottom:0}
.pagehead__title{font-size:clamp(2rem,4.6vw,3.1rem);margin:.25em 0 .15em}
.pagehead p{color:var(--muted);max-width:60ch;margin:.4em 0 0}
.crumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.4em;font-size:.86rem;font-weight:600;color:var(--muted)}
.crumbs li+li::before{content:"/";margin-right:.4em;color:var(--line)}
.crumbs a{color:var(--blue);text-decoration:none}
.crumbs a:hover{text-decoration:underline}
.crumbs [aria-current]{color:var(--ink)}
.pagebody{padding-block:clamp(26px,4vw,50px) clamp(50px,6vw,84px)}
.pagebody--wide{padding:0}
.prt-page .entry-content{font-size:1.04rem}
.prt-page .entry-content>*+*{margin-top:1em}
.prt-page .entry-content h2,.prt-page .entry-content h3{margin:1.5em 0 .5em}
.prt-page .entry-content a{color:var(--blue)}
.prt-page .entry-content img{border-radius:var(--r-md);height:auto}
.search-form{display:flex;gap:8px;max-width:460px}
.search-form label{flex:1}
.search-form .search-field{width:100%;padding:13px 18px;border:1px solid var(--line);border-radius:var(--r-pill);font:inherit}
.search-form .search-submit{border:0;border-radius:var(--r-pill);padding:13px 22px;background:var(--blue);color:#fff;font-family:var(--disp);font-weight:700;cursor:pointer}
.comments{margin-top:48px}
.comment-list{padding-left:1.2em}

/* The platform's pages: full width for their own grids. */
.prt-io-page .pagebody{padding-top:6px}
.prt-io-page .prt-io .elementor-section-boxed>.elementor-container{max-width:var(--wrap)}

/* ---------- audit fixes ---------- */
/* The header stays on one line from the burger breakpoint up. */
@media (min-width:901px) and (max-width:1180px){
  .hdr-phone{display:none}
  .hdr .wrap{gap:14px}
  .nav{gap:0}
  .nav-link{padding-inline:9px;font-size:.93rem}
  .logo-txt span{display:none}
}
/* The closed phone menu is hidden, not only moved aside, so keyboard and
   screen-reader users do not wander through it. */
@media (max-width:900px){
  .nav{visibility:hidden;transition:transform .25s ease,visibility 0s linear .25s}
  .nav.open{visibility:visible;transition:transform .25s ease}
}
/* Focus stays visible on the dark and blue bands. */
.hero :focus-visible,.clean :focus-visible,.cta :focus-visible,.ft :focus-visible,.util :focus-visible,.mbar :focus-visible{outline:3px solid var(--sun);outline-offset:2px}
.cstep small{display:block}
/* The phone menu opens below the header wherever the header sits. */
@media (max-width:900px){.nav{top:var(--nav-top,var(--head-h))}}
/* Five audience cards: 3 + 2 on tablets instead of 4 + 1. */
@media (min-width:561px) and (max-width:1100px){.aud{grid-template-columns:repeat(6,1fr)}.aud>*{grid-column:span 2}.aud>*:nth-child(n+4){grid-column:span 3}}
.drop{max-width:calc(100vw - 32px)}

/* Without the script, tiles show their pictures straight away. */
html:not(.js) .shot{--img:var(--img-src)!important}
/* The utility bar keeps one height while fonts arrive (no layout shift). */
.util .wrap{flex-wrap:nowrap;min-height:38px;overflow:hidden}
.util-l,.util-r{white-space:nowrap}

/* Focus ring: ink on light areas (the design's yellow stays on the dark ones). */
:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.hero :focus-visible,.clean :focus-visible,.cta :focus-visible,.ft :focus-visible,.util :focus-visible,.mbar :focus-visible{outline-color:var(--sun)}
@media(max-width:360px){.logo{min-width:0;flex-shrink:1}.logo-txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem}.hdr .wrap{gap:10px}.hdr-cart{width:38px;height:38px}.mbar a{padding:12px 4px;font-size:.85rem}}
/* A long business name wraps to two lines and gives way, never pushing the buttons off. */
.hdr .logo{flex-shrink:1;min-width:0}
.hdr .logo-txt{max-width:260px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.hdr .logo-txt span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- round 22 ---------- */
.cat-body .cat-desc{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.cat-body .cat-from{display:block;margin-top:6px;font-weight:700;color:#fff}
.cstep small{display:block;line-height:1.45}
h1 em,h2 em{padding-right:.08em}
/* Burger: three lines become an X while the menu is open; it sits beside the cart. */
@media (max-width:900px){
  .hdr .burger{margin-left:auto}
  .hdr-cta{margin-left:6px}
  .burger span{transition:transform .25s ease,opacity .2s ease}
  .burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
  .burger[aria-expanded="true"] span:nth-child(2){opacity:0}
  .burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
  .stats{grid-template-columns:repeat(2,1fr)}
  body{padding-bottom:0}
  .ft{padding-bottom:74px}
}
@media (max-width:560px){
  .trustbar i{display:none}
  .trustbar{gap:6px 12px}
  .aud>*:last-child:nth-child(odd){grid-column:1/-1}
}
.aud .shot{aspect-ratio:4/5}

/* round 29 */
.nav-landmark{display:contents}
@media (max-width:560px){.util .wrap{justify-content:center;row-gap:4px}}
/* ---------- rounds 34/35 ---------- */
@media (min-width:561px) and (max-width:900px){.steps{grid-template-columns:repeat(3,1fr);gap:16px}.feats{grid-template-columns:repeat(2,1fr)}}
@media (min-width:700px) and (max-width:1100px){.revs{grid-template-columns:repeat(3,1fr)}}
@media (min-width:901px) and (max-width:1180px){.cats{grid-template-columns:repeat(4,1fr)}}
@media (max-width:560px){.trustbar{flex-direction:column;align-items:flex-start}.trustbar i{display:none}}
@media (min-width:901px) and (max-width:1180px){.nav-link{min-height:44px;display:inline-flex;align-items:center}}

/* =====================================================================
   Sections for inner pages (parts/section-*.php)
   ===================================================================== */
/* Two light sections of the same tone in a row share one background:
   a hairline marks the change instead of doubled padding. Works for
   sections side by side and inside Elementor's containers. */
.sec-w+.sec-w,.sec-m+.sec-m,
:is(.e-con,.elementor-top-section):has(.sec-w)+:is(.e-con,.elementor-top-section) .sec-w,
:is(.e-con,.elementor-top-section):has(.sec-m)+:is(.e-con,.elementor-top-section) .sec-m{padding-top:0}
.sec-w+.sec-w>.wrap::before,.sec-m+.sec-m>.wrap::before,
:is(.e-con,.elementor-top-section):has(.sec-w)+:is(.e-con,.elementor-top-section) .sec-w>.wrap::before,
:is(.e-con,.elementor-top-section):has(.sec-m)+:is(.e-con,.elementor-top-section) .sec-m>.wrap::before{content:"";display:block;height:1px;background:var(--line);margin-bottom:84px}
/* Two dark bands in a row: a faint line between them. */
.sec-d+.sec-d,:is(.e-con,.elementor-top-section):has(.sec-d)+:is(.e-con,.elementor-top-section) .sec-d{box-shadow:inset 0 1px 0 rgba(255,255,255,.08)}
@media (max-width:900px){
  .sec-w+.sec-w>.wrap::before,.sec-m+.sec-m>.wrap::before,
  :is(.e-con,.elementor-top-section):has(.sec-w)+:is(.e-con,.elementor-top-section) .sec-w>.wrap::before,
  :is(.e-con,.elementor-top-section):has(.sec-m)+:is(.e-con,.elementor-top-section) .sec-m>.wrap::before{margin-bottom:62px}
}

/* ---------- page header: a shorter hero ---------- */
.phead{position:relative;color:#fff;isolation:isolate;overflow:hidden;
  background-image:
    linear-gradient(104deg,rgba(10,20,36,.96) 0%,rgba(10,20,36,.88) 46%,rgba(10,20,36,.5) 100%),
    var(--hero-img,none),
    linear-gradient(150deg,#12304F,#0D1A2D);
  background-size:cover,cover,cover;background-position:center;background-repeat:no-repeat}
.phead::before{content:"";position:absolute;z-index:-1;top:-220px;right:-160px;width:600px;height:600px;border-radius:50%;
  background:radial-gradient(circle,rgba(18,87,227,.5),transparent 68%)}
.phead.has-img::before{opacity:.55}
.phead::after{content:"";position:absolute;left:0;right:0;bottom:0;height:5px;background:linear-gradient(90deg,var(--orange),var(--sun) 60%,var(--blue))}
.phead .wrap{padding-top:30px;padding-bottom:clamp(68px,8vw,104px)}
.phead-crumbs{margin-bottom:clamp(40px,6vw,72px)}
.phead-crumbs ol{display:inline-flex;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);
  padding:7px 16px;border-radius:var(--r-pill);color:#C7D4E6;font-size:.84rem;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.phead-crumbs a{color:#fff}
.phead-crumbs li+li::before{color:rgba(255,255,255,.35)}
.phead-crumbs [aria-current]{color:#A8BACF}
.phead-inner{max-width:800px}
.phead h1{font-size:clamp(2.4rem,5.4vw,4rem);line-height:1.04;margin-bottom:20px;text-shadow:0 2px 24px rgba(0,0,0,.3)}
.phead h1 em{font-style:italic;color:var(--sun)}
.phead-sub{font-size:clamp(1.05rem,1.8vw,1.24rem);color:#D3DFEF;max-width:60ch}
.phead .hero-btns{margin-top:32px}
.phead .btn .ic{width:18px;height:18px;margin:0}
.phead-note{margin-top:24px}
.phead-note a{color:#fff;font-weight:700}

/* ---------- ticker ---------- */
.mq-ticker{background:var(--sun);color:var(--ink);overflow:hidden;border-bottom:1px solid rgba(13,26,45,.1)}
.mq-ticker-track{display:flex;width:max-content;animation:mq-tick 42s linear infinite}
.mq-ticker:hover .mq-ticker-track{animation-play-state:paused}
.mq-ticker-list{display:flex;justify-content:space-around;min-width:100vw;list-style:none;margin:0;padding:0}
.mq-ticker-list li{display:flex;align-items:center;gap:12px;padding:15px 30px 15px 0;font-family:var(--disp);font-weight:800;
  font-size:1rem;letter-spacing:.01em;white-space:nowrap}
.mq-ticker-list .ic{width:18px;height:18px;color:var(--orange-dk);fill:currentColor}
@keyframes mq-tick{to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){
  .mq-ticker-track{animation:none;width:auto}
  .mq-ticker-list{flex-wrap:wrap;justify-content:center;gap:0 6px;min-width:0;width:100%;padding:6px 16px}
  .mq-ticker-list li{padding:8px 14px}
  .mq-ticker-list[aria-hidden]{display:none}
}

/* ---------- stats band ---------- */
.mq-stats{background:linear-gradient(160deg,var(--ink) 0%,#12304F 100%);color:#fff;position:relative;overflow:hidden}
.mq-stats::before{content:"";position:absolute;bottom:-260px;left:-160px;width:560px;height:560px;border-radius:50%;
  background:radial-gradient(circle,rgba(18,87,227,.36),transparent 68%)}
.mq-stats .wrap{position:relative}
.mq-stats .stats{margin-top:0}

/* ---------- featured rentals ---------- */
.rent-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(262px,1fr));gap:22px}
@media (min-width:901px){.rent-grid{grid-template-columns:repeat(3,1fr)}}
.rent{display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;
  text-decoration:none;box-shadow:var(--sh-1);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.rent:hover{transform:translateY(-4px);box-shadow:var(--sh-2);border-color:#cfdbec}
.rent-img{position:relative;display:block;aspect-ratio:4/3;overflow:hidden;
  /* (The first line is for browsers without color-mix(): Safari before 16.2.) */
  background:radial-gradient(120% 90% at 50% 100%,#D9E4FA 0%,var(--mist) 62%);
  background:radial-gradient(120% 90% at 50% 100%,color-mix(in srgb,var(--c1,var(--blue)) 16%,#fff) 0%,var(--mist) 62%)}
.rent-img img{width:100%;height:100%;object-fit:contain;padding:14px 16px 10px;transition:transform .3s ease}
.rent--photo .rent-img img{object-fit:cover;padding:0}
.rent:hover .rent-img img{transform:scale(1.04)}
.rent-body{display:flex;flex-direction:column;gap:12px;padding:18px 20px 20px;flex:1}
.rent-body>.mq-ct{font-family:var(--disp);font-weight:800;font-size:1.14rem;letter-spacing:-.01em;line-height:1.25}
.rent-meta{margin-top:auto;display:flex;justify-content:space-between;align-items:center;gap:10px;padding-top:14px;border-top:1px solid var(--line)}
.rent-price{font-size:.88rem;color:var(--muted)}
.rent-price strong{font-family:var(--disp);font-size:1.18rem;font-weight:800;color:var(--ink);margin-left:2px}
.rent-go{display:inline-flex;align-items:center;gap:6px;font-family:var(--disp);font-weight:700;font-size:.9rem;color:var(--blue);white-space:nowrap}
.rent-go .ic{width:16px;height:16px;transition:transform .18s ease}
.rent:hover .rent-go .ic{transform:translateX(3px)}
@media (max-width:560px){
  .rent-grid{grid-template-columns:1fr 1fr;gap:12px}
  .rent-body{padding:12px 13px 14px;gap:8px}
  .rent-body>.mq-ct{font-size:.98rem}
  .rent-meta{flex-direction:column;align-items:flex-start;gap:4px;padding-top:10px}
  .rent-price strong{font-size:1.04rem}
  .rent-img img{padding:10px}
}

/* ---------- contact ---------- */
.contact-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:56px;align-items:start}
.contact-lead .sec-head{margin-bottom:30px}
.ways{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:1fr 1fr;gap:14px}
.ways li{display:flex;gap:14px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:var(--r-md);
  padding:18px;box-shadow:var(--sh-1);min-width:0}
.ways li>span:last-child{min-width:0;font-weight:600;line-height:1.45;overflow-wrap:anywhere}
.ways small{display:block;font-family:var(--disp);font-weight:700;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.ways a{text-decoration:none}
.ways a:hover{color:var(--blue)}
.ic-box{flex:none;width:44px;height:44px;border-radius:12px;background:var(--blue-lt);color:var(--blue);display:grid;place-items:center}
.ic-box .ic{width:20px;height:20px}
.contact-map{display:block;width:100%;height:280px;border:0;border-radius:var(--r-lg);margin-top:22px;box-shadow:var(--sh-1);background:var(--mist)}
.contact-card{position:relative;background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:clamp(26px,3.4vw,42px);box-shadow:var(--sh-2);overflow:hidden}
.contact-card::before{content:"";position:absolute;left:0;right:0;top:0;height:6px;background:linear-gradient(90deg,var(--blue),var(--orange))}
.contact-card h3{font-size:1.65rem;margin-bottom:8px}
.contact-card>p{color:var(--muted);margin-bottom:26px}
.mq-form{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.mq-form>label{display:grid;gap:7px;font-family:var(--disp);font-weight:600;font-size:.92rem;min-width:0}
.mq-form>label:nth-of-type(n+3),.mq-form>button,.mq-form>.prt-contact-status{grid-column:1/-1}
.mq-form :is(input,textarea){font:inherit;font-family:var(--body);font-weight:400;font-size:1rem;width:100%;padding:13px 16px;
  border:1.5px solid var(--line);border-radius:var(--r-sm);background:var(--mist);color:var(--ink);transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}
.mq-form textarea{resize:vertical;min-height:132px}
.mq-form :is(input,textarea):hover{border-color:#c9d6e8}
.mq-form :is(input,textarea):focus{outline:none;border-color:var(--blue);background:#fff;box-shadow:0 0 0 4px var(--blue-lt)}
.mq-form .btn{width:100%;margin-top:6px;margin-bottom:6px}
.mq-form .btn[disabled]{opacity:.7;cursor:wait}
@media (max-width:1040px){.contact-grid{grid-template-columns:1fr;gap:38px}}
@media (max-width:560px){.mq-form,.ways{grid-template-columns:1fr}.mq-form>label{grid-column:1/-1}}

/* ---------- text block ---------- */
.text-one{max-width:820px}
.text-cols{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:clamp(32px,6vw,80px);align-items:start}
.text-cols .text-head{margin-bottom:0}
.text-split{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(32px,5vw,72px);align-items:center}
.text-split .text-head,.text-one .text-head{margin-bottom:26px}
.text-head h2{font-size:clamp(2rem,4vw,2.8rem)}
.text-body{font-size:1.06rem;color:#3B4B63}
.text-body>*+*{margin-top:1em}
.text-body a{color:var(--blue);font-weight:600}
.text-body h2,.text-body h3{margin-top:1.5em;font-size:1.4rem}
.text-body ul{list-style:none;padding:0;display:grid;gap:12px}
.text-body ul li{position:relative;padding-left:40px}
.text-body ul li::before{content:"\2713";position:absolute;left:0;top:-.05em;width:27px;height:27px;border-radius:50%;
  background:#E7F7EC;color:#15A34A;font-weight:800;font-size:.84rem;display:grid;place-items:center}
.text-body ol{padding-left:1.3em;display:grid;gap:10px}
.text-body blockquote{margin:1.4em 0;padding:4px 0 4px 20px;border-left:4px solid var(--sun);font-family:var(--disp);font-size:1.2rem;color:var(--ink)}
.text-photo{position:relative;margin:0 14px 14px 0}
.text-photo::before{content:"";position:absolute;right:-14px;bottom:-14px;width:62%;height:62%;border-radius:var(--r-lg);background:var(--sun)}
.text-photo img{position:relative;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--r-lg);box-shadow:var(--sh-2)}
@media (max-width:900px){.text-cols,.text-split{grid-template-columns:1fr;gap:28px}}

/* ---------- smaller additions to the home sections ---------- */
.promise-grid--solo{grid-template-columns:1fr;max-width:780px}
.clean-grid--solo{grid-template-columns:1fr;max-width:720px}
.cities span{background:#fff;border:1px solid var(--line);border-radius:var(--r-pill);padding:11px 20px;font-family:var(--disp);font-weight:600;font-size:.95rem;box-shadow:var(--sh-1)}
.rev-score{display:flex;width:fit-content;align-items:center;gap:8px;margin:-18px auto 34px;background:#fff;border:1px solid var(--line);
  border-radius:var(--r-pill);padding:9px 20px;box-shadow:var(--sh-1);font-size:.93rem;color:var(--muted)}
.rev-score .stars{margin:0;font-size:1rem}
.rev-score b{font-family:var(--disp);font-size:1.1rem;color:var(--ink)}
.mq-rentals .revs-more{margin-top:38px}
.phead :focus-visible,.mq-stats :focus-visible{outline-color:var(--sun)}
.ways li>span:last-child{overflow-wrap:break-word}
/* More than three reviews: the last row sits centred. */
.revs:has(>.rev:nth-child(4)){display:flex;flex-wrap:wrap;justify-content:center}
.revs:has(>.rev:nth-child(4))>.rev{flex:0 1 calc((100% - 44px)/3);min-width:min(100%,290px)}
@media (max-width:1100px){.revs:has(>.rev:nth-child(4))>.rev{flex-basis:calc((100% - 22px)/2)}}
@media (max-width:640px){.revs:has(>.rev:nth-child(4))>.rev{flex-basis:100%}}
@media (max-width:560px){.contact-map{height:220px}}

/* ---------- inner-page audit ---------- */
/* Event cards show their whole line; the text sits on a deeper fade. */
.aud-body small{display:block;overflow:visible;line-height:1.45}
.aud a::after{background:linear-gradient(to top,rgba(7,15,27,.95) 8%,rgba(7,15,27,.6) 44%,rgba(7,15,27,.06) 76%)}
/* An odd last event card is meant: on tablets 3 + 2 (above), on phones the
   last one becomes a wide banner instead of a lone tall tile. */
@media (max-width:560px){.aud>*:last-child:nth-child(odd){aspect-ratio:16/9}}
/* Category photos: a lighter wash, dark only behind the words. */
.cat::after{background:linear-gradient(transparent 35%,rgba(10,20,40,.85))}
.cat.shot::before{opacity:calc(var(--tint) * .6)}
/* Contact: four tiles in an even 2 x 2, the map clear of them. */
.ways li{grid-column:auto}
.ways+.contact-map{margin-top:22px}
.ways a[href^="mailto:"]{font-size:.92rem;overflow-wrap:break-word}
/* Service area: the closing "call us" chip, like the towns. */
.cities a.cities-call{display:inline-flex;align-items:center;gap:7px;color:var(--blue-dk);font-weight:700}
.cities-call .ic{width:16px;height:16px;color:var(--orange)}
.cities a.cities-call:hover .ic{color:#fff}
/* Safety & cleaning straight under the dark page header: drawn light. */
.clean--light{background:var(--mist);color:var(--ink)}
.clean--light::before{background:radial-gradient(circle,rgba(18,87,227,.12),transparent 68%)}
.clean--light .eyebrow.on-dark{color:var(--blue)}
.clean--light .clean-lead h2 em{color:var(--orange)}
.clean--light .clean-lead p{color:var(--muted)}
.clean--light .cstep{background:#fff;border-color:var(--line);box-shadow:var(--sh-1)}
.clean--light .cstep .num{color:var(--orange)}
.clean--light .cstep svg{stroke:var(--blue)}
.clean--light .cstep small{color:var(--muted)}
.clean--light :focus-visible{outline-color:var(--ink)}
.cat-body{text-shadow:0 1px 10px rgba(0,0,0,.6)}
/* A single review reads as a quote, not a full-width strip. */
.revs:has(>.rev:only-child){grid-template-columns:minmax(0,760px);justify-content:center}
/* Tablets: the two wide cards under the row of three are landscape, not giant portraits. */
@media (min-width:561px) and (max-width:1100px){.aud>*:nth-child(n+4){aspect-ratio:16/10}}

/* =====================================================================
   Polish pass (2026-10-02)
   ===================================================================== */
/* Section eyebrows: the intro rule (.sec-head p) was turning them into
   grey body text with a top margin. They are the design's small blue label. */
.sec-head .eyebrow{margin:0 0 14px;color:var(--blue);font-size:.78rem;max-width:none}
/* Every light-section heading uses the orange italic accent, not just some. */
.promise-title em,.text-head h2 em{font-style:italic;color:var(--orange);font-weight:800}

/* Hero trust strip: a tick before each promise; on phones, small chips. */
.trustbar span{display:inline-flex;align-items:center;gap:7px}
.trustbar .ic{width:15px;height:15px;color:var(--sun);stroke-width:2.6;flex:none;margin:0}
@media (max-width:560px){
  .trustbar{flex-direction:row;flex-wrap:wrap;gap:8px;padding:0;background:none;border:0;-webkit-backdrop-filter:none;backdrop-filter:none;margin-bottom:22px}
  .trustbar span{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);padding:6px 12px;border-radius:var(--r-pill);font-size:.8rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
}

/* Mobile menu: a call button under Book Now. */
.nav-mobile-call{display:none}
@media (max-width:900px){
  .nav-mobile-cta .nav-mobile-call{display:flex;margin-top:12px}
  .nav-mobile-call .ic{width:17px;height:17px}
}

/* Phones: service-area buttons share the row instead of stacking ragged. */
@media (max-width:560px){
  .area-btns .btn{flex:1 1 0;padding-inline:14px}
}

/* Phones: reviews become a swipeable row (the next card peeking)
   instead of a very long stack. */
@media (max-width:640px){
  .revs:has(>.rev:nth-child(2)){display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x mandatory;gap:14px;
    margin-inline:-20px;padding:4px 20px 18px;scroll-padding-inline:20px;scrollbar-width:none;justify-content:flex-start}
  .revs:has(>.rev:nth-child(2))::-webkit-scrollbar{display:none}
  .revs:has(>.rev:nth-child(2))>.rev{flex:0 0 84%!important;min-width:0!important;scroll-snap-align:start}
  .rev{padding:24px 22px}
}
.revs-dots{display:none}
@media (max-width:640px){
  .revs-dots{display:flex;justify-content:center;gap:7px;margin-top:2px}
  .revs-dots i{width:7px;height:7px;border-radius:50%;background:#C9D6E8;transition:background .2s,width .2s}
  .revs-dots i.on{background:var(--blue);width:20px;border-radius:99px}
}

/* Phones: the cleaning steps read as a compact list (icon beside the words). */
@media (max-width:640px){
  .clean-steps{gap:12px}
  .cstep{display:grid;grid-template-columns:48px 1fr;column-gap:16px;text-align:left;padding:18px;align-items:start}
  .cstep svg,.cstep .ic{grid-row:1/4;grid-column:1;width:44px;height:44px;margin:2px 0 0}
  .cstep .num{grid-column:2;margin-bottom:4px}
  .cstep .mq-ct,.cstep small{grid-column:2}
}

/* ---------- page-header crumbs and search (404) ---------- */
.phead-crumbs li[aria-current]{max-width:46ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.phead-search{margin-top:28px}
.phead .search-form{max-width:520px}
.phead .search-form .search-field{background:#fff;border-color:transparent;color:var(--ink);padding:15px 22px}
.phead .search-form .search-submit{background:var(--orange);box-shadow:0 4px 0 var(--orange-dk);padding:13px 26px}
.phead .search-form .search-submit:hover{background:var(--orange-dk)}
.phead--404 .wrap{padding-bottom:clamp(80px,10vw,128px)}
.phead--404 .hero-btns{margin-top:30px}
.search-form .search-field:focus{outline:none;box-shadow:0 0 0 4px rgba(255,197,49,.55)}
@media (max-width:560px){
  .phead-crumbs li[aria-current]{max-width:18ch}
  .phead .search-form{flex-wrap:wrap}
  .phead .search-form .search-submit{flex:1}
}

/* ---------- page text (plain WordPress pages) ---------- */
.prt-page .entry-content h2{font-size:clamp(1.5rem,2.6vw,1.95rem)}
.prt-page .entry-content h3{font-size:1.3rem}
.prt-page .entry-content :is(ul,ol){padding-left:1.3em}
.prt-page .entry-content li+li{margin-top:.4em}
.prt-page .entry-content blockquote{margin:1.6em 0;padding:4px 0 4px 22px;border-left:4px solid var(--sun);font-family:var(--disp);font-size:1.18rem}

/* ---------- booking platform pages ---------- */
/* Links in page content are underlined (core), but the platform's buttons
   and card titles are not links in running text. */
.entry-content :is(.elementor-button,.io_button,.item_add,.rentNameIO_button,.view-product-button,.wdz-browse a,.io_item2_listcat a,.io_product_title a){text-decoration:none!important}
/* Item page buttons in the theme's pill shape. */
.prt .io_product_infobox .elementor-button.io_button{border-radius:var(--r-pill)!important;padding:12px 22px!important;font-size:.95rem!important;display:inline-flex!important;align-items:center;gap:8px;transition:transform .16s ease,filter .16s ease}
.prt .io_product_infobox .elementor-button.io_button:hover{transform:translateY(-2px)}
.prt .io_product_infobox #checkDeliveryButton{background:var(--blue)!important}
/* Item specs: a clean two-column list instead of boxed chips. */
.prt .io_product_infobox .io_product_detail_box{display:flex!important;justify-content:space-between;align-items:baseline;gap:16px;width:100%!important;
  border:0!important;border-bottom:1px solid var(--line)!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;padding:12px 0!important;margin:0!important}
.prt .io_product_infobox .io_product_detail_box p{background:transparent!important;padding:0!important;margin:0!important;border:0!important}
.prt .io_product_infobox .io_product_detail_box p:first-child{font-size:.9rem!important;font-weight:600!important;color:var(--muted)!important}
.prt .io_product_infobox .io_product_detail_box p:last-child{font-family:var(--disp)!important;font-weight:700!important;color:var(--ink)!important;text-align:right}
/* Inventory page: the category cards use the whole width. */
@media (min-width:1001px){.prt .io_catdiv2:not(.list-view){grid-template-columns:repeat(auto-fill,minmax(220px,1fr))!important;gap:22px!important;max-width:none!important;width:100%!important}}
@media (max-width:599px){
  .prt .io_catdiv2:not(.list-view){grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px!important;margin:16px 0!important}
  .prt .io_item2_listcat .cat_div_inner{padding:10px 12px 14px!important}
  .prt .io_item2_listcat .rentNameIO{font-size:1rem!important}
  .prt .catDescriptionIO_small{font-size:.84rem!important;-webkit-line-clamp:2;line-clamp:2}
}
.prt .io_catdiv2:not(.list-view) .io_item2_listcat{width:auto!important;max-width:none!important;margin:0!important}
/* The "for Rent" half of platform headings: the theme's accent. */
.prt .io_forrent{color:var(--orange)!important;font-style:italic}
/* Intro copy the platform centres in bold: lighter, on a readable measure. */
.prt-io .entry-content center>p{max-width:76ch;margin-inline:auto;color:#3B4B63}
.prt-io .entry-content center>p strong{font-weight:500}
.prt .io_product_infobox .io_product_detail_box:not(.io_product_detail_box ~ .io_product_detail_box){margin-top:16px!important;border-top:1px solid var(--line)!important}

/* ---------- polish pass, round 2 ---------- */
/* Inventory grid: flush with the page edges like everything else. */
@media (min-width:1001px){.prt .io_catdiv2:not(.list-view){margin-left:0!important;margin-right:0!important}}
@media (max-width:599px){.prt .io_catdiv2:not(.list-view) .catDescriptionIO_small{-webkit-line-clamp:2!important;line-clamp:2!important;max-height:calc(2 * 1.55em)!important}}
/* The platform's closing service-area line: centred and quiet, like a footnote. */
.prt .io_landingpages{text-align:center;color:var(--muted);max-width:72ch;margin-left:auto!important;margin-right:auto!important}
/* Search box in the dark header: field and button stay on one line on phones. */
@media (max-width:560px){
  .phead .search-form{flex-wrap:nowrap}
  .phead .search-form label{flex:1 1 auto;min-width:0}
  .phead .search-form .search-submit{flex:none;padding:13px 18px}
}
/* Phones: category photo cards are wide banners, not tall squares. */
@media (max-width:560px){
  .cats{gap:14px}
  .cats .cat{aspect-ratio:16/10}
  .cat-body{padding:18px}
  .cat-body .cat-desc{-webkit-line-clamp:2}
}
/* Phones: feature cards put the icon beside the heading. */
@media (max-width:640px){
  .feats{gap:12px}
  .feat{display:grid;grid-template-columns:46px 1fr;column-gap:16px;padding:20px}
  .feat>.ic{grid-row:1/3;margin:0}
  .feat h3{align-self:center;margin-bottom:4px}
  .feat p{grid-column:2}
}
/* The category blurb is clamped to whole lines (the editor widget's own display was winning). */
.prt .io_catdiv2 .io_item2_listcat .catDescriptionIO_small{display:-webkit-box!important;-webkit-box-orient:vertical!important;padding-top:0!important;padding-bottom:0!important;height:auto!important;min-height:0!important;overflow:hidden!important;max-height:calc(3 * 1.55em)!important}
@media (max-width:599px){.prt .io_catdiv2 .io_item2_listcat .catDescriptionIO_small{-webkit-line-clamp:2!important;line-clamp:2!important;max-height:calc(2 * 1.55em)!important}}

/* Elementor's ".elementor a{box-shadow:none}" outranks a single class and was
   flattening the 3D buttons inside page sections. Restate them one step stronger. */
.elementor .btn-primary{box-shadow:0 6px 0 var(--orange-dk)}
.elementor .btn-primary:hover{box-shadow:0 4px 0 var(--orange-dk)}
.elementor .btn-blue{box-shadow:0 6px 0 var(--blue-dk)}
.elementor .btn-blue:hover{box-shadow:0 4px 0 var(--blue-dk)}
.elementor .btn-outline{box-shadow:var(--sh-1)}
/* The item page's booking buttons get the same 3D drop as every other Marquee button. */
.prt .io_product_infobox .elementor-button.io_button{box-shadow:0 6px 0 var(--orange-dk)!important}
.prt .io_product_infobox .elementor-button.io_button:hover{box-shadow:0 4px 0 var(--orange-dk)!important}
.prt .io_product_infobox #checkDeliveryButton{box-shadow:0 6px 0 var(--blue-dk)!important}
.prt .io_product_infobox #checkDeliveryButton:hover{box-shadow:0 4px 0 var(--blue-dk)!important}

/* ---------- round 3 (2026-10-06): inventory mega menu, company menu ---------- */
/* Inventory: a full-width panel under the header, photo tiles with unit
   counts and a foot bar, like the rest of the suite. */
.mega ul{list-style:none;margin:0;padding:0}
.mega-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:16px}
.mega-head .eyebrow{margin:0;font-size:.76rem}
.drop .mega-all-link{display:inline-flex;align-items:center;gap:6px;padding:0;font-family:var(--disp);font-weight:700;font-size:.92rem;color:var(--blue)}
.drop .mega-all-link:hover{background:none;color:var(--blue-dk);text-decoration:underline}
.mega-all-link .ic,.mega-foot .btn .ic{width:16px;height:16px}
.mega-cats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px 20px}
.drop .mcat{display:block;padding:0;border-radius:var(--r-md);color:var(--ink);text-decoration:none}
.drop .mcat:hover{background:none;color:var(--blue-dk)}
.mcat-img{position:relative;display:block;aspect-ratio:16/10;border-radius:var(--r-md);overflow:hidden;background:var(--mist);margin-bottom:11px;box-shadow:var(--sh-1)}
.mcat-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s ease}
.mcat:hover .mcat-img img,.mcat:focus-visible .mcat-img img{transform:scale(1.04)}
.mcat-count{position:absolute;right:10px;bottom:10px;background:var(--sun);color:var(--ink);font:800 .7rem/1 var(--disp);letter-spacing:.08em;text-transform:uppercase;padding:6px 10px;border-radius:var(--r-pill);box-shadow:0 2px 8px rgba(13,26,45,.18)}
.drop .mcat b{font-size:1.02rem;margin-bottom:2px}
.drop .mcat small{font-size:.84rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mega-foot{display:flex;align-items:center;justify-content:space-between;gap:16px 24px;flex-wrap:wrap;margin-top:22px;padding:16px 0 0;border-top:1px solid var(--line)}
.mega-trust{display:flex;flex-wrap:wrap;gap:8px 26px}
.mega-trust li{display:flex;align-items:center;gap:8px;font-size:.9rem;font-weight:600;color:var(--ink)}
.mega-trust .ic{width:18px;height:18px;padding:3px;border-radius:50%;background:var(--blue-lt);color:var(--blue);stroke-width:3;flex:none}
.drop .mega-foot .btn{display:inline-flex;padding:11px 22px;color:#fff;font-weight:700}
.drop .mega-foot .btn:hover{background:var(--orange-dk);color:#fff}
@media (min-width:901px){
  .nav>li.has-mega{position:static}
  .drop.mega{top:100%;left:0!important;right:0;width:auto;max-width:none;min-width:0;padding:24px 0;border:0;border-top:1px solid var(--line);
    border-radius:0 0 var(--r-lg) var(--r-lg);box-shadow:0 26px 40px -20px rgba(13,26,45,.3)}
  .mega-in{max-width:var(--wrap);margin-inline:auto;padding-inline:20px}
}
@media (min-width:901px) and (max-height:760px){.mcat-img{aspect-ratio:2/1}.drop .mcat small{display:none}}
/* Phones: the panel opens inside the menu as a two-column grid of small tiles. */
@media (max-width:900px){
  .drop.mega{padding:12px 0 14px;border-left:0}
  .mega-head,.mega-trust,.drop .mcat small{display:none}
  .nav>li.open .drop.mega{display:block}
  .mega-cats{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  .mcat-img{aspect-ratio:3/2;margin-bottom:6px;border-radius:var(--r-sm)}
  .mcat-count{right:6px;bottom:6px;font-size:.62rem;padding:5px 8px}
  .drop .mcat b{font-size:.92rem}
  .mega-foot{margin-top:14px;padding-top:0;border:0}
  .drop .mega-foot .btn{width:100%;justify-content:center}
}

/* Company: icon, page name and a short line for each page. */
.drop.drop-co{width:350px}
.drop-co a{display:flex;align-items:center;gap:12px}
.drop-ic{flex:none;width:36px;height:36px;border-radius:10px;background:var(--blue-lt);color:var(--blue);display:grid;place-items:center;transition:background .2s,color .2s}
.drop-ic .ic{width:18px;height:18px}
.drop-co a:hover .drop-ic,.drop-co a[aria-current] .drop-ic{background:var(--blue);color:#fff}
.drop-co a[aria-current] b{color:var(--blue-dk)}
@media (max-width:900px){.drop.drop-co{width:auto}.drop-ic{width:30px;height:30px}}

/* Favourites: the whole card opens the rental (its name's link is stretched
   over it); "Add to Cart" sits above that link. */
.rent{position:relative}
.rent-link{color:inherit;text-decoration:none}
.rent-link::after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit}
.rent-link:focus-visible{outline:none}
.rent:has(.rent-link:focus-visible){outline:3px solid var(--ink);outline-offset:3px}
.rent:hover .rent-link{color:var(--blue-dk)}
.rent-act{position:relative;z-index:2;margin-top:4px}
.rent-act .btn{width:100%;box-shadow:0 4px 0 var(--blue-dk)}
.rent-act .btn:hover{box-shadow:0 2px 0 var(--blue-dk);transform:translateY(2px)}
.rent-act .btn .ic{width:18px;height:18px}
.rent-act .prt-atc.is-link{background:#fff;color:var(--blue-dk);border-color:var(--line);box-shadow:var(--sh-1)}
.rent-act .prt-atc.is-added{background:#15A34A;box-shadow:0 4px 0 #0A6B30}
@media (max-width:560px){
  .rent-act .btn{padding:10px 8px;font-size:.84rem;gap:6px}
  .rent-act .btn .ic{width:15px;height:15px}
}

/* Reviews slide: three across, two on tablets, one (with a peek) on phones. */
.revs-track{--prt-slides:3;--prt-gap:22px;padding:6px 2px 14px;margin:-6px -2px 0}
.revs-track>.rev{height:auto}
@media (max-width:1100px){.revs-track{--prt-slides:2}}
@media (max-width:640px){.revs-track{--prt-slides:1.12;--prt-gap:14px}}
.revs-slider .prt-slider__nav{margin-top:18px}
.revs-slider .prt-slider__arrow:hover,.revs-slider .prt-slider__pause:hover{background:var(--blue);border-color:var(--blue);color:#fff}
.revs-slider .prt-slider__dot.is-active::before{background:var(--blue)}
/* A dozen dots would wrap on a phone: there the arrows and swiping are enough. */
@media (max-width:640px){.revs-slider .prt-slider__dots{display:none}.revs-slider .prt-slider__nav{gap:18px}}

/* Contact: the left column (how to reach us + map) stays in view beside the
   form on desktop (core .prt-sticky-side). It only sticks while it is the
   shorter column, so on wide screens the map is a little lower and the
   message box a little taller. */
@media (min-width:1041px){
  .mq-contact .contact-map{height:200px}
  .mq-contact .mq-form textarea{min-height:220px}
}

/* ---------- blog (core prt-blog-*), in Marquee's dress ---------- */
/* Archive and article heroes: the navy page header with the orange-to-blue
   rule, like every other Marquee page. */
.prt-blog-hero,.prt-blog-art{position:relative;color:#fff;
  background:radial-gradient(600px 600px at 92% -10%,rgba(18,87,227,.5),transparent 68%),linear-gradient(150deg,#12304F,#0D1A2D)}
.prt-blog-hero::after,.prt-blog-art:not(.prt-blog-art--img)::after{content:"";position:absolute;left:0;right:0;bottom:0;height:5px;background:linear-gradient(90deg,var(--orange),var(--sun) 60%,var(--blue))}
.prt-blog :is(.prt-blog-hero__title,.prt-blog-art__title),:is(.prt-blog-hero,.prt-blog-art) :is(h1,.prt-blog-hero__title,.prt-blog-art__title){color:#fff}
.prt-blog-hero__intro,.prt-blog-art__dek,.prt-blog-meta{color:#C7D4E6}
.prt-blog-hero .prt-blog-eyebrow{color:var(--sun)}
.prt-blog-crumbs ol{color:#C7D4E6}
.prt-blog-crumbs a{color:#fff}
.prt-blog-crumbs__here{color:#C7D4E6}
.prt-blog-art__tag{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.25);color:#fff}
.prt-blog-art__tag:hover{border-color:var(--sun)}
.prt-blog-meta__by a{color:#fff;text-decoration-color:var(--sun)}
.prt-blog-meta__item .ic{color:var(--sun)}
.prt-blog-search{box-shadow:0 14px 34px rgba(0,0,0,.25)}
:is(.prt-blog-hero,.prt-blog-art) :focus-visible{outline-color:var(--sun)}
/* With a photo, the navy runs to the middle of the picture, then white. */
.prt-blog-art--img{background:radial-gradient(600px 600px at 92% -10%,rgba(18,87,227,.5),transparent 68%) no-repeat,linear-gradient(150deg,#12304F,#0D1A2D) no-repeat;
  background-size:100% calc(100% - 240px);background-color:#fff}
@media (max-width:640px){.prt-blog-art--img{background-size:100% calc(100% - 130px)}}
.prt-blog-card{border-radius:var(--r-md);transition:transform .18s ease,box-shadow .18s ease}
.prt-blog-card:hover{transform:translateY(-4px);box-shadow:var(--sh-2)}
@media (prefers-reduced-motion:reduce){.prt-blog-card:hover{transform:none}}

/* ---------- polish pass (2026-10-06) ---------- */
/* Readable orange. The design's bright orange (#FF6A16) under white text is
   2.9:1, so every orange button, badge and tab sits on a deeper orange
   (4.6:1, --orange-btn); the bright one stays for rules, icons and the 3D
   edge colour family. Orange heading accents on light grounds use a shade
   that clears 3:1 for large text (--orange-text). */
:root{--orange-btn:#D14400;--orange-btn-dk:#9A3200;--orange-btn-hv:#B83C00;--orange-text:#E85500}
.btn-primary,.elementor .btn-primary{background:var(--orange-btn);box-shadow:0 6px 0 var(--orange-btn-dk)}
.btn-primary:hover,.elementor .btn-primary:hover{background:var(--orange-btn-hv);box-shadow:0 4px 0 var(--orange-btn-dk)}
.drop .mega-foot .btn:hover{background:var(--orange-btn-hv)}
.mbar .m3,.hdr-cart b{background:var(--orange-btn)}
.phead .search-form .search-submit{background:var(--orange-btn);box-shadow:0 4px 0 var(--orange-btn-dk)}
.phead .search-form .search-submit:hover{background:var(--orange-btn-hv)}
.prt .io_product_infobox .elementor-button.io_button{box-shadow:0 6px 0 var(--orange-btn-dk)!important}
.prt .io_product_infobox .elementor-button.io_button:hover{box-shadow:0 4px 0 var(--orange-btn-dk)!important}
.sec-head h2 em,.promise-title em,.text-head h2 em{color:var(--orange-text)}
.hero h1 em,.clean-lead h2 em,.cta h2 em,.phead h1 em{color:var(--sun)}
.clean--light .clean-lead h2 em,.clean--light .cstep .num{color:var(--orange-text)}
.prt .io_forrent{color:var(--orange-text)!important}

/* The shared page sections (about, events, FAQ, safety, reviews, town
   pages) take the orange italic accent in their headings. Their 1160px
   column and padding come from the layout tokens in functions.php. */
.prts :is(h1,h2) em,.pe-row h3 em{font-style:italic;font-weight:800;color:var(--orange-text)}
.prts-ctabox h2 em{color:inherit;font-style:normal}

/* Slider dots: the resting dots are visible (3.3:1), the current one a blue pill. */
:root{--prt-dot:#7A889E;--prt-dot-hover:var(--muted);--prt-dot-active:var(--blue)}

/* The Company menu opens from its own right edge: it sits near the end of
   the menu and must never hang past the window. */
@media (min-width:901px){.drop.drop-co{left:auto;right:0}}

/* Footer on tablets: the logo and blurb across the top, then the three
   lists side by side (no tall empty column beside the rentals list). */
@media (min-width:561px) and (max-width:1040px){
  .ft-grid{grid-template-columns:1fr 1.25fr 1.15fr;gap:34px 28px}
  .ft-brand{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:16px 32px}
  .ft-brand img{margin:0}
  .ft-brand p{margin:0;flex:1 1 320px;max-width:60ch}
  .ft-brand .socials{margin:0}
}

/* Round 1 polish (desktop rhythm).
   Shared page sections take turns with Marquee's own white/mist bands: the
   theme prints a hidden .mq-alt marker before each one that lands on mist
   (functions.php), so two white sections never stack into a 170px gap. Panels
   that are mist themselves turn white there so they still read as panels. */
@media (max-width:900px){:root{--prt-section-y:62px}}
.mq-alt+.prts{background:var(--mist);padding-top:var(--prt-section-y)}
.mq-alt+.prts :is(.prts-check__rules,.prts-weather__box,.prts-rleave__box){background:#fff}
/* Headings break into even lines instead of leaving one word alone. */
:is(h1,h2){text-wrap:balance}
/* Event cards: every description keeps room for three lines, so the titles
   in a row sit on one line instead of stepping up and down. */
@media (min-width:1101px){.aud-body small{min-height:calc(3 * 1.45em)}}

/* Round 2 polish (phones, 320-414).
   Every link and button a thumb can hit is at least 44px tall: footer lists,
   the utility bar, socials, the header cart and burger, breadcrumbs and the
   phone menu's town links. */
@media (max-width:900px){
  .ft-grid ul:not(.ft-contact){gap:0 18px}
  .ft-grid ul:not(.ft-contact) a,.ft-contact a{display:inline-flex;align-items:center;min-height:44px;min-width:44px}
  .ft .ft-contact{gap:4px}
  .ft-contact li{align-items:center;min-height:30px}
  .ft-contact .ic{margin-top:0}
  .socials a{width:44px;height:44px}
  .util .wrap{min-height:44px}
  .util-r a{display:inline-flex;align-items:center;min-height:44px}
  .hdr-cart{width:44px;height:44px}
  .burger{min-width:44px;min-height:44px;padding:10px}
  .crumbs a{display:inline-block;padding-block:12px;margin-block:-12px;min-width:44px}
  .prt-blog-crumbs a{display:inline-block;min-width:44px;padding-block:13px;margin-block:-13px}
  .ways a{display:inline-flex;align-items:center;min-height:44px;margin-block:-12px}
  .drop.cols3 a{display:flex;align-items:center;min-height:44px}
  /* The FrontDesk chat bubble floats above the call/book bar: the footer ends
     below it, so the copyright line is never hidden behind the bubble. */
  body:has(#wdz-frontdesk-root) .ft{padding-bottom:150px}
}
@media (max-width:560px){
  .util{font-size:.875rem}
  .aud-body small{font-size:.875rem}
  .ways small{font-size:.78rem}
}
/* Event cards: one per row on phones. Two across left 150px cards whose
   titles and four-line descriptions ran out of room (and past the top edge at 320px). */
@media (max-width:480px){
  .aud{grid-template-columns:1fr}
  .aud .shot,.aud>*:last-child:nth-child(odd){aspect-ratio:16/10}
  .aud-body{padding:18px 20px}
}
/* Category cards on /rentals/: descriptions at 14px on phones (were 13.4px). */
@media (max-width:599px){.prt .io_catdiv2:not(.list-view) .catDescriptionIO_small{font-size:14px!important}}

/* Round 3 polish (tablets, 768-1366).
   Between 901 and 1040px the promise section is one column, so its four
   feature cards ran four across at ~230px with six-line descriptions: two by
   two reads better (as from 561px up). The intro paragraphs of the promise
   and clean sections ran 115+ characters a line there; they keep a reading
   measure. */
@media (min-width:561px) and (max-width:1040px){.feats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:1040px){.promise-text,.clean-lead>p{max-width:66ch}}
/* The burger menu's Inventory panel on tablets: four tiles a row. Two across
   made 360px-wide photo tiles and a 1,100px panel to scroll through at 768. */
@media (min-width:561px) and (max-width:900px){.mega-cats{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* ---------- Round 4 polish (keyboard) ---------- */
/* The ticker never stops on its own, and hover is no help from a keyboard:
   a pause button at the right end of the band (hidden when motion is
   reduced, since the band is static then). */
.mq-ticker{position:relative}
.mq-ticker::after{content:"";position:absolute;top:0;right:0;bottom:0;pointer-events:none;
  width:calc(max(16px,(100% - var(--wrap)) / 2 + 20px) + 100px);background:linear-gradient(90deg,rgba(255,197,49,0),var(--sun) 50px)}
.mq-ticker.is-paused .mq-ticker-track{animation-play-state:paused}
.mq-ticker-pause{position:absolute;z-index:2;top:50%;right:max(16px,calc((100% - var(--wrap)) / 2 + 20px));transform:translateY(-50%);
  width:44px;height:44px;display:grid;place-items:center;padding:0;border:0;border-radius:50%;cursor:pointer;
  background:var(--ink);color:#fff;box-shadow:0 4px 12px rgba(13,26,45,.22);transition:background .2s}
.mq-ticker-pause:hover{background:#1d3352}
.mq-ticker .mq-ticker-pause:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
.mq-ticker-pause svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.mq-ticker-pause .tp-play{display:none;fill:currentColor;stroke-width:1.5}
.mq-ticker-pause[aria-pressed="true"] .tp-pause{display:none}
.mq-ticker-pause[aria-pressed="true"] .tp-play{display:block}
@media (prefers-reduced-motion:reduce){.mq-ticker-pause,.mq-ticker::after{display:none}}
/* Skip link: sun yellow on the dark utility bar (it was ink on ink). */
.skip:focus{background:var(--sun);color:var(--ink);box-shadow:0 8px 24px rgba(13,26,45,.35);text-decoration:none}
.skip:focus-visible{outline:3px solid #fff;outline-offset:2px}
/* The map takes keyboard focus (to pan with the arrow keys): show it. */
.contact-map:focus{outline:3px solid var(--blue);outline-offset:3px}
/* The phone call/book bar is white: a blue ring there (sun yellow was 1.6:1). */
.mbar :focus-visible{outline-color:var(--blue)}

/* ---------- Round 6 polish (colour & states) ---------- */
/* Decorative CSS text is not read aloud: the FAQ +/–, the badge and list
   ticks and the breadcrumb slash keep their look (old browsers use the first
   declaration) but drop out of the accessible name. */
.faq summary::after{content:"+";content:"+" / ""}
.faq[open] summary::after{content:"–";content:"–" / ""}
.badge::before{content:"✓";content:"✓" / ""}
.text-body ul li::before{content:"\2713";content:"\2713" / ""}
.crumbs li+li::before{content:"/";content:"/" / ""}
/* Category photos: the words start a third of the way down the card (three
   lines of description), and the wash under them was still light there —
   white titles measured 1.9–2.9:1 over sky and clouds. The dark now reaches
   up behind the title; the top of the photo stays clear. */
.cat::after{background:linear-gradient(to top,rgba(7,15,27,.92) 0,rgba(7,15,27,.74) 50%,rgba(7,15,27,.5) 72%,rgba(7,15,27,.12) 100%)}
.cat-body small{color:#DCE6F3}
/* Review stars carry the rating (role="img"): sun yellow alone was 1.6:1 on
   white, so each star gets a deeper amber edge (3.6:1) and keeps its fill. */
.stars{-webkit-text-stroke:.8px #B87900;paint-order:stroke fill}
/* The ghost button on the blue call-to-action band went lighter on hover
   (white on the paler blue, 4.1:1); it darkens instead. The hero keeps its own. */
.cta .btn-ghost:hover{background:rgba(7,15,27,.2);border-color:#fff}
/* BookFlow draws its focus rings in the theme's accent (sun yellow: 1.6:1 on
   its white cards, qty buttons and date window). Blue rings there (6:1); the
   close button on the window's blue header keeps a white one. */
body.prt :is(.wdz-browse,.wdz-browse-fab,.wdz-browse-coupons,.wdz-form,.wdz-gate) :focus-visible{outline-color:var(--blue)!important}
body.prt .wdz-gate .wdz-gate__close:focus-visible{outline-color:#fff!important}

/* Round 7 polish (performance): the Inventory panel's photos wait in data-*
   until the menu is about to be used (theme.js); until then the tile shows
   its mist ground, never a broken-image mark. */
.mcat-img img:not([src]){visibility:hidden}
/* Until Outfit and Inter arrive, text is set in Arial scaled to their width
   and line metrics (size-adjust/ascent/descent from the font files), so the
   swap does not re-wrap headings and push the page down. */
@font-face{font-family:'Inter Fallback';src:local('Arial'),local('ArialMT');font-weight:100 500;size-adjust:107.16%;ascent-override:90.4%;descent-override:22.51%;line-gap-override:0%}
@font-face{font-family:'Inter Fallback';src:local('Arial Bold'),local('Arial-BoldMT');font-weight:600 900;size-adjust:102.94%;ascent-override:94.11%;descent-override:23.43%;line-gap-override:0%}
@font-face{font-family:'Outfit Fallback';src:local('Arial'),local('ArialMT');font-weight:100 500;size-adjust:98.03%;ascent-override:102.01%;descent-override:26.52%;line-gap-override:0%}
@font-face{font-family:'Outfit Fallback';src:local('Arial Bold'),local('Arial-BoldMT');font-weight:600 900;size-adjust:94.8%;ascent-override:105.49%;descent-override:27.43%;line-gap-override:0%}

/* Round 8 polish (booking flow): BookFlow's date window, cart form, item
   calendar and date bar in Marquee's type and readable greys.
   - The window's last button ("Show me what's available") sat on the sun
     accent with white text (1.6:1): it takes the orange call-to-action
     instead, like Book Now in the header.
   - BookFlow's own greys (weekday letters 2.5:1, "Earliest available date"
     and the summary labels 3.1:1, the close cross 2.6:1) use Marquee's muted
     ink (5.4:1).
   - Buttons don't inherit a font, so BookFlow's buttons, calendar days and
     date bar were in Arial: they take the page's font, the window's main
     buttons Outfit like every other Marquee button. */
html body.prt .wdz-gate .wdz-gate__btn--primary[data-wdz-gate-confirm]{background:var(--orange-btn)!important;color:#fff!important}
html body.prt .wdz-gate .wdz-gate__btn--primary[data-wdz-gate-confirm]:hover{background:var(--orange-btn-hv)!important}
html body.prt .wdz-gate .wdz-gate__close{color:var(--muted)!important}
html body.prt :is(.wdz-gate,.wdz-form) :is(.wdz-cal__wd,.wdz-gate__hint,.wdz-gate__summary dt){color:var(--muted)!important}
html body.prt .wdz-itemcal__legend span{color:var(--muted)!important}
body.prt :is(.wdz-gate,.wdz-gate-sticky,.wdz-form,.wdz-itemcal,.wdz-browse,.wdz-browse-fab,.wdz-browse-coupons) :is(button,input,select,textarea){font-family:inherit}
body.prt :is(.wdz-gate__btn,.wdz-form__btn){font-family:var(--disp)!important}

/* Round 9 polish (typography).
   - Headings: h1/h2 were balanced in round 1; h3-h6, card and product names
     and FAQ questions now balance too, so a two-line title never ends on one
     word ("Party Palace Double Lane Combo - Wet or / Dry", "Can you set up on
     concrete or / indoors?").
   - Running text wraps "pretty": no single short word left alone on the
     last line of a paragraph, list item, quote or caption ("before your
     event / begins."). */
:is(h3,h4,h5,h6,.prts-fqq,[class*="__title"],[class*="card-name"],[class*="__name"]){text-wrap:balance}
:is(p,li,dd,blockquote,figcaption){text-wrap:pretty}

/* Round 10 polish (imagery).
   - Elementor's `.elementor img{height:auto}` (same weight as ours, loaded
     later) set the favourites' photos to their own shape, so on Elementor-built
     pages a picture ran past its 4:3 frame (5px on phones; a portrait photo
     would lose a third) instead of sitting inside it. */
body .rent-img img{height:100%}

/* ---------- Round 11 polish (motion & interaction states) ---------- */
/* Touch screens keep :hover after a tap, so a tapped card stayed lifted (and its
   photo zoomed) after coming back to the page. The lift is for a mouse. */
@media (hover:none){
  :is(.btn,.cat,.aud a,.rent,.prt-blog-card,.cities a):hover{transform:none}
  :is(.rent,.mcat):hover :is(.rent-img img,.mcat-img img){transform:none}
}
/* Press feedback: buttons lifted on hover but showed nothing while pressed
   (and on touch screens, where there is no hover, nothing at all). The chunky
   orange/blue buttons sink onto their 3D edge; the rest settle back down. */
.btn:active{transform:translateY(1px)}
.btn-primary:active,.elementor .btn-primary:active{transform:translateY(4px);box-shadow:0 2px 0 var(--orange-btn-dk)}
.btn-blue:active,.elementor .btn-blue:active{transform:translateY(4px);box-shadow:0 2px 0 var(--blue-dk)}
.rent-act .btn:active{transform:translateY(4px);box-shadow:0 1px 0 var(--blue-dk)}
@media (hover:hover){:is(.cat,.aud a,.rent,.prt-blog-card):active{transform:translateY(-1px);box-shadow:var(--sh-1)}}
@media (hover:none){:is(.cat,.aud a,.rent,.prt-blog-card):active{transform:scale(.985)}}
.cities a:active{transform:translateY(0)}
:is(.hdr-cart,.burger,.socials a):active{transform:scale(.94)}
.mq-ticker .mq-ticker-pause:active{transform:translateY(-50%) scale(.92)}
body.prt .pageDateRangeWrapper .elementor-button:active{transform:translateY(1px)!important}
.hdr-cart{transition:border-color .2s,color .2s,transform .12s ease}
/* Inline links on dark grounds had no hover change at all. */
:is(.hero-note,.phead-note) a:hover{text-decoration:underline;text-underline-offset:3px}
/* Only what is meant to move is animated: these rules animated every property
   ("all"), so a margin set by the edge-nudge script or a padding change while
   resizing slid instead of snapping. */
.drop{transition:opacity .18s ease,transform .18s ease,visibility .18s}
.cat-go{transition:opacity .18s ease,transform .18s ease}
.cities a{transition-property:background-color,color,border-color,transform}
/* Reduced motion: transitions were cut to ~0 but hover still jumped cards up
   4px and zoomed photos; colour and shadow carry the hover instead. An
   infinite animation squeezed to 0.001ms also kept repainting every frame
   (plugin pulses, spinners), so each now runs once. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-iteration-count:1!important}
  :is(.btn,.cat,.aud a,.rent,.prt-blog-card,.cities a):is(:hover,:active),
  .prt .io_product_infobox .elementor-button.io_button:hover{transform:none}
  :is(.rent,.mcat):is(:hover,:focus-visible) :is(.rent-img img,.mcat-img img),
  .rent:hover .rent-go .ic{transform:none}
  :is(.hdr-cart,.burger,.socials a):active{transform:none}
}

/* ---------- Round 12 polish (inner company pages) ---------- */
/* The About, Safety, FAQ, Reviews, Events and event pages draw their buttons
   with core's flat `.prts-btn` (weight 800, no edge) and their rental picks
   with a square-cornered Add to Cart, next to the home page's chunky pill
   buttons on a 3D edge. They now match the home page: same face (Outfit 700),
   the orange/blue buttons stand on their darker edge, lift on hover and sink
   onto it when pressed; the light "ghost" ones are the home page's white
   outline pill. */
.prts-btn{font-family:var(--disp);font-weight:700;transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease,border-color .16s ease,color .16s ease}
.prts-btn:not(.prts-btn--ghost){box-shadow:0 6px 0 var(--orange-btn-dk)}
.prts-btn:not(.prts-btn--ghost):hover{transform:translateY(-2px);box-shadow:0 4px 0 var(--orange-btn-dk)}
.prts-btn:not(.prts-btn--ghost):active{scale:none;transform:translateY(4px);box-shadow:0 2px 0 var(--orange-btn-dk)}
.prts-values__guar .prts-btn:not(.prts-btn--ghost){box-shadow:0 6px 0 rgba(13,26,45,.4)}
.prts-values__guar .prts-btn:not(.prts-btn--ghost):hover{box-shadow:0 4px 0 rgba(13,26,45,.4)}
.prts-values__guar .prts-btn:not(.prts-btn--ghost):active{box-shadow:0 2px 0 rgba(13,26,45,.4)}
/* Inside the FAQ search field the button sits in the pill: no edge there. */
.prts-fqsearch .prts-btn:not(.prts-btn--ghost),.prts-fqsearch .prts-btn:not(.prts-btn--ghost):is(:hover,:active){box-shadow:none;transform:none}
.prts:not(.prts-strip.is-bold) .prts-btn--ghost:not(.prts-ctabox .prts-btn--ghost){background:#fff;color:var(--ink);border-color:var(--line);box-shadow:var(--sh-1)}
.prts:not(.prts-strip.is-bold) .prts-btn--ghost:not(.prts-ctabox .prts-btn--ghost):hover{background:#fff;border-color:var(--blue);color:var(--blue);transform:translateY(-2px)}
.prts:not(.prts-strip.is-bold) .prts-btn--ghost:not(.prts-ctabox .prts-btn--ghost):active,.prts-btn--ghost:active{scale:none;transform:translateY(1px)}
/* Event-page rental picks: the home favourites' blue Add to Cart pill. */
.pe-pick__actions .prt-atc:not([class*="btn"]):not(.is-link){font-family:var(--disp);font-weight:700;font-size:.94rem;padding:11px 22px;border-radius:999px;
  background:var(--blue);border-color:var(--blue);box-shadow:0 4px 0 var(--blue-dk);transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease}
.pe-pick__actions .prt-atc:not([class*="btn"]):not(.is-link):not(.is-waiting):hover{background:var(--blue-dk);border-color:var(--blue-dk);transform:translateY(-2px);box-shadow:0 4px 0 var(--blue-dk)}
.pe-pick__actions .prt-atc:not([class*="btn"]):not(.is-link):not(.is-waiting):active{scale:none;transform:translateY(4px);box-shadow:0 1px 0 var(--blue-dk)}
/* "Review us on …" buttons in the theme's face, like its other pills. */
.prts-rleave__btn{font-family:var(--disp);font-weight:700}
/* Touch: no hover lift (a tapped button kept it), the press still sinks.
   Reduced motion: no movement at all; colour and the edge carry it. */
@media (hover:none){
  .prts-btn:hover,.pe-pick__actions .prt-atc:hover{transform:none!important}
  .prts-btn:not(.prts-btn--ghost):active,.pe-pick__actions .prt-atc:not(.is-link):active{transform:translateY(4px)!important}
  .prts-btn--ghost:active{transform:translateY(1px)!important}
  .prts-fqsearch .prts-btn:active{transform:none!important}
}
@media (prefers-reduced-motion:reduce){
  .prts-btn:is(:hover,:active),.pe-pick__actions .prt-atc:is(:hover,:active){transform:none!important}
}

/* ---------- Round 13 polish (service area hub + town pages) ---------- */
/* The hub's and town pages' town list ("Proud to serve the following areas")
   was core's plain blue link list in three newspaper columns, while the home
   page's service area is Marquee's white town pills. Same pills here (with the
   pin, beside the map), 44px at every width; the town being viewed is the dark
   pill, "All areas in between" a quiet dashed one. */
.prts-amap__list{columns:auto;display:flex;flex-wrap:wrap;gap:10px}
.prts-amap__list li{margin:0}
.prts-amap__list :is(a,span){min-height:44px;padding:9px 18px 9px 14px;gap:7px;background:#fff;border:1px solid var(--line);border-radius:var(--r-pill);
  font-family:var(--disp);font-weight:600;font-size:.95rem;line-height:1.2;color:var(--ink);box-shadow:var(--sh-1);
  transition:background-color .16s ease,color .16s ease,border-color .16s ease,transform .16s ease}
.prts-amap__list svg{width:15px;height:15px;flex:none;color:var(--orange-dk)}
.prts-amap__list a:hover{background:var(--blue);border-color:var(--blue);color:#fff;text-decoration:none;transform:translateY(-2px)}
.prts-amap__list a:active{transform:translateY(0)}
.prts-amap__list a:hover svg{color:#fff}
.prts-amap__list a[aria-current]{background:var(--ink);border-color:var(--ink);color:#fff;margin:0;padding:9px 18px 9px 14px;box-shadow:var(--sh-1);border-radius:var(--r-pill)}
.prts-amap__list a[aria-current] svg{color:var(--sun)}
.prts-amap__list .is-more span{background:transparent;border-style:dashed;border-color:#B9C6D8;box-shadow:none;color:var(--muted);font-weight:500}
.prts-amap__list a:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.prts .prts-amap__intro{margin-bottom:18px}
@media (hover:none){.prts-amap__list a:hover{transform:none}}
@media (prefers-reduced-motion:reduce){.prts-amap__list a:is(:hover,:active){transform:none}}
/* The header's Service Area menu and the footer's town list now say which town
   page is open (aria-current), like the Company menu already did. */
.drop:not(.drop-co) a[aria-current]{background:var(--blue-lt);color:var(--blue-dk);font-weight:700}
.ft a[aria-current]{color:#fff;text-decoration:underline;text-decoration-color:var(--orange);text-decoration-thickness:2px;text-underline-offset:4px}
.cities a[aria-current]{background:var(--ink);border-color:var(--ink);color:#fff}

/* ---------- Round 14 polish (blog, search, 404, empty states) ---------- */
/* 404: one search pill like the blog/search heroes (icon, field and button in
   one white pill) instead of WordPress's bare field + separate button. */
.phead .mq-search{position:relative;display:flex;flex-wrap:nowrap;align-items:center;gap:8px;max-width:560px;margin-top:28px;padding:6px 6px 6px 50px;
  background:#fff;border:2px solid transparent;border-radius:var(--r-pill);box-shadow:0 14px 34px rgba(0,0,0,.25)}
.phead .mq-search:focus-within{outline:3px solid var(--sun);outline-offset:3px}
.mq-search__ic{position:absolute;left:19px;top:50%;translate:0 -50%;display:flex;color:var(--blue);font-size:1.15rem}
.phead .mq-search .search-field{flex:1;min-width:0;padding:.6em .2em;border:0;background:none;box-shadow:none;font-weight:600;color:var(--ink)}
.phead .mq-search .search-field::placeholder{color:var(--muted);opacity:1}
.phead .mq-search .search-field:focus{box-shadow:none;outline:none}
.phead .mq-search .search-submit{flex:none;min-height:44px;padding:11px 24px;font-size:1rem}
@media (max-width:560px){.phead .mq-search{padding-left:44px}.mq-search__ic{left:16px}.phead .mq-search .search-submit{padding:11px 16px}}
/* Posts (and search results) without a picture: the pale wash with a small
   blue pencil read as an image that failed to load. Marquee's navy hero
   ground with the sun-yellow mark and the orange-to-blue rule instead. */
:is(.prt-blog-card__ph,.prt-blog-feature__ph){position:relative;color:var(--sun);
  background:radial-gradient(420px 320px at 85% -10%,rgba(18,87,227,.55),transparent 70%),linear-gradient(150deg,#12304F,#0D1A2D)}
:is(.prt-blog-card__ph,.prt-blog-feature__ph)::after{content:"";position:absolute;left:0;right:0;bottom:0;height:5px;background:linear-gradient(90deg,var(--orange),var(--sun) 60%,var(--blue))}
.prt-blog-card--noimg .prt-blog-card__img,.prt-blog-feature__card--noimg .prt-blog-feature__img{background:#0D1A2D}
/* Long post titles: cards stop at four lines (the full title stays the
   link's name); a long article title is sized by core's --long class. */
.prt-blog-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;line-clamp:4;overflow:hidden;overflow-wrap:anywhere}
/* Empty states (core's "No matches for that search" / "No posts here yet"
   card): Marquee's mist panel with a dashed edge, the icon on a white disc. */
.prt-blog-empty{background:var(--mist);border:2px dashed #C9D5E5;border-radius:var(--r-lg);box-shadow:none}
.prt-blog-empty__ic{background:#fff;color:var(--blue);box-shadow:var(--sh-1)}
.mq-search__ic svg{width:18px;height:18px}

/* ===== Round 15 (SEO): card titles are real <h3 class="mq-ct"> (were <b role="heading">,
   which search engines don't read as headings). Same look as before: the contextual
   .cat-body/.aud-body/.cstep/.rent-body rules size them; this resets the h3 defaults. */
body h3.mq-ct{margin:0;font-size:1rem;font-weight:700;line-height:inherit;letter-spacing:normal;color:inherit;text-transform:none}
/* Footer column titles are h2s now (were h4 with aria-level 2); .ft h2.ft-h in theme.css keeps their look. */

/* ---------- Round 17 polish (editing: empty, very long and many values) ---------- */
/* A word longer than its box (a long town, e-mail, product or stat) breaks inside
   the box instead of running out of a card or past the screen. Text that fits is
   unchanged (only an over-long word moves). */
:is(.util,.hero,.phead,.sec,.prts,.ft,.mq-ticker,.mbar){overflow-wrap:anywhere}
.stats>.stat{min-width:0}
/* Long button labels wrap inside the button instead of being cut at the screen edge. */
:is(.hero-btns,.area-btns,.revs-more,.clean-lead,.guar,.text-body,.contact-card) .btn,.prts-btn{white-space:normal;max-width:100%;text-align:center;text-wrap:balance}
/* Header: menu words never break in half; the business name gives way first (it clamps). */
.nav-link{white-space:nowrap}
@media (min-width:901px){.nav>li{flex-shrink:0}}
/* Utility bar: a long address, hours or e-mail wraps onto another line instead of being cut. */
.util .wrap{flex-wrap:wrap;overflow:visible}
.util-l,.util-r{white-space:normal;min-width:0;flex-wrap:wrap}
/* Hero trust points: more than fit on one line make a rounded box, not an oval. */
.trustbar{border-radius:22px}
/* Event cards keep the title in the card: long titles stop at three lines, texts at four. */
.aud-body .mq-ct{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden}
.aud-body small{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;line-clamp:4;overflow:hidden}
/* Other numbers of events than the design's five: even rows, never one card alone. */
@media (min-width:1101px){.aud.aud--6{grid-template-columns:repeat(3,1fr)}.aud.aud--7,.aud.aud--8{grid-template-columns:repeat(4,1fr)}}
@media (min-width:561px) and (max-width:1100px){
  .aud.aud--4>*,.aud.aud--4>*:nth-child(n+4){grid-column:span 3}
  .aud.aud--6>*:nth-child(n+4),.aud.aud--8>*:nth-child(-n+6){grid-column:span 2}
  .aud.aud--6>*:nth-child(n+4),.aud.aud--8>*:nth-child(-n+6){aspect-ratio:4/5}
  .aud.aud--4>*{aspect-ratio:16/10}
}
/* Reduced motion (the ticker stands still as a wrapped list): a long point wraps too. */
@media (prefers-reduced-motion:reduce){.mq-ticker-list li{white-space:normal}}

/* ---------- Round 18 polish (resilience: no JavaScript, missing data) ---------- */
/* Without JavaScript, or when theme.js did not load (html loses .js, functions.php): menus
   open on hover or keyboard focus (desktop), the phone menu opens through the links to
   #nav beside the burger (header.php), with every panel shown inside it. */
.burger-nojs{display:none}
@media (min-width:901px){
  html:not(.js) .nav>li[data-drop]:is(:hover,:focus-within) .drop{opacity:1;visibility:visible;transform:translateY(0)}
}
@media (max-width:900px){
  html:not(.js) .burger:not(.burger-nojs){display:none}
  html:not(.js) .burger-nojs--open{display:block}
  html:not(.js) .hdr:has(#nav:target) .burger-nojs--open{display:none}
  html:not(.js) .hdr:has(#nav:target) .burger-nojs--close{display:block}
  .burger-nojs--close span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
  .burger-nojs--close span:nth-child(2){opacity:0}
  .burger-nojs--close span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
  /* (Hung from the header's lower edge: without the script nothing measures where that is.) */
  html:not(.js) #nav:target{position:absolute;top:100%;bottom:auto;max-height:calc(100svh - 100% - 8px);
    transform:translateX(0);visibility:visible;transition:none;box-shadow:0 18px 30px rgba(9,18,32,.18);padding-bottom:96px}
  html:not(.js) #nav .drop{display:block}
  html:not(.js) #nav .drop.wide,html:not(.js) #nav .drop.cols3{display:grid}
}
/* The Inventory panel's photos: the <noscript> copies when scripts are off. */
@media (scripting:none){
  .mcat-img noscript{display:contents}
  .mcat-img img[data-src]{display:none}
}
/* A very long e-mail address breaks inside its contact card (the phone layout's
   inline-flex link kept it on one line, 43px past a 390px screen). */
.ways a{max-width:100%}
.ways a[href^="mailto:"]{overflow-wrap:anywhere}
/* Footer without a Rentals column (no rentals yet): three columns, no empty fourth. */
@media (min-width:1041px){.ft-grid:not(:has(>:nth-child(4))){grid-template-columns:1.5fr 1fr 1.3fr}}
/* Round 19 (cross-browser): the item page's price box is the platform's auto-fit grid sized
   to fit its content; Firefox sizes such a grid as one column, so "$199" and "per day"
   stacked in a tall box there. Two content-sized columns read the same in every browser. */
body.prt .io_product_infobox .io_product_price_box{grid-template-columns:auto auto!important;align-items:baseline!important}
/* Round 19 (cross-browser): Safari on iPhone enlarges text on its own when the phone is
   turned sideways; the layouts already set their own phone sizes. */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
/* Round 20 (premium pass): plain pages (town pages written by WDZ Toolkit, pages pasted from an
   older site) read in one comfortable column instead of a 1160px line; core's message form
   centres its full-width "Send message" label like every other button. */
.wrap.pagebody>.prt-page>.prt-page__body{max-width:860px;margin-inline:auto}
form[data-contact] .prts-btn{justify-content:center}
.wrap.pagebody .prt-page__body>.wdz-entry-faq{max-width:none;margin-inline:0}
/* Round 20: the inventory page's own title was drawn at 34px under a 61px category title one
   click deeper — it now takes the same display size, centred over its intro as before. */
body.prt .prt-io .entry-content>center h1{font-size:clamp(34px,4.6vw,56px);letter-spacing:-.03em;line-height:1.08;margin:8px 0 14px}
body.prt .prt-io .entry-content>center h2{margin-top:26px}
