/* Structural chrome ported from the static site's index.html/nav.js — the
   parts that aren't Elementor Pro widgets on the free tier (responsive nav,
   the quote slide-over). Content styling (headings, body copy, section
   colors) comes from Elementor's Global Colors/Fonts/Theme Style instead. */

/* The quote panel is `position:fixed;right:0` pushed off-screen with
   `transform:translateX(100%)` — off-screen for scrolling/painting purposes,
   but its un-transformed box still registers as horizontal overflow on the
   document in some engines, adding an accidental scrollbar/scroll-right gap
   the whole page long. Confirmed via scrollWidth vs clientWidth against the
   running site, not assumed; this is the standard guard for it. */
html,body{overflow-x:hidden;margin:0}

/* -- Layout. Flex/grid direction, gap, padding, margin, widths, min-height
   and border-radius on Elementor Containers are ALL set natively in
   homepage-builder.php (Elementor prints its own per-element CSS for these
   with a guaranteed fallback default — e.g. 10px padding — at the same
   specificity as a ported class, so a plain CSS rule silently loses; see
   that file's header comment). What's left here is only what Elementor has
   no control for: max-width+margin:auto centering (confirmed safe — see
   below), text-align, exact font sizes, and fixed logo/image sizing. -- */
.sme-page{width:100%;font-family:'Lato',-apple-system,sans-serif}
.sme-page *{box-sizing:border-box}
.sme-page a{text-decoration:none}

/* Elementor's own outer-container max-width rule (`max-width:min(100%,var(--width))`)
   computes to a no-op when a container's content_width stays the default
   'boxed' (no --width variable is set, and var() has no fallback there), so
   these plain max-width+margin:auto rules apply uncontested — confirmed via
   computed styles against the running site, not assumed. */
.header-inner,.hero-row,.wrap-gutter,.why-row,.footer-inner{max-width:1440px;margin-left:auto;margin-right:auto}

/* Header/footer band color + internal flex layout for plain-PHP-rendered
   templates (single-sme_product.php, taxonomy-sme_product_category.php,
   via includes/site-chrome.php) — a second, CSS-only copy of layout the
   homepage sets natively on its Elementor Containers instead.
   Everything here is scoped under `.sme-plain` (a class those templates
   put on their root wrapper) rather than applied to the shared class names
   globally: an earlier unscoped version assumed Elementor's own CSS would
   always win on the homepage, but Elementor applies inline padding via a
   plain `.e-con{padding-inline-*}` rule that these tied with and beat
   (later in source order), quietly shifting the homepage header/footer
   gutters at 640–767px — confirmed via computed padding at 700px. */
.sme-plain{min-height:100vh;display:flex;flex-direction:column}
.sme-plain main{flex:1}
.sme-plain .sme-site-header,.sme-plain .sme-site-footer{background:#262262}
.sme-plain .header-inner{display:flex;align-items:center;gap:44px;padding:0 188px;min-height:90px}
.sme-plain .footer-inner{display:flex;gap:60px;padding:64px 188px 30px}
.sme-plain .footer-brand{display:flex;flex-direction:column;flex-shrink:0}
.sme-plain .wrap-gutter{padding:0 188px}
@media (max-width:1023px){
  .sme-plain .header-inner,.sme-plain .wrap-gutter{padding-left:48px;padding-right:48px}
  .sme-plain .footer-inner{padding:64px 48px 30px;gap:40px}
}
@media (max-width:767px){
  .sme-plain .header-inner,.sme-plain .wrap-gutter{padding-left:20px;padding-right:20px}
  .sme-plain .footer-inner{padding:40px 20px 20px;flex-direction:column;gap:32px}
  .sme-plain .footer-brand{width:100%}
}
@media (max-width:639px){
  .sme-plain .header-inner{min-height:72px}
}

/* SME_Site_Nav_Widget renders both the toggle button and the absolutely
   positioned <nav> dropdown inside one Elementor widget wrapper, which
   Elementor auto-sizes to fit only the in-flow content (the button) since
   an absolutely positioned descendant doesn't contribute to that — and
   that auto-sized (~32px) wrapper is `position:relative`, becoming the
   dropdown's containing block instead of the full-width header. Making it
   `static` passes that job up to `.header-inner`, which is the intent —
   confirmed via the actual containing-block chain on the running site.
   The same narrow auto-width is also why the toggle button's
   `margin-left:auto` (in .nav-toggle below) had no room to push it to the
   right on mobile — nothing to push against inside a 32px-wide box —
   confirmed via its rendered position on the running site. `flex:1`
   lets this wrapper fill the rest of the header row instead. */
.elementor-widget-sme-site-nav{position:static;flex:1;min-width:0}

.logo{width:115px;height:68px;object-fit:contain;display:block}
@media (max-width:639px){ .logo{width:90px;height:53px} }

/* `.hero-title .elementor-heading-title` (not just `.hero-title`):
   `_css_classes` puts "hero-title" on the OUTER `.elementor-element`
   wrapper, not the actual `<h1 class="elementor-heading-title">` Elementor
   renders inside it — so a font-size set on the wrapper alone never reaches
   the real element. Worse, the browser's default UA rule `h1{font-size:2em}`
   then reads that wrapper's font-size as its inherited base and DOUBLES it,
   which is exactly how this rendered at 104px instead of 52px — confirmed
   via CDP matched-styles against the running site. Every heading-widget
   font-size override below targets the real inner element for this reason. */
.hero-title .elementor-heading-title{margin:0;max-width:560px;font-size:52px;line-height:1.12}
/* max-width needs !important: a text-editor widget has no inner wrapper to
   target instead (Elementor renders it as a bare text node directly inside
   the .elementor-element div — confirmed via outerHTML on the running
   site), and that same outer div is exactly what Elementor's own
   `.elementor.elementor .e-con > .elementor-widget{max-width:100%}` rule
   targets, at four classes' worth of specificity — nothing short of
   !important beats that. */
.hero-desc{margin:30px 0 0;max-width:470px!important;font-size:15px;line-height:1.55;color:rgba(255,255,255,0.78)}

/* SME_Product_Grid_Widget renders plain HTML (it queries Product Category
   terms live rather than being built into Elementor's page data — see that
   class's header comment), so the grid needs real CSS layout here instead
   of Elementor's native `container_type:grid` settings used elsewhere. */
.products-grid{margin-top:32px;display:grid;grid-template-columns:repeat(4,1fr);gap:24px}
.product-card img{display:block;width:100%;height:170px;object-fit:cover;border-radius:8px}
/* The image/title links to the category archive shouldn't change how the
   tile looks: block display on the image link avoids the small inline-gap
   an <a> otherwise leaves under an image, and both links inherit the
   existing text color instead of the browser's default link blue. */
.product-card-media-link{display:block}
.sme-product-title a{color:inherit;text-decoration:none}
@media (max-width:1023px){ .products-grid{grid-template-columns:repeat(2,1fr);gap:20px} }
@media (max-width:639px){ .products-grid{grid-template-columns:1fr;gap:16px} }

.cta-inner{text-align:center;max-width:735px}
.cta-title .elementor-heading-title{margin:0;font-size:38px;line-height:1.1}
.cta-desc{margin:26px auto 0;max-width:560px!important;font-size:16px;line-height:1.55;color:#ffffff}

.footer-brand{width:260px}
/* `.footer-blurb` (not `.footer-brand p`): the text-editor widget has no
   inner wrapper and is never actually a `<p>` (see hero-desc's comment
   above) — this selector never matched anything, silently leaving the
   footer blurb at Theme Style's default black-on-navy. Confirmed via
   computed styles (rgb(0,0,0)) against the running site before fixing. */
.footer-blurb{display:block;margin:20px 0 0;font-size:13px;line-height:1.7;color:rgba(255,255,255,0.62)}
.footer-col{flex:1}

/* Font-size breakpoints only — no native equivalent is set for these, so no
   conflict; kept as a single tablet+mobile pair, collapsed from the static
   site's original 4 breakpoints (see docker/README.md deviations). */
@media (max-width:1023px){
  .hero-title .elementor-heading-title{font-size:40px}
  .cta-title .elementor-heading-title{font-size:30px}
}
@media (max-width:639px){
  .hero-title .elementor-heading-title{font-size:32px}
  .cta-title .elementor-heading-title{font-size:24px}
}

/* -- Site nav (SME_Site_Nav_Widget) --
   `a.navlink` (not just `.navlink`): Elementor's Theme Style "Link" color
   prints as `.elementor-kit-N a{color:...}`, which is MORE specific than a
   single class and beats it outright regardless of load order — confirmed
   via CDP against the running site. Qualifying with the tag ties that
   specificity, and this stylesheet loading last (see quote-widget.php) wins
   the tie. Same reasoning applies to .sme-btn below. */
a.navlink{font-size:15px;line-height:1;color:rgba(255,255,255,0.82);border-bottom:1px solid transparent;padding-bottom:4px;transition:color 140ms,border-color 140ms;text-decoration:none}
a.navlink:hover,a.navlink.is-active{color:#ffffff;border-bottom-color:#f89938}
.nav{display:flex;gap:34px}
/* `button.nav-toggle`: Theme Style Buttons apply to any `<button>` tag via
   `.elementor-kit-N button{background-color:...}` (same specificity issue
   as a.navlink above) — confirmed via CDP, not assumed. */
button.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:32px;height:32px;padding:0;margin-left:auto;background:none;border:none;border-radius:0;cursor:pointer;flex-shrink:0}
.nav-toggle .bar{display:block;width:24px;height:2px;background:#ffffff;transition:transform 160ms ease,opacity 160ms ease}
.nav-toggle[aria-expanded="true"] .bar:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] .bar:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] .bar:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

@media (max-width:767px){
  button.nav-toggle{display:flex}
  .nav{position:absolute;top:100%;left:0;right:0;margin-top:0;background:#262262;flex-direction:column;align-items:stretch;gap:0;max-height:0;overflow:hidden;transition:max-height 220ms ease;padding:0 32px;z-index:40}
  .nav.is-open{max-height:320px;padding:8px 32px 20px}
  a.navlink{width:100%;padding:12px 0;border-top:1px solid rgba(255,255,255,0.12)}
  a.navlink:first-child{border-top:none}
}

/* -- Buttons -- used on both the SME_Button_Widget's `<a>` (Browse
   products/Request a quote) and the quote panel's plain `<button>`s
   (Send request/Close), so both tags are qualified: Elementor's Theme
   Style link color prints as `.elementor-kit-N a{color:...}`, which is more
   specific than a bare `.sme-btn` class and beats it outright on the `<a>`
   case regardless of load order — qualifying with the tag ties that
   specificity, and this stylesheet loading last (see quote-widget.php) wins
   the tie. `<button>` never had a competing rule, but is qualified too so
   one rule covers both.
   Default: teal outline on navy, fills solid teal on hover.
   Feature: solid orange, drops to orange outline on hover. */
a.sme-btn,button.sme-btn{display:inline-flex;align-items:center;justify-content:center;padding:16px 26px;border-radius:30px;font-family:var(--font-ui,'Inter',sans-serif);font-weight:500;font-size:16px;letter-spacing:0.06em;text-transform:uppercase;cursor:pointer;transition:background-color 160ms,color 160ms,border-color 160ms;border:1px solid transparent;text-decoration:none!important}
a.sme-btn--default,button.sme-btn--default{background:transparent;border-color:#00a79d;color:#00a79d}
a.sme-btn--default:hover,button.sme-btn--default:hover{background:#00a79d;color:#ffffff}
a.sme-btn--feature,button.sme-btn--feature{background:#f89938;border-color:#f89938;color:#ffffff}
a.sme-btn--feature:hover,button.sme-btn--feature:hover{background:transparent;color:#f89938}

/* -- Small text treatments that don't map to a Theme Style HTML tag -- */
.sme-eyebrow{display:block;font-family:var(--font-body,'Lato',sans-serif);font-weight:700;font-size:13px;letter-spacing:0.14em;color:#f89938;text-transform:uppercase;margin:0 0 26px}
.sme-footer-label{display:block;font-family:var(--font-body,'Lato',sans-serif);font-weight:700;font-size:11px;letter-spacing:0.14em;color:#f89938;text-transform:uppercase;margin:0 0 14px}
.sme-footer-links a{display:block;font-family:var(--font-body,'Lato',sans-serif);font-size:13px;line-height:2.05;color:rgba(255,255,255,0.72);text-decoration:none}
.sme-footer-links a:hover{color:#ffffff}
.sme-product-title{font-family:var(--font-display,'Tenor Sans',serif);font-weight:400;font-size:19px;color:#262262;margin:16px 0 8px}
.sme-product-body{font-family:var(--font-body,'Lato',sans-serif);font-size:14px;line-height:1.55;color:rgb(85,85,95);margin:0}

/* -- Product Detail template (single-sme_product.php) -- */
.sme-product-detail-section{padding:32px 0 100px;background:#ffffff}
.sme-product-detail-section .sme-breadcrumbs{margin-bottom:40px}
.sme-product-detail{display:flex;gap:60px;align-items:flex-start}
.sme-product-detail-media{flex:0 0 460px}
.sme-product-detail-media img{display:block;width:100%;height:auto;border-radius:15px;object-fit:cover}
.sme-product-detail-body{flex:1 1 0;min-width:0}
.sme-product-detail-title{font-family:'Tenor Sans',serif;font-weight:400;font-size:38px;line-height:1.15;color:#262262;margin:0 0 16px}
.sme-product-detail-price{font-family:'Inter',sans-serif;font-weight:600;font-size:24px;color:#f89938;margin:0 0 24px}
.sme-product-detail-desc{font-family:'Lato',sans-serif;font-size:16px;line-height:1.6;color:#000000}
.sme-product-detail-desc p{margin:0 0 16px}
.sme-product-detail-actions{margin-top:32px}
@media (max-width:1023px){
  .sme-product-detail-section{padding:28px 0 64px}
  .sme-product-detail-section .sme-breadcrumbs{margin-bottom:28px}
  .sme-product-detail{flex-direction:column;gap:32px}
  .sme-product-detail-media{flex-basis:auto;width:100%}
}
@media (max-width:639px){
  .sme-product-detail-section{padding:24px 0 48px}
  .sme-product-detail-title{font-size:28px}
}

/* -- Product Category archive template (taxonomy-sme_product_category.php).
   The grid itself reuses .products-grid/.product-card from the homepage
   tiles above, so both read as the same component. -- */
.sme-category-section{padding:32px 0 100px;background:#ffffff}
.sme-category-title{font-family:'Tenor Sans',serif;font-weight:400;font-size:38px;line-height:1.15;color:#262262;margin:0}
/* Grey is the design system's one muted text token (--text-muted,
   rgb(85,85,95)) — same as the tile body copy; 15px/1.55 are its
   --text-body-sm / --leading-body. */
.sme-breadcrumbs{margin:0 0 24px;font-family:'Lato',sans-serif;font-size:13px}
.sme-breadcrumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-flow:row wrap;align-items:center;gap:6px}
.sme-breadcrumbs li{margin:0;padding:0;color:rgb(85,85,95)}
.sme-breadcrumbs li+li::before{content:"\203A";margin-right:6px;color:rgb(85,85,95)}
.sme-breadcrumbs a{color:rgb(85,85,95);text-decoration:none}
.sme-breadcrumbs a:hover{color:#262262;text-decoration:underline}
.sme-breadcrumbs li[aria-current]{color:#262262}
.sme-category-desc{max-width:720px;margin:16px 0 0;font-family:'Lato',sans-serif;font-size:15px;line-height:1.55;color:rgb(85,85,95)}
.sme-category-section .products-grid{margin-top:40px}
.sme-product-price{font-family:'Inter',sans-serif;font-weight:600;font-size:16px;color:#f89938;margin:12px 0 0}
.sme-category-empty{font-family:'Lato',sans-serif;font-size:16px;color:rgb(85,85,95);margin:40px 0 0}
.sme-category-section .navigation.pagination{margin-top:48px;font-family:'Lato',sans-serif}
.sme-category-section .page-numbers{display:inline-block;padding:8px 14px;margin-right:6px;border-radius:8px;color:#262262;text-decoration:none}
.sme-category-section .page-numbers.current{background:#262262;color:#ffffff}
@media (max-width:1023px){ .sme-category-section{padding:28px 0 64px} }
@media (max-width:639px){
  .sme-category-section{padding:24px 0 48px}
  .sme-category-title{font-size:28px}
}

/* -- Generic page content (page.php): the block editor's output, styled to
   the design system — Tenor Sans headings, Lato body at the 16px/1.6 used
   for the product description. -- */
.sme-page-content{max-width:720px;margin-top:24px;font-family:'Lato',sans-serif;font-size:16px;line-height:1.6;color:#000000}
.sme-page-content p{margin:0 0 16px}
.sme-page-content h2{font-family:'Tenor Sans',serif;font-weight:400;font-size:26px;line-height:1.2;color:#262262;margin:40px 0 12px}
.sme-page-content h3{font-family:'Tenor Sans',serif;font-weight:400;font-size:20px;line-height:1.25;color:#262262;margin:28px 0 8px}
.sme-page-content ul,.sme-page-content ol{margin:0 0 16px;padding-left:22px}
.sme-page-content li{margin:0 0 6px}
.sme-page-content a{color:#262262}
@media (max-width:639px){ .sme-page-content h2{font-size:22px} }

/* -- Quote slide-over panel (mirrors quote-panel.jsx) -- */
.sme-quote-overlay{position:fixed;inset:0;background:rgba(10,8,30,0.55);opacity:0;pointer-events:none;transition:opacity 240ms ease;z-index:60}
.sme-quote-overlay.is-open{opacity:1;pointer-events:auto}
.sme-quote-panel{position:fixed;top:0;right:0;height:100%;width:460px;max-width:92vw;background:#262262;transform:translateX(100%);transition:transform 320ms cubic-bezier(.4,0,.2,1);z-index:61;padding:48px 44px;box-sizing:border-box;overflow-y:auto;font-family:var(--font-body,'Lato',sans-serif)}
.sme-quote-panel.is-open{transform:translateX(0)}
.sme-quote-close{position:absolute;top:26px;right:30px;background:none;border:none;color:rgba(255,255,255,0.6);font-size:22px;cursor:pointer;line-height:1}
.sme-quote-eyebrow{font-weight:700;font-size:13px;letter-spacing:0.14em;color:#f89938}
.sme-quote-title{font-family:var(--font-display,'Tenor Sans',serif);font-weight:400;font-size:30px;color:#fff;margin:16px 0 8px;line-height:1.15}
.sme-quote-intro{font-size:14px;line-height:1.6;color:rgba(255,255,255,0.78);margin:0 0 30px}
.sme-quote-fields{display:flex;flex-direction:column;gap:20px}
.sme-quote-label{display:block;font-size:11px;font-weight:700;letter-spacing:0.14em;text-transform:uppercase;color:rgba(255,255,255,0.6);margin-bottom:8px}
.sme-quote-label .required{color:#f89938}
.sme-quote-field{width:100%;box-sizing:border-box;padding:13px 16px;font-family:var(--font-body,'Lato',sans-serif);font-size:15px;color:#fff;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.24);border-radius:6px;outline:none}
.sme-quote-field::placeholder{color:rgba(255,255,255,0.4)}
.sme-quote-submit-row{margin-top:32px}
.sme-quote-submit-row .sme-btn[disabled]{opacity:0.5;cursor:not-allowed}
.sme-quote-sent p{font-size:15px;line-height:1.6;color:rgba(255,255,255,0.78)}
