/* =====================================================================
 *  Brand token overrides — generated by SPEC-023 html-brand-customizer
 *  Client: southside-junk
 *  Generated: 2026-05-10
 *
 *  This file overrides values in tokens.css with the client's brand.
 *  Hooked into every page's <head> after the default tokens.css link.
 *  Do not edit by hand — re-run update-brand-tokens.py with new
 *  brand-tokens.json values.
 * =================================================================== */

:root {
  /* === Brand color palette === */
  --color-primary: #000048;
  --color-secondary: #3b4a93;
  --color-accent: #ff7e15;
  --color-accent-link: #c25000;
  --color-bg: #ffffff;
  --color-background: #ffffff;
  --color-text: #0a0a1f;
  --color-text-muted: #5a5a72;
  --color-border: #dde1ee;
  --color-surface: #f7f8fc;
  --color-primary-dark: #000038;
  --color-primary-darker: #00002e;
  --color-primary-light: #3b4a93;
  --color-primary-subtle: #f0f2f9;

  /* === Tonal scale (50→800) for primary brand color === */
  --color-primary-50: #f0f2f9;
  --color-primary-100: #dde1ee;
  --color-primary-200: #aab2d3;
  --color-primary-300: #6b78b8;
  --color-primary-400: #3b4a93;
  --color-primary-500: #000048;
  --color-primary-600: #000038;
  --color-primary-700: #00002e;
  --color-primary-800: #000020;

  /* === Override TEMPLATE-NAMED variables (not just --color-N) ===
   * Webflow templates often define their own semantic CSS variables
   * (e.g. --primary, --secondary, --border-color) and use those
   * extensively in site.css. Overriding only --color-N tokens won't
   * reach those rules. Janky template uses these template-named vars: */
  --primary: #000048 !important;
  --secondary: #ff7e15 !important;
  --border-color: #3b4a93 !important;
  --brunswick-green: #000038 !important;
  --bg: #f0f2f9 !important;
  --text-color-dark: #0a0a1f !important;
  --text-color-light: #5a5a72 !important;
  --rich-black: #000020 !important;

  /* === Override numbered tokens (--color-1 through --color-8) === */
  --color-1: #ffffff;
  --color-2: #000048;
  --color-text-headings: #0a0a1f;

  /* === Typography === */
  --font-heading: 'Bricolage Grotesque', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-body: 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;

  /* === Button system === */
  --button-radius: 8px;
  --button-padding: 0.875rem 1.75rem;
  --button-primary-bg: #ff7e15;
  --button-primary-text: #000048;
  --button-primary-hover-bg: #e0681a;
  --button-secondary-bg: transparent;
  --button-secondary-text: #000048;
  --button-secondary-border: #000048;
}

/* === Typography enforcement on common heading/body selectors === */
h1, h2, h3, h4, h5, h6,
[class*='heading'], [class*='title'] {
  font-family: var(--font-heading);
  color: #0a0a1f;
}

body, p, [class*='body'], [class*='details'], [class*='description'] {
  font-family: var(--font-body);
}

/* === Primary CTA buttons (most templates: .primary-button, .btn-primary) ===
 * Webflow templates often nest the visible button background on an INNER
 * element (e.g. .primary-button-inner). We override BOTH the outer
 * <a class='primary-button'> and any inner element whose class contains
 * 'primary-button' so the user-facing background color matches the brand. */
.primary-button, .btn-primary, [class*='cta'][class*='primary'],
.primary-button-inner, [class*='primary-button-inner'],
.primary-button-inner-text, [class*='primary-button'] [class*='inner'],
a.button:not(.btn-secondary):not(.outline) {
  background-color: #ff7e15 !important;
  color: #000048 !important;
  border-radius: 8px;
  border: none;
  transition: background-color 0.2s ease;
}

.primary-button:hover, .btn-primary:hover,
.primary-button:hover .primary-button-inner,
a.primary-button:hover [class*='inner'] {
  background-color: #e0681a !important;
}

/* Force button text color on inner spans/divs (Webflow nests text in
   <div class='primary-button-text'> with its own color rule) */
.primary-button-text, [class*='primary-button-text'],
.primary-button [class*='text'], a.primary-button * {
  color: #000048 !important;
}

/* === Link color in body content ===
 * Use accent_link (darker variant of brand orange) so links pass
 * WCAG AA contrast on white. Templates often skip <main> tag, so we
 * exclude nav/footer/header by selector instead of requiring <main>
 * ancestor. */
a:not(.button):not(.primary-button):not([class*='primary-button']):not([class*='nav-link']):not([class*='nav_link']):not(.footer-link):not([class*='breadcrumb']):not([style*='inherit']):not([style*='color: white']) {
  color: #c25000;
}
a:not(.button):not(.primary-button):not([class*='primary-button']):not([class*='nav-link']):not([class*='nav_link']):not(.footer-link):not([class*='breadcrumb']):not([style*='inherit']):not([style*='color: white']):hover {
  color: #ff7e15;
}

/* Footer + nav links should stay white/inherit, not be colored as body links.
 * The Janky template wraps its footer in <div class='footer-area'> not
 * <footer>, so we match by class substring as well as the semantic tag.
 * Use !important to win over the body-link rule. Excludes footer social
 * icons (Twitter/LinkedIn/Instagram) and ALL footer link clusters from
 * being recolored to body-link orange. */
.footer-area a, .footer-area a *, .footer a, .footer a *,
footer a, footer a *, [class*='footer-'] a, [class*='footer-'] a *,
[class*='Footer'] a, .site-footer a, #footer a,
nav a, .nav a, [class*='nav-link'] a, [class*='nav-menu'] a,
.header a, header a, .nav-bar a, [class*='topbar'] a,
[class*='top-bar'] a, [class*='navigation-'] a,
.checkout-link, [class*='checkout-link'] {
  color: inherit !important;
}
.footer-area a:hover, .footer a:hover, footer a:hover,
[class*='footer-'] a:hover {
  color: #ff7e15 !important;
}

/* === Hover-state overrides for SPECIFIC service/feature cards ===
 * Only target cards we INTENTIONALLY want to invert on hover. Avoid
 * the over-broad [class*='card']:hover rule because EVERY visual
 * block in Webflow has 'card' in some descendant class — that broad
 * rule applies an unwanted hover state to floating hero cards,
 * appointment widgets, etc. that should stay static. */
.service-card:hover, .feature-card:hover,
.pricing-card-content:hover, .single-service-card:hover {
  background-color: #f0f2f9 !important;
}

/* Service-area card gradients use var(--secondary) which we redefined
   to orange — but the gradient stops were literal hex. The CSS-literal
   replacement step in update-brand-tokens.py handles those. This rule
   provides a fallback for anything that slipped through. */
.service-area-infos-wrapper {
  background-image: linear-gradient(0deg, #ff7e15 23.8%, #ff7e15d1 76.06%, #ff7e1500) !important;
}

/* === Direct selector overrides for known --secondary use sites ===
 * Even though we set --secondary in :root and override CSS, browsers
 * sometimes cache stale CSS or the cascade doesn't resolve as expected.
 * These direct hex-value rules bypass the var() indirection entirely
 * and force the brand color via specificity + !important on the exact
 * selectors found in site.css. */
.cta-wrapper, .cta-content-wrap {
  background-color: #ff7e15 !important;
}
.footer-ticker-wrap {
  background-color: #000038 !important;
}
/* Footer labels — were template-green; stay white (inherit) per JB's
   policy: don't change text colors during palette updates, only 
   palette-positioned elements (buttons, dividers, accent fills). */
.footer-contact-label, .footer-label, [class*='footer-label'] {
  color: inherit !important;
}
.submit-button, input.submit-button, .w-button.submit-button {
  background-color: #ff7e15 !important;
  color: #000048 !important;
}
.newsletter-success-wrap {
  background-color: #f0f2f9 !important;
}
.banner-v1-title-marked, .section-title-italic, .inner-banner-title-italic {
  color: #ff7e15 !important;
}
.top-navigation-wrapper {
  background-color: #000038 !important;
}
.single-color-box.neutral-1 {
  background-color: #ff7e15 !important;
}

/* === Disposal cards (Everything We Can Clear...) ===
 * Category title, body text, and hover state. The cards have a navy
 * background, so titles + body text need white. On hover, invert to
 * white background with navy text for visibility. */
.disposal-card-title, .single-disposal-lists-card .disposal-card-title,
.disposal-lists-details {
  color: #ffffff !important;
}
.single-disposal-lists-card {
  background-color: #000038 !important;
  color: #ffffff !important;
  transition: background-color 0.2s ease, color 0.2s ease;
}
.single-disposal-lists-card:hover {
  background-color: #ffffff !important;
  color: #000048 !important;
}
.single-disposal-lists-card:hover .disposal-card-title,
.single-disposal-lists-card:hover .disposal-lists-details {
  color: #000048 !important;
}

/* Disposal-list checkmarks (was lime green SVG fills — now brand orange
   via the SVG-content rewrite step in update-brand-tokens.py). This
   selector remains for any rendered fill that escapes the SVG rewrite.*/
.disposal-lists-icon, .disposal-icon, [class*='check-icon'] {
  filter: brightness(0) saturate(100%) invert(50%) sepia(95%) saturate(2000%) hue-rotate(0deg);
}
/* The SVG content-rewrite is the primary fix; CSS filter is a fallback */

/* === Footer ticker (scrolling marquee) text → white === */
.footer-ticker-text, .footer-ticker-flex h3, .footer-ticker-flex h4 {
  color: #ffffff !important;
}

/* === Footer ticker icons ONLY (white on navy footer) ===
 * Same SVG file (Footer Ticker-Logo.svg) is used by BOTH the footer
 * ticker (dark navy bg → needs white icons) AND the hero .banner-recycle
 * card (white bg → needs navy icons). Differentiate the filter rule
 * by selector. Hero card gets NO filter (SVG already navy from
 * literal-hex rewrite). Footer ticker gets brightness(0)+invert(1) for white. */
.footer-ticker-icon, [class*='footer-ticker'] img {
  filter: brightness(0) invert(1) !important;
}
/* Hero recycle icon stays as the SVG's natural color (navy on white card) */
.banner-recycle-logo, [class*='banner-recycle'] img {
  filter: none !important;
}

/* === Newsletter input — was teal #316157 leftover from template ===
   Use a lighter navy shade so input is visible on the dark footer.
   White text + lighter-navy placeholder for visibility. */
.newsletter-field, .newsletter-field.w-input {
  background-color: #3b4a93 !important;
  color: #ffffff !important;
  border: 1px solid rgba(255, 255, 255, 0.2) !important;
}
.newsletter-field::placeholder {
  color: rgba(255, 255, 255, 0.6) !important;
}

/* === Generic footer text → white when on dark navy bg === */
.footer-area, .footer-area p, .footer-area h1, .footer-area h2,
.footer-area h3, .footer-area h4, .footer-area span, .footer-area div,
footer p, footer h1, footer h2, footer h3, footer h4, footer span, footer div {
  color: inherit;
}
.footer-area, footer {
  color: #ffffff;
}
/* But footer headings/labels that the template had styled in green
   should now be readable white. */
.footer-content-title, .footer-heading, .footer-title,
[class*='footer-title'], [class*='footer-heading'] {
  color: #ffffff !important;
}

/* Hide the cart-quantity bubble for now (not part of brand) */
.cart-quantity-info:empty, .cart-quantity-wrap:has(.cart-quantity-info[innerHTML='0']) {
  /* leave alone — Webflow handles state */
}

/* === Schedule Pickup duplicate text (Webflow hover-flip pattern) ===
 * Webflow templates render two stacked text divs inside primary-button-inner
 * (.primary-button-text + .primary-button-text-absolute) for a hover-flip
 * animation. The absolute one is positioned with translate3d(0,300%,0) which
 * should sit BELOW the button — but only if the parent has overflow:hidden.
 * When overflow is visible, the absolute text appears as a duplicate beneath
 * the button. Either restore overflow:hidden OR hide the absolute element.
 * We hide it because we're not animating the hover. */
.primary-button-text-absolute, [class*='primary-button-text-absolute'] {
  display: none !important;
}
/* Also enforce overflow:hidden on the inner so any future absolute
   children stay clipped. */
.primary-button-inner {
  overflow: hidden !important;
}

/* === Footer section headers (H5.footer-links-title etc) → white ===
 * Template-default H5 uses var(--text-color-dark) which we set to navy
 * — but on the dark navy footer bg, navy-on-navy is invisible. Force
 * white for any heading inside the footer area. */
.footer-area h1, .footer-area h2, .footer-area h3, .footer-area h4,
.footer-area h5, .footer-area h6, .footer-area .footer-links-title,
footer h1, footer h2, footer h3, footer h4, footer h5, footer h6,
[class*='footer-area'] h1, [class*='footer-area'] h2, [class*='footer-area'] h3,
[class*='footer-area'] h4, [class*='footer-area'] h5, [class*='footer-area'] h6,
[class*='footer-'] .footer-links-title, [class*='footer-'] [class*='title'],
[class*='footer-'] [class*='heading'] {
  color: #ffffff !important;
}

/* === Footer general text catch-all ===
 * Anything inside the footer that isn't an explicit input/button/svg
 * inherits white. Catches paragraphs, spans, divs that the template
 * styled with template-color text. */
.footer-area, .footer-area p, .footer-area span:not([style*='color:']),
.footer-area div:not([style*='background']):not([style*='color:']),
.footer-area li, .footer-area label,
footer p, footer span:not([style*='color:']), footer div:not([style*='color:']),
footer li, footer label,
[class*='footer-bottom'] p, [class*='footer-bottom'] span,
[class*='footer-bottom'] div {
  color: #ffffff;
}

/* === Newsletter success message (.newsletter-success-message) ===
 * Webflow's success state renders on a light bg per template default,
 * but if it's inside the footer (dark bg), force navy text on light bg
 * for accessibility. */
.newsletter-success-message {
  color: #000048 !important;
  background-color: #f0f2f9 !important;
}

/* === Header dark band (top contact bar) ===
 * The Janky template's top bar uses a dark green class. Override to
 * primary_dark (deep navy variant) so the header matches the brand. */
.navigation-top-bar, .top-bar, .header-bar,
[class*='nav-bar-dark'], [class*='topbar-dark'] {
  background-color: #000038 !important;
}

/* === Logo size constraints ===
 * Brand logos shipped as raw PNG/SVG can have huge natural dimensions
 * (e.g. 1000x1000 favicon). Constrain to reasonable rendered heights
 * matching typical Webflow header/footer logo dimensions, while
 * preserving aspect ratio. Use !important to win against any inline
 * width/height attrs Webflow may have set on the original img.
 *
 * SIZE RULE (cherished-logo critique pre-empt): clients always think
 * their logo is too small. Default nav 72px tall (was 48px, +50%) and
 * default footer 90px tall (was 56px, +60%). Tightens to mobile sizes
 * via @media below. Override per-client via logo_nav_max_height and
 * logo_footer_max_height in brand-tokens.json if needed. */
.main-logo-wrap img,
[data-content='logo-wrap'] .main-logo,
header [data-content='logo-wrap'] img {
  max-height: 72px !important;
  width: auto !important;
  height: auto !important;
  object-fit: contain;
}

.main-logo-wrap, [data-content='logo-wrap'] {
  max-width: 10rem !important;
}

.footer-logo-wrap img,
[data-content='logo-wrap'] .footer-logo,
footer [data-content='logo-wrap'] img,
.footer [data-content='logo-wrap'] img {
  max-height: 90px !important;
  max-width: 260px !important;
  width: auto !important;
  height: auto !important;
  object-fit: contain;
}

/* === Footer logo white-knockout swap ===
 * Footers ship on dark surfaces. The color logo loses contrast. Swap
 * to the white-knockout variant via CSS `content: url(...)` on the
 * <img> element (works on replaced elements in modern browsers). */
.footer-logo, footer [data-content='logo-wrap'] img, .footer [data-content='logo-wrap'] img { content: url('../images/sjr-logo-white.png') !important; }

/* Responsive logo scaling — tighten on mobile so larger desktop
 * sizes don't overflow the nav at narrow widths. */
@media screen and (max-width: 767px) {
  .main-logo-wrap img, header [data-content='logo-wrap'] img,
  [data-content='logo-wrap'] .main-logo {
    max-height: 52px !important;
  }
  .footer-logo-wrap img, footer [data-content='logo-wrap'] img,
  [data-content='logo-wrap'] .footer-logo {
    max-height: 64px !important;
    max-width: 200px !important;
  }
}

/* === Catch-all CTA button overrides ===
 * Some templates use class names that don't include 'primary-button'
 * but render as the green CTA. Cover .schedule-pickup, .header-cta,
 * and Webflow's nav-button pattern. */
.schedule-pickup, .header-cta, .nav-button,
[class*='schedule'][class*='button'], [class*='cta-button'],
[class*='header'] a[class*='button'] {
  background-color: #ff7e15 !important;
  color: #000048 !important;
  border-radius: 8px;
  border: none;
}

/* === Accent icon-buttons (arrow buttons inside service cards etc) ===
 * Janky and similar templates use round/square accent buttons with the
 * template's accent color. Force them to brand accent so they don't
 * render in the template's default lime/teal/etc. */
.arrow-button, .icon-button, .circle-button,
[class*='arrow-button'], [class*='icon-circle'],
a.w-inline-block[class*='arrow'] {
  background-color: #ff7e15 !important;
  color: #000048 !important;
}

/* === Background-color sweepers for any element that the template
   sets to its accent green (--color-2 in Janky's tokens) === */
[style*='background-color: rgb(255, 126, 21)'],
[style*='background: rgb(255, 126, 21)'],
[style*='background-color:#ff7e15'],
[style*='background:#ff7e15'] {
  background-color: #ff7e15 !important;
}

/* === Decorative dividers/accents that templates color with their
   accent green: dividers between location-card stats, divider lines
   in pricing tables, accent strips on service cards, etc. === */
.area-info-divider, .card-divider, .accent-divider,
[class*='accent-line'], [class*='accent-bar'],
hr.accent, .divider-accent {
  background-color: #ff7e15 !important;
  border-color: #ff7e15 !important;
}
