.elementor-kit-7{--e-global-color-primary:#6EC1E4;--e-global-color-secondary:#54595F;--e-global-color-text:#7A7A7A;--e-global-color-accent:#61CE70;--e-global-typography-primary-font-family:"Montserrat";--e-global-typography-primary-font-weight:800;--e-global-typography-secondary-font-family:"Montserrat";--e-global-typography-secondary-font-weight:700;--e-global-typography-text-font-family:"Source Sans 3";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Source Sans 3";--e-global-typography-accent-font-weight:600;}.elementor-kit-7 e-page-transition{background-color:#FFBC7D;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1200px;}.e-con{--container-max-width:1200px;--container-default-padding-top:0px;--container-default-padding-right:0px;--container-default-padding-bottom:0px;--container-default-padding-left:0px;}.elementor-widget:not(:last-child){--kit-widget-spacing:20px;}.elementor-element{--widgets-spacing:20px 20px;--widgets-spacing-row:20px;--widgets-spacing-column:20px;}{}h1.entry-title{display:var(--page-title-display);}.site-header .site-branding{flex-direction:column;align-items:stretch;}.site-header{padding-inline-end:0px;padding-inline-start:0px;}.site-footer .site-branding{flex-direction:column;align-items:stretch;}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}:root { --brand-red:#AC1F33; --brand-red-deep:#8A1828; --brand-navy:#12243F; --brand-yellow:#FFC72C; --ink:#101A28; --muted:#5A6472; --line:#DCE3EB; --surface:#F2F5F8; --paper:#FFFFFF; --ok-green:#1B7A4B; --font-heading:'Montserrat', system-ui, sans-serif; --font-body:'Source Sans 3', system-ui, sans-serif; --text-xs:clamp(0.86rem, 0.82rem + 0.18vw, 0.96rem); --text-base:clamp(1.06rem, 1rem + 0.28vw, 1.19rem); --text-lg:clamp(1.28rem, 1.18rem + 0.46vw, 1.55rem); --text-xl:clamp(1.55rem, 1.38rem + 0.78vw, 2.05rem); --text-2xl:clamp(1.9rem, 1.6rem + 1.3vw, 2.85rem); --text-3xl:clamp(2.35rem, 1.85rem + 2.2vw, 4.1rem); --text-price:clamp(3.4rem, 2.4rem + 4.4vw, 6.5rem); --space-xs:clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem); --space-sm:clamp(0.75rem, 0.71rem + 0.19vw, 0.94rem); --space-md:clamp(1rem, 0.94rem + 0.28vw, 1.25rem); --space-lg:clamp(1.5rem, 1.4rem + 0.5vw, 2rem); --space-xl:clamp(2.25rem, 2rem + 1.2vw, 3.5rem); --space-section:clamp(3.5rem, 2.9rem + 3vw, 6.5rem); --radius-sm:6px; --radius-md:12px; }
/* Start custom CSS */@font-face{font-family:'Montserrat';font-style:normal;font-weight:400 900;font-display:swap;src:url('https://premiumtechnology.au/wp-content/uploads/cg-fonts/Montserrat.woff2') format('woff2');}
@font-face{font-family:'Source Sans 3';font-style:normal;font-weight:200 900;font-display:swap;src:url('https://premiumtechnology.au/wp-content/uploads/cg-fonts/SourceSans3.woff2') format('woff2');}

/* ===== CG nav + mega menu (CSS-driven; Elementor's nested-menu JS does not wire panels authored programmatically) ===== */
.elementor-widget-n-menu .e-n-menu-heading{gap:clamp(.55rem,1.15vw,1.25rem);}
.elementor-widget-n-menu .e-n-menu-item{position:relative!important;}
.elementor-widget-n-menu .e-n-menu-title-container{font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;color:var(--brand-navy);text-decoration:none;padding-block:.45rem;border-block-end:2px solid transparent;white-space:nowrap;}
.elementor-widget-n-menu .e-n-menu-item:hover .e-n-menu-title-container,
.elementor-widget-n-menu .e-n-menu-item:focus-within .e-n-menu-title-container{color:var(--brand-red);border-block-end-color:var(--brand-red);}
.elementor-widget-n-menu .e-n-menu-dropdown-icon{background:none;border:0;padding:0 0 0 .34em;color:var(--brand-navy);}
.elementor-widget-n-menu .e-n-menu-item:hover .e-n-menu-dropdown-icon{color:var(--brand-red);}
.elementor-widget-n-menu .e-n-menu-dropdown-icon svg{width:.55em;height:.55em;}

/* panel: anchored under its item, not full bleed */
.elementor-widget-n-menu .e-n-menu-content{top:100%!important;inset-inline-start:-12px!important;inset-inline-end:auto!important;width:max-content!important;max-width:none!important;pointer-events:none;opacity:0;transform:translateY(6px);transition:opacity .14s ease,transform .14s ease;z-index:50;}
.elementor-widget-n-menu .e-n-menu-item:hover .e-n-menu-content,
.elementor-widget-n-menu .e-n-menu-item:focus-within .e-n-menu-content{pointer-events:auto;opacity:1;transform:none;}
.elementor-widget-n-menu .e-n-menu-item:hover .e-n-menu-content > .e-con:not(.e-active),
.elementor-widget-n-menu .e-n-menu-item:focus-within .e-n-menu-content > .e-con:not(.e-active){display:flex;}

/* ===== mobile =====
   NOTE: kit custom CSS is enqueued BEFORE global-*-frontend-*.css, so equal-specificity
   rules lose on source order. Mobile overrides of global classes need !important. */
@media (max-width:767px){
  .elementor .cg-head-txt{display:none!important;}
  .elementor .cg-util-right > .cg-util-label{display:none!important;}
  .elementor .cg-util-bar > .cg-util-label{display:none!important;}
  .elementor .cg-util-bar{justify-content:flex-end!important;}
  .elementor .cg-util-book{font-size:10.5px!important;}
  .elementor .cg-logo{width:104px!important;}
  .elementor .cg-bar{gap:var(--space-sm)!important;justify-content:space-between!important;}
}

/* van band: yellow emphasis, matching the mockup's .band em */
.elementor .cg-band-h2 em,.elementor .cg-band-p em{font-style:normal;color:var(--brand-yellow);}
/* van must sit above the hero's stacking context */
.elementor .cg-hero{z-index:0;}

/* 'If it is tech' list: red rotated-square bullet, matching the mockup's .all a::before */
.elementor .cg-all-link::before{content:'';flex:none;width:7px;height:7px;border-radius:2px;background:var(--brand-red);transform:rotate(45deg);}
/* section headings stay on one line, as the mockup's white-space:nowrap does */
.elementor .cg-h2-fit,.elementor .cg-sub-fit{white-space:nowrap;}
@media (max-width:767px){.elementor .cg-h2-fit,.elementor .cg-sub-fit{white-space:normal;}}

/* pricing table — match the mockup: numeric columns right-aligned with tabular figures,
   last row loses its bottom rule (tbody tr:last-child td{border-bottom:0}) */
.elementor .cg-tbl > *:nth-child(3n+2),.elementor .cg-tbl > *:nth-child(3n+3){text-align:right;font-variant-numeric:tabular-nums;}
.elementor .cg-tbl > *:nth-last-child(-n+3){border-block-end-width:0;}


/* page title bar — SEOPress breadcrumb on navy */
.elementor .cg-pagetitle-crumb .breadcrumb{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.15em;margin:0;padding:0;list-style:none;}
.elementor .cg-pagetitle-crumb,.elementor .cg-pagetitle-crumb *{color:#B9C6D8;font-size:var(--text-xs);}
.elementor .cg-pagetitle-crumb a,.elementor .cg-pagetitle-crumb a *{color:var(--paper);text-decoration:none;}
.elementor .cg-pagetitle-crumb a:hover,.elementor .cg-pagetitle-crumb a:hover *{color:var(--brand-yellow);text-decoration:underline;}
.elementor .cg-pagetitle-crumb .breadcrumb-item + .breadcrumb-item::before{content:'/';opacity:.45;padding-inline:.45em;color:#B9C6D8;}
@media (max-width:767px){.elementor .cg-pagetitle-crumb .breadcrumb{justify-content:flex-start;}}

/* page title H1 — cg-pagetitle-h emits NO CSS.
   theme-post-title is a v3 widget, so the class is applied via _css_classes, which puts it in
   the HTML but never registers it as used — and Elementor v4 only generates global-class CSS
   for classes referenced through the atomic `classes` prop. The class exists in the DB with
   colour, weight and a clamp size, and produced nothing: the h1 rendered #333 / -apple-system
   / 16px, over-painted by Elementor's stock #6EC1E4 heading colour, on every page since 14 Aug.
   Same reason cg-pagetitle-crumb is hand-written above. Declared props replicated here. */
.elementor .cg-pagetitle-h,
.elementor .cg-pagetitle-h .elementor-heading-title{
  font-family:var(--font-heading);font-weight:800;
  font-size:clamp(1.65rem, 1.2rem + 1.7vw, 2.6rem);
  line-height:1.1;letter-spacing:-0.025em;color:var(--paper);margin:0;
}

/* Empty repeater slots — the service template places a FIXED number of slots bound to ACF's
   flat repeater meta (faqs_N_question, symptoms_N_symptom). Elementor has no way to loop an
   ACF repeater, so unused slots render as empty elements. Hide them.
   Services carry 3–8 symptoms and 4–6 FAQs, so most pages leave slots unused. */
.elementor .nvm-cg-faq:has(> .nvm-cg-faq__q:empty){display:none;}
.elementor .cg-inc-item:has(> p:empty){display:none;}

/* Service hero — the Single: Service template reuses the home hero shell (cg-hero + media +
   scrim). cg-answer-block and cg-proof are authored for LIGHT sections and set ink/navy, which
   is unreadable over the photo. Kit CSS loads BEFORE global-class CSS, so these need the
   .elementor prefix AND !important to win on source order. */
.elementor .cg-hero .cg-answer-block{color:var(--paper) !important;}
.elementor .cg-hero .cg-proof{color:var(--paper) !important;}

/* Service hero scrim on narrow viewports.
   cg-hero-scrim is a 92deg LEFT-TO-RIGHT gradient: opaque at the left edge, almost clear by
   78%. That works while cg-hero-grid is two columns and the copy sits in the dark left half.
   At the tablet breakpoint the grid collapses to ONE column, the copy spans the full width,
   and its right-hand half lands on bright sky/stonework — unreadable.
   Scoped to .elementor-location-single so the signed-off HOME hero (post 94, no single
   template) is untouched. */
@media (max-width:1024px){
  .elementor-location-single .cg-hero .cg-hero-scrim{background:#08101ED9 !important;}
}

/* Unpopulated answer block would render as a bare 4px red rule floating in the hero. */
.elementor .cg-answer-block:empty{display:none;}

/* The page-title band is embedded with the `template` widget, which carries Elementor's
   default 20px widget bottom margin — a white strip between the navy band and the hero. */
.elementor-location-single .elementor-widget-template{margin-block-end:0 !important;}

/* ACF textarea prose: acf-text strips HTML, so local_context / job_example are plain text
   with blank lines between paragraphs. pre-line renders those breaks. Harmless on the
   single-line cg-body uses elsewhere, which contain no newlines. */
.elementor .cg-body{white-space:pre-line;}
/* Location prose sits under centred H2s — centre the measure so it does not hang left. */
.elementor-333 .cg-body{margin-inline:auto !important;}
/* …but not inside a card — there the heading is left-aligned, so centring the body
   measure leaves the two visibly out of line. */
.elementor-333 .cg-card .cg-body{margin-inline:0 !important;}

/* Trustindex badge — third-party, injected ~1s after load. Reserve its measured height so
   the hero CTAs below it never shift (CLS). Measured: 62px desktop, 82px at 375px where the
   badge wraps. Re-measure if the widget layout is changed in the Trustindex dashboard. */
.cg-trustindex-slot{min-height:62px;}
@media (max-width:767px){.cg-trustindex-slot{min-height:82px;}}

/* Alignment is now set in the TRUSTINDEX DASHBOARD, which ships its own scoped CSS
   (.ti-widget[data-layout-id][data-set-id][data-pid] .ti-widget-container{text-align:left}).
   Our !important overrides were REMOVED 15 Aug — they would have masked any future dashboard
   change. Only the CLS height reserves below are ours to own. */
/* (was) Trustindex badge sits BELOW the hero CTAs and left-aligns with them. Trustindex's own
   stylesheet (106-drop-shadow.css) sets text-align:center on .ti-widget and is injected by
   JS late in the cascade, so this needs !important to win. */

/* Footer Trustindex badge (layout 101 top-rated, 4th column).
   .ti-widget-container sets its own text-align:center, which pushed the card 63px right of
   the 'Our rating' heading while the other three columns are left-aligned. Left-align the
   card, but keep the card's OWN internals centred — it is a badge, not a text block.
   Scoped to the footer so the home hero badge (layout 106) is untouched.
   Height reserved from measurement: 208px desktop. Re-measure if the layout is changed. */
.cg-trustindex-footer{min-height:208px;}


/* Trustindex badge on the service + location heroes (layout 27, button category — INLINE,
   unlike the fomo layout it replaced which pinned itself to the viewport).
   Inline means it shifts the layout when injected ~1s after load, so reserve its measured
   height. Measured: 62px desktop, 82px at 375px where it wraps — same as the home hero badge.
   Re-measure if the widget layout is changed in the Trustindex dashboard. */
.cg-trustindex-hero{min-height:62px;}
@media (max-width:767px){.cg-trustindex-hero{min-height:82px;}}

/* Hide the theme-post-content band on pages with no body copy.
   The widget renders nothing at all when post_content is empty, leaving a 220px
   white gap on every service and location page that has no body copy yet.
   Matches only a cg-section whose direct cg-wrap child has no element children,
   so the final CTA band (no cg-wrap) is untouched. */
.elementor .cg-section:has(> .cg-wrap):not(:has(> .cg-wrap > *)){display:none;}/* End custom CSS */
/* Start Custom Fonts CSS */@font-face {
	font-family: 'Montserrat';
	font-style: normal;
	font-weight: 400;
	font-display: auto;
	src: ;
}
@font-face {
	font-family: 'Montserrat';
	font-style: normal;
	font-weight: 700;
	font-display: auto;
	src: ;
}
@font-face {
	font-family: 'Montserrat';
	font-style: normal;
	font-weight: 800;
	font-display: auto;
	src: ;
}
/* End Custom Fonts CSS */
/* Start Custom Fonts CSS */@font-face {
	font-family: 'Source Sans 3';
	font-style: normal;
	font-weight: 400;
	font-display: auto;
	src: ;
}
@font-face {
	font-family: 'Source Sans 3';
	font-style: normal;
	font-weight: 600;
	font-display: auto;
	src: ;
}
@font-face {
	font-family: 'Source Sans 3';
	font-style: normal;
	font-weight: 700;
	font-display: auto;
	src: ;
}
/* End Custom Fonts CSS */