/*
 * Real design direction from Planning/Design Direction.md: trust-first clarity-led minimalism,
 * bold typography over stock imagery, "one trusted dev shop" positioning (Elegant-Themes-style,
 * not a ThemeForest multi-vendor feel). Dark navy + a single accent - deliberately distinct from
 * Tipped2Win's purple/pink and Mimi Joi's pink, since this is its own real business.
 *
 * Rebrand (2026-08-25, Leon's direct request): accent swapped from the original warm gold
 * (#f5a623) to an electric blue with a glow treatment, matching the approved homepage mockup
 * (Claude Artifact "LC Web Design Homepage Build"). Applied site-wide across every real page via
 * this shared stylesheet - deliberately NOT touched on any of the standalone demo pages
 * (Dog Groomer/Silverbark/Willowbrook/Barkers Yard/Vets/Pet Shop/Plumbers/Gardeners/Mobile
 * Detailing/Window Cleaners), which each keep their own separate *-chrome.php identity.
 */
/* Batch 1 (2026-08-05) - homepage/main-site redesign, static mockup approved by Leon at
   Planning/batch-1-mockup.html. Keeps the existing navy/amber identity (Leon explicitly rejected
   the audit's light cream system), adds a formal type scale (Space Grotesk/DM Sans) and two new
   sparing accent tokens (blue for links, dark mint-tinted panel for reassurance content). */
@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400..800&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap');
/* 2026-08-27: typeface swapped from Space Grotesk/DM Sans to Bricolage Grotesque/IBM Plex Sans +
   Mono, matching the approved concept exactly (Claude Home BUILD/homepage-redesign-v1.html /
   Claude Artifact "LC Web Design Homepage Build") - Leon's explicit instruction to build the site
   like that concept and no other. Colour tokens below are unchanged from the 2026-08-25 rebrand,
   which already matched. */

/* Real bug fix, 2026-08-09 (found during 0.0.7 mobile verification): Astra's own mobile header row
   (.ast-builder-grid-row-has-sides) renders ~40px wider than the viewport on narrow screens - a
   pre-existing core Astra layout quirk, not something this theme's CSS caused, but it forces a
   site-wide horizontal scroll on every page. Clamping overflow on the two root elements is the
   standard safe fix: it doesn't touch Astra's own layout math, just stops the extra width from
   creating a scrollbar/shift. */
html, body { overflow-x: hidden; max-width: 100%; }

:root {
	/* 2026-08-27: bg/panel/text/muted corrected to the concept's EXACT hex values (was a navy-tinted
	   approximation - #0b1120/#131b2e/#ffffff/#b9c2d6 - that only coincidentally looked "close enough"
	   next to the correct accent blue). These four were the actual source of "still looks different"
	   feedback: concept is a neutral near-black, not a blue-tinted navy, and text is soft off-white,
	   not pure white. Source: Claude Home BUILD/homepage-redesign-v1.html :root block, verbatim. */
	--lcwd-bg: #0a0c10;
	--lcwd-panel: #12151b;
	--lcwd-accent: #4172e8;
	--lcwd-accent-text: #050914;
	--lcwd-text: #eef0f3;
	--lcwd-muted: #9aa3b0;
	--lcwd-accent-blue: #7ba0ff;
	--lcwd-accent-soft: rgba(65, 114, 232, .13);
	--lcwd-accent-line: rgba(65, 114, 232, .4);
	--lcwd-accent-glow: rgba(65, 114, 232, .55);
	--lcwd-accent-mint-bg: #1f3d33;
	--lcwd-accent-mint-text: #7fe0bd;
	--font-heading: 'Bricolage Grotesque', system-ui, sans-serif;
	--font-body: 'IBM Plex Sans', system-ui, sans-serif;
	--font-mono: 'IBM Plex Mono', ui-monospace, monospace;
}

/* Glow utilities, matching the approved mockup's electric-blue treatment. */
.lcwd-glow-ring { box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 32px -6px var(--lcwd-accent-glow); }
.lcwd-glow-pulse { animation: lcwd-pulse 3.2s ease-in-out infinite; }
@keyframes lcwd-pulse {
	0%, 100% { box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 18px -4px var(--lcwd-accent-glow); }
	50% { box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 38px -2px var(--lcwd-accent-glow); }
}
@media (prefers-reduced-motion: reduce) { .lcwd-glow-pulse { animation: none; } }

body { background-color: var(--lcwd-bg) !important; font-family: var(--font-body); }
h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); }

.lcwd-link-blue { color: var(--lcwd-accent-blue) !important; }
.lcwd-reassure-panel {
	background-color: var(--lcwd-accent-mint-bg) !important;
	border: 1px solid rgba(127, 224, 189, 0.25);
	color: var(--lcwd-accent-mint-text) !important;
}
.lcwd-reassure-panel h2, .lcwd-reassure-panel h3 { color: var(--lcwd-accent-mint-text) !important; }

/* LC Web Design logo uploaded as a wide PNG, but Astra never had a header "Logo Width" set, so left
   unconstrained it renders far too large (same real bug already found and fixed on Tipped2Win's
   logo, same fix here). */
/* Real bug found and fixed 2026-07-31: `width: auto` alone wasn't enough, Astra's own base
   `img { max-width: 100% }` rule was capping the logo to its flex container's own (narrower) width
   before the aspect-ratio could resolve, badly squashing it. Explicit width + `max-width: none`
   defeats that cap so the logo actually renders at its real intended size. */
/* Logo swapped 2026-08-01 for the real brand kit's horizontal lockup (icon + "LC WEB DESIGN" +
   tagline, transparent background) - width recalculated for its actual aspect ratio (468x129,
   ~3.63:1) at the same 60px header height as before (218px, not the old logo's 208px - those 2
   logos weren't quite the same aspect ratio, and reusing the old width would have mildly squashed
   this one). */
.site-logo-img,
.custom-logo-link {
	max-width: none !important;
}
.site-logo-img img.custom-logo,
.ast-site-identity img.custom-logo {
	/* Bumped up 2026-08-05 (Leon's direct request, "logo bit too small") - same 468x129 (~3.63:1)
	   aspect ratio as the 2026-08-01 bump, just larger again. */
	height: 88px !important;
	width: 320px !important;
	max-width: none !important;
	max-height: 88px !important;
}

#masthead, .site-header, .ast-primary-header-bar, .main-header-bar, .ast-above-header, .ast-below-header-bar {
	background-color: var(--lcwd-panel) !important;
	border-color: rgba(255, 255, 255, 0.1) !important;
}

/* Batch 1 - sticky header with a soft blur, matching the approved mockup. Astra's own "Sticky
   Header" module is a Pro-only feature on this install, so this is a plain CSS sticky rule instead
   - scoped to #masthead only, doesn't touch anything else in Astra's layout. */
#masthead {
	position: sticky;
	top: 0;
	z-index: 999;
	background-color: rgba(19, 27, 46, 0.92) !important;
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
}

/* Batch 1 - "Get a Quote" nav CTA. The live menu's real last item is the Get a Quote link (set via
   `wp menu item`), styled here as a filled amber button instead of a plain text link, matching the
   approved mockup. Scoped to :last-child so no menu-item CSS-class plumbing was needed.
   Real bug fixed 2026-08-05 (Leon: "get a quote button is too big"): Astra's own
   `.main-header-menu .menu-item { display:flex; flex-direction:column }` rule made the <li> stretch
   to match the full header row height (driven by the 80px+ logo), and since the anchor filled that
   stretched <li>, the amber button rendered ~100px tall - only visible on this item because it's
   the only nav link with a background box, every plain-text link was stretching the same way but
   invisibly. `align-self: center` on the <li> stops it matching sibling height; the anchor keeps
   its own natural button size. */
.main-header-menu > li:last-child {
	align-self: center;
}
.main-header-menu > li:last-child > a {
	background-color: var(--lcwd-accent) !important;
	color: var(--lcwd-accent-text) !important;
	font-weight: 700;
	padding: 10px 20px !important;
	border-radius: 8px;
	margin-left: 6px;
	line-height: normal;
	box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 20px -6px var(--lcwd-accent-glow);
	transition: filter .15s ease, box-shadow .15s ease;
}
.main-header-menu > li:last-child > a:hover { filter: brightness(1.08); box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 32px -4px var(--lcwd-accent-glow); }

/* Batch 1 - announcement bar, added via functions.php's `lcwd_announcement_bar` (astra_header_before
   hook, guarded to real LC Web Design pages only - never fires on standalone demo pages). */
.lcwd-announce {
	background-color: var(--lcwd-accent) !important;
	color: var(--lcwd-accent-text) !important;
	text-align: center;
	font-weight: 700;
	font-size: 14px;
	padding: 8px 16px;
}
.lcwd-announce a { color: var(--lcwd-accent-text) !important; text-decoration: underline; margin-left: 8px; white-space: nowrap; }
/* Site title text hidden 2026-08-01 (Leon's direct request, "remove the white writing next to my
   logo") - the logo image itself already has the "LC WEB DESIGN" wordmark baked in, so Astra's
   separate site-title text next to it was purely redundant. */
.ast-site-identity .site-title,
.ast-site-identity .site-description {
	display: none !important;
}
.main-header-menu li a, .main-header-menu > li > a, .ast-primary-menu-first > li > a { color: var(--lcwd-text) !important; }
.main-header-menu li a:hover, .main-header-menu li.current-menu-item > a { color: var(--lcwd-accent) !important; }
/* Real bug fix, 2026-08-05 (Leon: "contact page quote button text cant read"): "Get a Quote" and
   "Contact" both link to /contact/, so WordPress's URL-based current-menu-item matching marks the
   Get a Quote button as "current" too when viewing that page - stacking the line above's amber TEXT
   with the button's own amber BACKGROUND (astra-chrome.css line ~94) made it fully invisible.
   :last-child is always the Get a Quote button, exclude it from the current-page colour override. */
.main-header-menu li.current-menu-item:last-child > a { color: var(--lcwd-accent-text) !important; }

/* Mobile menu - real bug found 2026-07-30 (Leon: "colours are messed up... maybe mobile"): the
   hamburger toggle icon and the off-canvas menu panel use Astra's own default styling, which these
   selectors never covered - the toggle rendered in Astra's default blue, and the open panel was a
   plain white box, both clashing hard against this site's dark navy/gold theme. */
.ast-mobile-header-wrap, .ast-mobile-header-content {
	background-color: var(--lcwd-panel) !important;
}
/* Real bug fix, 2026-08-05 (Leon: "text is still white and unreadable on some nav menus"): the
   wrapper above was already dark, but the <ul class="main-header-menu" id="ast-hf-mobile-menu">
   sitting inside it has Astra's own separate white background painted on TOP of that wrapper -
   never targeted before, so white text over that white UL was still invisible on every page this
   wasn't spot-checked on directly (found via a full ancestor-chain walk, not just the wrapper). */
.ast-mobile-header-content .main-header-menu,
.ast-mobile-header-content ul.ast-nav-menu {
	background-color: transparent !important;
}
button.main-header-menu-toggle,
.ast-mobile-menu-trigger-minimal,
.mobile-menu-toggle-icon,
.ast-mobile-svg {
	color: var(--lcwd-text) !important;
	fill: var(--lcwd-text) !important;
}
/* Real bug fix, 2026-08-05 (Leon: "mobile nav menu colours of text looks off"): only `color` was
   ever overridden here, Astra's own default menu-item background (white for plain items, a pale
   blue-grey "current page" highlight for the active one) was never touched, on the site's dark
   navy panel that meant genuinely invisible white-on-white text for every non-active item. */
.ast-mobile-header-content .main-header-menu li a { color: var(--lcwd-text) !important; background: transparent !important; }
.ast-mobile-header-content .main-header-menu li a:hover,
.ast-mobile-header-content .main-header-menu li.current-menu-item > a { color: var(--lcwd-accent) !important; background: transparent !important; }
.ast-mobile-header-content .main-header-menu li:last-child > a { background-color: var(--lcwd-accent) !important; color: var(--lcwd-accent-text) !important; }

#colophon, .site-footer, .ast-small-footer, .footer-widget-area { background-color: var(--lcwd-panel) !important; color: var(--lcwd-muted) !important; }
#colophon a, .site-footer a, .ast-small-footer a { color: var(--lcwd-accent) !important; }
#colophon h1, #colophon h2, #colophon h3, .site-footer h1, .site-footer h2, .site-footer h3 { color: var(--lcwd-text) !important; }

/* Batch 6 - footer columns (Services/Explore/Contact), injected via astra_footer_content_top. */
.lcwd-footer-columns {
	max-width: 1240px; margin: 0 auto; padding: 40px 24px 32px;
	display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 32px;
	border-bottom: 1px solid rgba(255,255,255,0.08);
}
.lcwd-footer-col h4 { font-family: var(--font-heading); color: var(--lcwd-text) !important; font-size: 14px; text-transform: uppercase; letter-spacing: .5px; margin: 0 0 14px; }
.lcwd-footer-col ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.lcwd-footer-col a { color: var(--lcwd-muted) !important; text-decoration: none; font-size: 14px; }
.lcwd-footer-col a:hover { color: var(--lcwd-accent) !important; }
.lcwd-footer-col span { color: var(--lcwd-muted) !important; font-size: 14px; }
@media (max-width: 700px) { .lcwd-footer-columns { grid-template-columns: 1fr; gap: 24px; text-align: left; } }

/* Mandatory domain/hosting disclosure (2026-08-09 pricing rework, brief section 58). */
.lcwd-footer-disclosure {
	max-width: 1240px; margin: 0 auto; padding: 16px 24px 0; text-align: center;
	color: var(--lcwd-muted) !important; font-size: 12px; line-height: 1.5;
}

/* Batch 7 (2026-08-05) - footer grew a 4th "Legal" column now that real Privacy/Terms/Cookie pages
   exist. Grid bumped from 3 to 4 columns. */
.lcwd-footer-columns.lcwd-footer-columns-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
@media (max-width: 700px) { .lcwd-footer-columns.lcwd-footer-columns-4 { grid-template-columns: 1fr; } }

/* Batch 7 - shared styling for standalone content pages (legal pages, and any other plain page
   using the .lcwd-legal wrapper): left-aligned prose instead of the homepage's centred sections. */
.lcwd-legal { max-width: 760px; text-align: left; }
.lcwd-legal h1 { color: var(--lcwd-text) !important; font-size: clamp(28px, 4vw, 40px); margin: 0 0 8px; text-align: left; }
.lcwd-legal .lcwd-lead { text-align: left; margin: 0 0 32px; max-width: none; }
.lcwd-legal h2 { color: var(--lcwd-text) !important; font-size: 20px; text-align: left; margin: 28px 0 10px; }
.lcwd-legal p { color: var(--lcwd-muted) !important; font-size: 15px; text-align: left; max-width: none; margin: 0 0 14px; }
.lcwd-legal a { color: var(--lcwd-accent-blue) !important; }
.lcwd-legal code { background: rgba(255,255,255,0.08); padding: 2px 6px; border-radius: 4px; font-size: 13px; }
.lcwd-legal-list { list-style: disc; padding-left: 20px; margin: 0 0 14px; display: grid; gap: 8px; }
.lcwd-legal-list li { color: var(--lcwd-muted) !important; font-size: 15px; }
.lcwd-legal-list strong { color: var(--lcwd-text) !important; }

.entry-content, .ast-single-post .entry-content, .site-content { background-color: var(--lcwd-bg) !important; color: var(--lcwd-text) !important; }

/* Real bug found and fixed 2026-07-30 (desktop layout audit after Leon's "layout is really bad"
   feedback): Astra's own base CSS sets `.ast-container { display: flex }`. Since front-page.php's
   top-level sections (hero, Design Services, Our Clients) are all direct children of one
   `.ast-container`, they were being laid out as side-by-side flex columns instead of stacked
   vertically - squeezing the whole homepage into a narrow strip on desktop. Scoped to inside
   site-main only, so the header/footer's own `.ast-container` (which legitimately uses flex for
   the logo+menu row) is untouched. */
.site-main .ast-container { display: block !important; }

/* Real hero redesign, 2026-07-30 - was flat centred text only, no image. Per Leon's own
   "colourful, pictures where needed" feedback, now a 2-column layout with a real AI-generated
   hero banner image, matching the same pattern just proven on Tipped2Win's homepage. */
.lcwd-hero-split {
	display: grid;
	grid-template-columns: 1.1fr 1fr;
	gap: 40px;
	align-items: center;
	padding: 48px 0 40px;
	max-width: 1240px;
	margin: 0 auto;
}
.lcwd-hero-text .lcwd-kicker { display: inline-block; color: var(--lcwd-accent) !important; font-family: var(--font-mono); font-weight: 500; letter-spacing: 1px; text-transform: uppercase; font-size: 13px; margin-bottom: 14px; }
.lcwd-hero-text h1 { color: var(--lcwd-text) !important; font-size: clamp(30px, 4.2vw, 46px); margin: 0 0 16px; line-height: 1.15; }
.lcwd-hero-text h1 em { color: var(--lcwd-accent-blue) !important; font-style: normal; text-shadow: 0 0 28px var(--lcwd-accent-glow); }
.lcwd-hero-text p { color: var(--lcwd-muted) !important; font-size: 17px; margin: 0 0 8px; max-width: 480px; }

/* Batch 2 (2026-08-05) - hero rebuilt per the approved mockup at Planning/batch-2-mockup.html:
   two CTAs, a 4-item reassurance list, and a browser-frame/mobile-frame visual composition around
   the existing hero image (same "browser frame" visual language already used for the client cards
   below, kept consistent rather than inventing a new pattern). */
.lcwd-hero-ctas { display: flex; flex-wrap: wrap; gap: 14px; margin: 22px 0 26px; }
.lcwd-hero-ctas .lcwd-btn { margin-top: 0; }
.lcwd-btn.lcwd-btn-secondary { background: transparent !important; color: var(--lcwd-text) !important; border: 1px solid rgba(255,255,255,0.25); margin-top: 0 !important; }
.lcwd-btn.lcwd-btn-secondary:hover { border-color: var(--lcwd-accent); }

.lcwd-reassure-list {
	list-style: none; margin: 0; padding: 0;
	display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 10px 20px; max-width: 460px;
}
.lcwd-reassure-list li {
	display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--lcwd-muted) !important;
}
.lcwd-reassure-list svg { flex-shrink: 0; color: var(--lcwd-accent); }

.lcwd-hero-image { position: relative; }
.lcwd-hero-browser-frame {
	border-radius: 12px; overflow: hidden; border: 1px solid rgba(255,255,255,0.12);
	box-shadow: 0 30px 60px rgba(0,0,0,0.45), 0 0 0 1px var(--lcwd-accent-line), 0 0 60px -12px var(--lcwd-accent-glow);
	background-color: var(--lcwd-panel) !important;
}
.lcwd-browser-dots { display: flex; gap: 6px; padding: 10px 14px; background: rgba(255,255,255,0.06); }
.lcwd-browser-dots span { width: 9px; height: 9px; border-radius: 50%; background: rgba(255,255,255,0.25); }
.lcwd-hero-browser-frame img { display: block; width: 100%; height: auto; }

/* 2026-08-27: minimal CSS-only hero screen content, matching the approved concept exactly
   (Claude Home BUILD/homepage-redesign-v1.html) - replaces the old illustrated laptop/phone/
   pen-tool hero image, which still carried its pre-rebrand gold accents and read as visually
   inconsistent against the rest of the electric-blue system. No image dependency. */
.lcwd-hero-mockscreen { padding: 34px 26px; background: linear-gradient(160deg, rgba(255,255,255,.035), transparent 70%); }
.lcwd-hero-mockscreen-tag { display: block; font-family: var(--font-mono); font-size: .64rem; letter-spacing: .12em; text-transform: uppercase; color: var(--lcwd-accent) !important; }
.lcwd-hero-mockscreen h3 { color: var(--lcwd-text) !important; font-size: 1.3rem; margin: 10px 0 0; }
.lcwd-hero-mockscreen p { color: var(--lcwd-muted) !important; margin-top: 8px; font-size: .85rem; }
.lcwd-hero-mockscreen-row { display: flex; gap: 8px; margin-top: 18px; }
.lcwd-hero-mockscreen-row div { flex: 1; height: 46px; border-radius: 6px; background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.1); }

.lcwd-hero-mobile-frame {
	position: absolute; right: -14px; bottom: -24px; width: 34%;
	border-radius: 18px; overflow: hidden; border: 4px solid var(--lcwd-panel);
	box-shadow: 0 20px 40px rgba(0,0,0,0.5); background-color: var(--lcwd-panel) !important;
}
.lcwd-hero-mobile-frame img { display: block; width: 100%; height: auto; }

.lcwd-hero-palette-chip {
	position: absolute; left: -14px; top: -14px; z-index: 2;
	background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.12);
	border-radius: 12px; padding: 10px 12px; display: flex; gap: 6px;
	box-shadow: 0 10px 24px rgba(0,0,0,0.4);
}
.lcwd-hero-palette-chip span { width: 16px; height: 16px; border-radius: 50%; display: block; }

.lcwd-hero-float {
	position: absolute; z-index: 2; background-color: var(--lcwd-panel) !important;
	border: 1px solid rgba(255,255,255,0.12); border-radius: 999px; padding: 6px 14px;
	font-size: 12px; font-weight: 700; color: var(--lcwd-muted) !important;
	box-shadow: 0 8px 18px rgba(0,0,0,0.35);
}
.lcwd-hero-float-responsive { top: 40%; left: -20px; }
.lcwd-hero-float-custom { top: 6%; right: 8%; }

@media (max-width: 860px) {
	.lcwd-hero-split { grid-template-columns: 1fr; text-align: center; padding-top: 30px; }
	.lcwd-hero-text p { margin-inline: auto; }
	.lcwd-hero-image { order: -1; margin-bottom: 20px; }
	.lcwd-hero-ctas, .lcwd-reassure-list { justify-content: center; margin-inline: auto; }
	.lcwd-hero-float, .lcwd-hero-palette-chip { display: none; }
	.lcwd-hero-mobile-frame { width: 28%; right: 8px; bottom: -16px; }
}

/* Batch 2 - trust strip, directly below the hero. */
/* Proof strip - thin dot-separated credibility row directly under the hero, per the approved
   mockup ("LC Web Design Homepage Build" artifact). */
.lcwd-proof-strip {
	max-width: 1240px; margin: 0 auto 56px; padding: 16px 24px;
	border-top: 1px solid rgba(255,255,255,0.08); border-bottom: 1px solid rgba(255,255,255,0.08);
	display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 10px 14px;
	font-size: 13px; color: var(--lcwd-muted);
}
.lcwd-proof-strip b { color: var(--lcwd-accent-blue); }
.lcwd-proof-strip .lcwd-proof-dot { color: var(--lcwd-muted); opacity: .5; }

/* No-agency-bloat spec grid - horizontal stat tiles, per the approved mockup's .spec-grid. */
.lcwd-spec-grid {
	display: grid; grid-template-columns: repeat(5, minmax(0,1fr)); gap: 1px;
	background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.08);
	border-radius: 12px; overflow: hidden;
}
.lcwd-spec { background-color: var(--lcwd-panel) !important; padding: 26px 18px; text-align: center; }
.lcwd-spec .lcwd-spec-v { font-family: var(--font-heading); color: var(--lcwd-accent-blue); font-size: 1.3rem; font-weight: 700; }
.lcwd-spec .lcwd-spec-l { font-size: 12px; color: var(--lcwd-muted); margin-top: 8px; }
@media (max-width: 760px) { .lcwd-spec-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }

.lcwd-trust-strip {
	background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.08);
	border-radius: 20px; padding: 40px 32px; text-align: center;
}
.lcwd-trust-strip h2 { font-size: clamp(24px, 3vw, 32px); margin: 0 0 32px; }
.lcwd-trust-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 20px; }
.lcwd-trust-item { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.lcwd-trust-icon {
	width: 44px; height: 44px; border-radius: 12px; background: rgba(65,114,232,0.14);
	display: grid; place-items: center; color: var(--lcwd-accent);
}
.lcwd-trust-item span { font-size: 14px; font-weight: 700; color: var(--lcwd-text) !important; }
@media (max-width: 760px) {
	.lcwd-trust-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
}

/* Batch 3 (2026-08-05) - needs-selector, per the approved mockup at Planning/batch-3-mockup.html.
   Cards route to existing anchors where a matching section already exists, otherwise a real
   mailto: with a pre-filled subject line (no dead links, no invented pages). */
.lcwd-needs-grid { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 18px; }
.lcwd-need-card {
	display: block; background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1);
	border-radius: 14px; padding: 24px; text-decoration: none;
	transition: transform .15s ease, border-color .15s ease;
}
.lcwd-need-card:hover, .lcwd-need-card:focus-visible { transform: translateY(-3px); border-color: var(--lcwd-accent); outline: none; }
.lcwd-need-card h3 { color: var(--lcwd-text) !important; font-size: 18px; margin: 0 0 6px; }
.lcwd-need-card p { color: var(--lcwd-muted) !important; font-size: 13px; margin: 0 0 10px; }
.lcwd-need-arrow { color: var(--lcwd-accent-blue) !important; font-weight: 700; font-size: 13px; }
@media (max-width: 760px) { .lcwd-needs-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 520px) { .lcwd-needs-grid { grid-template-columns: 1fr; } }

/* Batch 3 - "Not sure which package?" assist strip below the Packages section's existing cards. */
.lcwd-assist-strip {
	margin-top: 28px; display: flex; align-items: center; justify-content: space-between;
	gap: 20px; flex-wrap: wrap; background: rgba(65,114,232,0.08) !important;
	border: 1px solid rgba(65,114,232,0.25); border-radius: 14px; padding: 22px 26px;
}
.lcwd-assist-strip p { margin: 0; color: var(--lcwd-muted) !important; font-size: 15px; }
.lcwd-assist-strip strong { color: var(--lcwd-text) !important; }
.lcwd-assist-strip .lcwd-btn { margin-top: 0; white-space: nowrap; }

/* Batch 4 (2026-08-05) - Featured Work, per the approved mockup at Planning/batch-4-mockup.html.
   Deliberately no invented "challenge/goals/outcome" narrative - only facts already stated
   elsewhere on this site (real client, real WooCommerce shop), per this project's standing rule
   against fabricating client results. */
.lcwd-featured {
	display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: center;
	background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1);
	border-radius: 20px; padding: 32px;
}
.lcwd-featured-frame { border-radius: 12px; overflow: hidden; border: 1px solid rgba(255,255,255,0.12); }
.lcwd-featured-frame img { display: block; width: 100%; }
.lcwd-featured-badge {
	display: inline-block; background: rgba(224,90,134,0.15); color: #e05a86;
	font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .4px;
	padding: 4px 10px; border-radius: 999px; margin-bottom: 12px;
}
.lcwd-featured-text h3 { color: var(--lcwd-text) !important; font-size: 26px; margin: 0 0 10px; }
.lcwd-featured-text > p { color: var(--lcwd-muted) !important; font-size: 15px; margin: 0 0 10px; text-align: left; max-width: none; }
.lcwd-featured-facts { list-style: none; margin: 16px 0; padding: 0; display: grid; gap: 8px; }
.lcwd-featured-facts li { font-size: 14px; color: var(--lcwd-muted) !important; display: flex; gap: 8px; }
.lcwd-featured-facts li svg { color: var(--lcwd-accent); flex-shrink: 0; }
@media (max-width: 800px) { .lcwd-featured { grid-template-columns: 1fr; } }

/* Batch 4 - Before/After, 100% real: LC Web Design's own homepage from this project's git history
   (commit 678da44, the actual first shipped version) vs. today. Not staged, not fabricated. */
.lcwd-ba-shots { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 24px; }
.lcwd-ba-shot { border-radius: 14px; overflow: hidden; border: 1px solid rgba(255,255,255,0.1); }
.lcwd-ba-shot img { display: block; width: 100%; }
.lcwd-ba-shot-label { padding: 12px 16px; background-color: var(--lcwd-panel) !important; font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: .4px; }
.lcwd-ba-before { color: var(--lcwd-muted) !important; }
.lcwd-ba-after { color: var(--lcwd-accent) !important; }
.lcwd-ba-improvements { list-style: none; margin: 24px 0 0; padding: 0; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 10px 24px; }
.lcwd-ba-improvements li { font-size: 14px; color: var(--lcwd-muted) !important; display: flex; gap: 8px; }
.lcwd-ba-improvements li svg { color: var(--lcwd-accent); flex-shrink: 0; }
@media (max-width: 760px) { .lcwd-ba-shots { grid-template-columns: 1fr; } }
@media (max-width: 600px) { .lcwd-ba-improvements { grid-template-columns: 1fr; } }

/* Batch 5 (2026-08-05) - services ecosystem (hub + spokes), per the approved mockup at
   Planning/batch-5-mockup.html. Every spoke is a real thing this business already offers
   (sourced from the existing Add-ons/Packages pricing), nothing invented. Replaces the old
   3-card "Design Services" grid at the same #services anchor. */
.lcwd-ecosystem { display: grid; grid-template-columns: 1.1fr 1fr; gap: 24px; align-items: stretch; }
.lcwd-eco-hub {
	background: linear-gradient(155deg, var(--lcwd-panel), #1a2540); border: 1px solid rgba(65,114,232,0.3);
	border-radius: 20px; padding: 32px; display: flex; flex-direction: column; justify-content: center;
}
.lcwd-eco-hub-badge { display: inline-block; color: var(--lcwd-accent) !important; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; font-size: 12px; margin-bottom: 10px; }
.lcwd-eco-hub h3 { color: var(--lcwd-text) !important; font-size: 26px; margin: 0 0 10px; }
.lcwd-eco-hub p { color: var(--lcwd-muted) !important; font-size: 15px; margin: 0 0 18px; text-align: left; max-width: none; }
.lcwd-eco-hub-links { display: flex; flex-wrap: wrap; gap: 10px; }
.lcwd-eco-hub-links a { font-size: 13px; font-weight: 700; color: var(--lcwd-accent-blue) !important; text-decoration: none; }

.lcwd-eco-spokes { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 12px; }
.lcwd-eco-spoke {
	background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1); border-radius: 14px;
	padding: 16px; text-decoration: none; display: flex; flex-direction: column; gap: 6px;
	transition: transform .15s ease, border-color .15s ease;
}
.lcwd-eco-spoke:hover, .lcwd-eco-spoke:focus-visible { transform: translateY(-2px); border-color: var(--lcwd-accent); outline: none; }
.lcwd-eco-spoke h4 { font-family: var(--font-heading); font-size: 14px; margin: 0; color: var(--lcwd-text) !important; }
.lcwd-eco-spoke span { font-size: 12px; color: var(--lcwd-muted) !important; }
@media (max-width: 800px) { .lcwd-ecosystem { grid-template-columns: 1fr; } }
@media (max-width: 500px) { .lcwd-eco-spokes { grid-template-columns: 1fr; } }

/* Batch 5 - process ribbon (4 stages). */
.lcwd-process-ribbon { position: relative; display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 20px; margin-top: 10px; }
.lcwd-process-step { position: relative; background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1); border-radius: 14px; padding: 22px 20px; }
.lcwd-process-num {
	width: 30px; height: 30px; border-radius: 50%; background: var(--lcwd-accent); color: var(--lcwd-accent-text);
	display: grid; place-items: center; font-weight: 800; font-family: var(--font-heading); font-size: 14px; margin-bottom: 14px;
}
.lcwd-process-step h4 { font-family: var(--font-heading); font-size: 16px; margin: 0 0 8px; color: var(--lcwd-text) !important; }
.lcwd-process-step p { color: var(--lcwd-muted) !important; font-size: 13px; margin: 0; }
@media (max-width: 800px) { .lcwd-process-ribbon { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 500px) { .lcwd-process-ribbon { grid-template-columns: 1fr; } }

/* Batch 6 (2026-08-05) - FAQ, per the approved-in-audit structure. Uses native <details>/<summary>
   for a genuinely accessible accordion (native keyboard support, native screen-reader semantics,
   content stays in the DOM/crawlable, no custom JS/ARIA plumbing needed, no hidden-content-trap
   risk - simplest way to satisfy the audit's accordion accessibility requirements). */
.lcwd-faq-list { max-width: 760px; margin: 0 auto; display: grid; gap: 10px; }
.lcwd-faq-item {
	background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1);
	border-radius: 12px; padding: 4px 20px;
}
.lcwd-faq-item summary {
	color: var(--lcwd-text) !important; font-weight: 700; font-size: 15px;
	padding: 16px 0; cursor: pointer; list-style: none; display: flex; justify-content: space-between; align-items: center;
}
.lcwd-faq-item summary::-webkit-details-marker { display: none; }
.lcwd-faq-item summary::after { content: '+'; color: var(--lcwd-accent) !important; font-size: 20px; font-weight: 400; margin-left: 12px; }
.lcwd-faq-item[open] summary::after { content: '\2212'; }
.lcwd-faq-item summary:focus-visible { outline: 2px solid var(--lcwd-accent); outline-offset: 2px; }
.lcwd-faq-item p { color: var(--lcwd-muted) !important; font-size: 14px; margin: 0 0 18px; text-align: left; max-width: none; }
.lcwd-faq-item a { color: var(--lcwd-accent-blue) !important; }

/* Batch 6 - Final CTA, dark conversion band. */
.lcwd-final-cta {
	background-color: var(--lcwd-panel) !important; padding: 64px 24px; text-align: center;
	border-radius: 18px; border: 1px solid var(--lcwd-accent-line);
	box-shadow: 0 0 80px -20px var(--lcwd-accent-glow);
}
.lcwd-final-cta-inner { max-width: 640px; margin: 0 auto; }
.lcwd-final-cta h2 { font-size: clamp(24px, 3.4vw, 36px); margin: 0 0 14px; color: var(--lcwd-text) !important; }
.lcwd-final-cta p { color: var(--lcwd-muted) !important; font-size: 16px; margin: 0 0 8px; }
.lcwd-final-cta-reassure { font-size: 13px; margin-top: 14px !important; }

.lcwd-btn {
	display: inline-flex; align-items: center; justify-content: center;
	padding: 14px 30px; border-radius: 8px; font-weight: 800; text-decoration: none;
	background: var(--lcwd-accent); color: var(--lcwd-accent-text) !important; margin-top: 22px;
	box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 24px -6px var(--lcwd-accent-glow);
	transition: filter .15s ease, box-shadow .15s ease, transform .15s ease;
}
.lcwd-btn:hover { filter: brightness(1.08); box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 42px -4px var(--lcwd-accent-glow); transform: translateY(-1px); }
.lcwd-btn:disabled { cursor: not-allowed; opacity: 0.45; box-shadow: none; }
.lcwd-btn:disabled:hover { filter: none; transform: none; }
button.lcwd-btn { border: none; cursor: pointer; font: inherit; }

.lcwd-nexus-platforms { display: flex; gap: 18px; flex-wrap: wrap; }
@media (max-width: 600px) { .lcwd-nexus-platforms { flex-direction: column; } }

.lcwd-section { max-width: 1240px; margin: 0 auto 56px; }
.lcwd-section h2 { color: var(--lcwd-text) !important; font-size: 28px; text-align: center; margin: 0 0 10px; }
.lcwd-section > p.lcwd-lead { color: var(--lcwd-muted) !important; text-align: center; max-width: 640px; margin: 0 auto 32px; }

.lcwd-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 20px; }
.lcwd-card {
	background-color: var(--lcwd-panel) !important;
	border: 1px solid rgba(255, 255, 255, 0.1);
	border-radius: 14px;
	padding: 24px;
}
.lcwd-card h3 { color: var(--lcwd-text) !important; font-size: 19px; margin: 0 0 8px; }
.lcwd-card p { color: var(--lcwd-muted) !important; font-size: 14px; margin: 0 0 14px; }
.lcwd-card a.lcwd-visit { color: var(--lcwd-accent) !important; font-weight: 700; text-decoration: none; }

/* Service card icon badges, 2026-07-30 - cards were previously text-only. */
.lcwd-card-icon {
	width: 48px; height: 48px; border-radius: 12px;
	display: grid; place-items: center; margin-bottom: 14px;
}
.lcwd-card-icon svg { width: 24px; height: 24px; }

/* Client site "browser frame" cards, 2026-07-30. Updated 2026-07-31 (Leon's direct request): now
   shows a real screenshot of each live site's actual homepage inside the frame, taken via a headless
   Playwright container (Docker), instead of the earlier stylised colour-block mockup, real
   screenshots genuinely weren't capturable in this environment when this was first built. The dots
   bar + coloured frame border are kept, still a real, useful "browser window" visual cue. */
.lcwd-cards-clients { margin-top: 8px; }
a.lcwd-client-card {
	display: block;
	background-color: var(--lcwd-panel) !important;
	border: 1px solid rgba(255, 255, 255, 0.1);
	border-radius: 14px;
	padding: 18px 24px 24px;
	text-decoration: none;
	transition: transform .15s ease, border-color .15s ease;
}
a.lcwd-client-card:hover, a.lcwd-client-card:focus-visible { transform: translateY(-3px); border-color: var(--frame-color, var(--lcwd-accent)); }
a.lcwd-client-card:focus-visible { outline: 2px solid var(--lcwd-accent); outline-offset: 2px; }
a.lcwd-client-card h3 { color: var(--lcwd-text) !important; font-size: 19px; margin: 0 0 8px; }
a.lcwd-client-card p { color: var(--lcwd-muted) !important; font-size: 14px; margin: 0 0 10px; }
a.lcwd-client-card .lcwd-visit { color: var(--lcwd-accent) !important; font-weight: 700; font-size: 14px; }

.lcwd-browser-frame {
	border-radius: 10px;
	overflow: hidden;
	margin-bottom: 16px;
	border: 1px solid rgba(255, 255, 255, 0.1);
	background-color: rgba(255, 255, 255, 0.03);
}
.lcwd-browser-dots {
	display: flex; gap: 6px; padding: 10px 12px;
	background-color: var(--frame-color, var(--lcwd-accent));
}
.lcwd-browser-dots span {
	width: 8px; height: 8px; border-radius: 50%;
	background-color: rgba(255, 255, 255, 0.85);
}
.lcwd-client-thumb {
	display: block;
	width: 100%;
	aspect-ratio: 8 / 5;
	object-fit: cover;
	object-position: top center;
}

.lcwd-panel-note {
	text-align: center; max-width: 640px; margin: 0 auto 56px; padding: 20px;
	border-radius: 12px; background: rgba(65, 114, 232, 0.08); border: 1px solid rgba(65, 114, 232, 0.25);
	color: var(--lcwd-muted) !important; font-size: 14px;
}

/* Website Packages section, 2026-08-01 - package name + price badge on each demo card. */
.lcwd-package-badge {
	display: inline-block; background: rgba(65, 114, 232, 0.15); color: var(--lcwd-accent) !important;
	font-family: var(--font-mono); font-size: 12px; font-weight: 500; letter-spacing: .3px; text-transform: uppercase;
	padding: 5px 12px; border-radius: 999px; margin-bottom: 12px;
}

/* "Coming soon" cards - not yet built, so deliberately not a link (real rule elsewhere in this
   codebase: never link to a page that doesn't exist yet) and visually dimmed against the 2 real,
   clickable demo cards next to them. */
div.lcwd-client-card-soon {
	opacity: .72; cursor: default;
}
div.lcwd-client-card-soon:hover { transform: none; border-color: rgba(255, 255, 255, 0.1); }
.lcwd-thumb-placeholder {
	aspect-ratio: 8 / 5; display: grid; place-items: center;
	color: var(--lcwd-muted) !important; font-size: 13px; font-weight: 700;
	text-transform: uppercase; letter-spacing: .5px; background: rgba(255, 255, 255, 0.03);
}
span.lcwd-visit-soon { color: var(--lcwd-muted) !important; font-weight: 700; font-size: 14px; }

/* Add-ons & Domain/Hosting sections, 2026-08-01. Alt band just to separate this section visually
   from the plain dark background either side of it, same panel colour already used for cards. */
.lcwd-section-alt {
	background-color: var(--lcwd-panel) !important; border-radius: 20px;
	padding: 48px 32px; border: 1px solid rgba(255, 255, 255, 0.08);
}
.lcwd-addon-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }
.lcwd-addon {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	padding: 14px 18px; border-radius: 10px; background: rgba(255, 255, 255, 0.03);
	border: 1px solid rgba(255, 255, 255, 0.08);
}
.lcwd-addon span { color: var(--lcwd-muted) !important; font-size: 14px; }
.lcwd-addon strong { color: var(--lcwd-text) !important; font-size: 14px; white-space: nowrap; }

.lcwd-domain-panel {
	display: flex; align-items: center; justify-content: space-between; gap: 32px; flex-wrap: wrap;
	background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255, 255, 255, 0.1);
	border-radius: 20px; padding: 40px;
}
.lcwd-domain-panel h2 { text-align: left; margin: 0 0 10px; }
.lcwd-domain-panel .lcwd-lead { text-align: left; margin: 0; max-width: 520px; }
.lcwd-domain-panel .lcwd-btn { margin-top: 0; flex-shrink: 0; }
@media (max-width: 640px) {
	.lcwd-domain-panel { flex-direction: column; align-items: flex-start; padding: 28px; }
	.lcwd-domain-panel h2, .lcwd-domain-panel .lcwd-lead { text-align: left; }
}

/* Batch 7 (2026-08-05) - real separate pages (Services/Packages/Work/About/Contact + legal pages).
   Shared page-title style for the non-homepage pages. */
.lcwd-page-title { color: var(--lcwd-text) !important; font-size: clamp(30px, 4.5vw, 46px); text-align: center; margin: 0 0 10px; }

/* Packages comparison grid. */
.lcwd-compare-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 18px; margin-top: 8px; }
.lcwd-compare-card {
	position: relative; background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1);
	border-radius: 14px; padding: 22px; display: flex; flex-direction: column;
}
/* 2026-08-27: reordered to match the approved concept's price hierarchy (tier label -> big price
   -> description -> features) using flex `order` on the existing markup, rather than a large price
   badge sitting after a small tier name - no PHP template change needed. */
.lcwd-compare-card h3 {
	order: 1; color: var(--lcwd-muted) !important; font-family: var(--font-mono); font-size: 12px;
	font-weight: 500; letter-spacing: .08em; text-transform: uppercase; margin: 0 0 10px;
}
.lcwd-compare-card .lcwd-package-badge {
	order: 2; display: block; background: none !important; padding: 0; border-radius: 0;
	font-family: var(--font-heading); font-size: 2.1rem; font-weight: 700; text-transform: none;
	letter-spacing: normal; color: var(--lcwd-accent-blue) !important; margin: 0 0 12px;
}
.lcwd-compare-for { order: 3; color: var(--lcwd-muted) !important; font-size: 13px; margin: 0 0 12px; text-align: left; max-width: none; }
.lcwd-compare-list { order: 4; list-style: none; margin: 0 0 16px; padding: 0; display: grid; gap: 6px; flex-grow: 1; }
.lcwd-compare-card .lcwd-visit { order: 6; margin-top: auto; }
.lcwd-compare-list li { color: var(--lcwd-muted) !important; font-size: 13px; padding-left: 16px; position: relative; }
.lcwd-compare-list li::before { content: '\2713'; position: absolute; left: 0; color: var(--lcwd-accent); font-weight: 700; }
.lcwd-compare-popular {
	border-color: var(--lcwd-accent); border-width: 2px;
	box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 44px -12px var(--lcwd-accent-glow);
}
.lcwd-compare-new { border-color: var(--lcwd-accent-blue); box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 32px -10px var(--lcwd-accent-glow); }
.lcwd-compare-new-tag {
	position: absolute; top: -12px; right: 20px; background: var(--lcwd-accent-blue); color: var(--lcwd-accent-text);
	font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .4px; padding: 4px 12px; border-radius: 999px;
}
.lcwd-compare-popular-tag {
	position: absolute; top: -12px; left: 20px; background: var(--lcwd-accent); color: var(--lcwd-accent-text);
	font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .4px; padding: 4px 12px; border-radius: 999px;
}

/* Service detail blocks (Services page). */
.lcwd-service-detail { max-width: 760px; margin: 0 auto 28px; padding-bottom: 28px; border-bottom: 1px solid rgba(255,255,255,0.08); }
.lcwd-service-detail:last-child { border-bottom: none; }
.lcwd-service-detail h3 { color: var(--lcwd-text) !important; font-size: 22px; margin: 0 0 6px; }
.lcwd-service-who { color: var(--lcwd-accent) !important; font-size: 13px; font-weight: 700; margin: 0 0 10px; text-align: left; max-width: none; }
.lcwd-service-detail > p:not(.lcwd-service-who) { color: var(--lcwd-muted) !important; font-size: 15px; text-align: left; max-width: none; margin: 0 0 10px; }
.lcwd-service-detail .lcwd-visit { color: var(--lcwd-accent-blue) !important; font-weight: 700; font-size: 14px; text-decoration: none; }

/* About page body. */
.lcwd-about-body { max-width: 700px; margin: 0 auto; }
.lcwd-about-body h2 { color: var(--lcwd-text) !important; font-size: 20px; text-align: left; margin: 26px 0 8px; }
.lcwd-about-body h2:first-child { margin-top: 0; }
.lcwd-about-body p { color: var(--lcwd-muted) !important; font-size: 15px; text-align: left; max-width: none; margin: 0 0 10px; }
.lcwd-about-body a { color: var(--lcwd-accent-blue) !important; }
/* Real bug fix, 2026-08-05 (Leon: "start your project button text is blue make it black"): the
   rule above (0,1,1 specificity) was beating .lcwd-btn's own colour (0,1,0), same cascade-loss
   pattern already hit twice before on this project. Scoped override wins cleanly (0,2,0). */
.lcwd-about-body .lcwd-btn { color: var(--lcwd-accent-text) !important; }

/* Contact form. */
.lcwd-contact-form { max-width: 600px; margin: 0 auto; display: grid; gap: 18px; }
.lcwd-form-row { display: grid; gap: 6px; }
.lcwd-form-row-split { grid-template-columns: 1fr 1fr; display: grid; gap: 18px; }
.lcwd-form-row-split > div { display: grid; gap: 6px; }
.lcwd-contact-form label { color: var(--lcwd-text) !important; font-size: 14px; font-weight: 700; }
.lcwd-form-optional, .lcwd-form-required { font-weight: 400; color: var(--lcwd-muted) !important; font-size: 12px; }
.lcwd-form-required { color: var(--lcwd-accent) !important; font-weight: 700; }
.lcwd-contact-form input, .lcwd-contact-form select, .lcwd-contact-form textarea {
	background-color: var(--lcwd-bg) !important; color: var(--lcwd-text) !important;
	border: 1px solid rgba(255,255,255,0.15); border-radius: 8px; padding: 12px 14px;
	font-family: var(--font-body); font-size: 15px; width: 100%;
	height: auto; line-height: normal;
}
.lcwd-contact-form input:focus, .lcwd-contact-form select:focus, .lcwd-contact-form textarea:focus {
	outline: 2px solid var(--lcwd-accent); outline-offset: 1px;
}
.lcwd-form-error { display: none; color: #ff8080; font-size: 12px; }
.lcwd-form-row[data-invalid="true"] .lcwd-form-error,
.lcwd-form-row-split > div[data-invalid="true"] .lcwd-form-error { display: block; }
.lcwd-form-row[data-invalid="true"] input, .lcwd-form-row-split > div[data-invalid="true"] input { border-color: #ff8080; }
.lcwd-form-status { display: none; color: var(--lcwd-accent) !important; font-size: 14px; font-weight: 700; margin: 0; }
.lcwd-form-status[data-shown="true"] { display: block; }
@media (max-width: 600px) { .lcwd-form-row-split { grid-template-columns: 1fr; } }

/* Guides section (2026-08-09) - approved style-tile in Planning/guides-section-mockup.html */
.lcwd-guides-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-top: 20px; }
.lcwd-guide-card {
	background: var(--lcwd-panel); border-radius: 14px; overflow: hidden;
	border: 1px solid rgba(255,255,255,0.06); display: block; text-decoration: none;
	transition: transform .15s ease;
}
.lcwd-guide-card:hover { transform: translateY(-3px); }
.lcwd-guide-thumb { height: 140px; background: linear-gradient(135deg, #1a2a4a, var(--lcwd-accent-blue)); }
.lcwd-guide-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lcwd-guide-card-body { padding: 20px; }
.lcwd-guide-tag {
	display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase;
	color: var(--lcwd-accent) !important; background: rgba(65,114,232,0.12); padding: 4px 10px;
	border-radius: 999px; margin-bottom: 12px;
}
.lcwd-guide-card-body h3 { font-family: var(--font-heading); font-size: 18px; margin: 0 0 10px; line-height: 1.3; color: var(--lcwd-text) !important; }
.lcwd-guide-meta { color: var(--lcwd-muted) !important; font-size: 13px; }

.lcwd-guide-article { max-width: 900px; margin: 0 auto; padding: 20px 0 60px; }
.lcwd-guide-article-header { text-align: center; max-width: 720px; margin: 0 auto 30px; }
.lcwd-guide-article-header h1 { font-family: var(--font-heading); font-size: 34px; line-height: 1.25; margin: 14px 0; color: var(--lcwd-text) !important; }
.lcwd-guide-article-meta { color: var(--lcwd-muted) !important; font-size: 14px; }
.lcwd-guide-article-hero { height: 300px; border-radius: 16px; overflow: hidden; margin: 20px 0 40px; background: linear-gradient(135deg, #1a2a4a, var(--lcwd-accent-blue)); }
.lcwd-guide-article-hero img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lcwd-guide-article-body { max-width: 680px; margin: 0 auto; font-size: 17px; line-height: 1.75; color: var(--lcwd-muted) !important; }
.lcwd-guide-article-body h2 { font-family: var(--font-heading); color: var(--lcwd-text) !important; font-size: 26px; margin: 40px 0 16px; }
.lcwd-guide-article-body h3 { font-family: var(--font-heading); color: var(--lcwd-text) !important; font-size: 20px; margin: 30px 0 12px; }
.lcwd-guide-article-body p { margin: 0 0 18px; }
.lcwd-guide-article-body ul { margin: 0 0 18px; padding-left: 22px; }
.lcwd-guide-article-body li { margin-bottom: 8px; }
.lcwd-guide-article-body a { color: var(--lcwd-accent-blue) !important; }
.lcwd-guide-callout {
	background: var(--lcwd-accent-mint-bg) !important; color: var(--lcwd-accent-mint-text) !important;
	border-radius: 12px; padding: 20px 24px; margin: 30px 0; font-size: 15px;
}
.lcwd-guide-callout strong { display: block; margin-bottom: 6px; font-family: var(--font-heading); }
.lcwd-guide-article-body blockquote {
	border-left: 3px solid var(--lcwd-accent); margin: 30px 0; padding: 4px 0 4px 22px;
	font-style: italic; color: var(--lcwd-text) !important;
}
.lcwd-guide-cta { max-width: 680px; margin: 50px auto 0; background: var(--lcwd-panel); border-radius: 14px; padding: 32px; text-align: center; }
.lcwd-guide-cta h3 { font-family: var(--font-heading); font-size: 22px; margin: 0 0 10px; color: var(--lcwd-text) !important; }
.lcwd-guide-cta p { color: var(--lcwd-muted) !important; margin: 0 0 20px; }
.lcwd-guide-related { max-width: 900px; margin: 60px auto 0; }
.lcwd-guide-related h3 { font-family: var(--font-heading); font-size: 20px; margin-bottom: 20px; color: var(--lcwd-text) !important; }
.lcwd-guide-related .lcwd-guides-grid { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 768px) {
	.lcwd-guides-grid, .lcwd-guide-related .lcwd-guides-grid { grid-template-columns: 1fr; }
}

/* Build-Your-Website calculator (2026-08-09 pricing rework, brief section 14). */
.lcwd-calc { max-width: 720px; margin: 20px auto 0; }
.lcwd-calc-step { background: var(--lcwd-panel); border-radius: 14px; padding: 24px; margin-bottom: 18px; border: 1px solid rgba(255,255,255,0.06); }
.lcwd-calc-step h3 { font-family: var(--font-heading); font-size: 17px; color: var(--lcwd-text) !important; margin: 0 0 16px; display: flex; align-items: center; gap: 10px; }
.lcwd-calc-step-num {
	display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px;
	border-radius: 50%; background: var(--lcwd-accent); color: var(--lcwd-accent-text); font-size: 13px; font-weight: 800; flex-shrink: 0;
}
.lcwd-calc-options { display: grid; gap: 10px; }
.lcwd-calc-options-multi { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.lcwd-calc-option {
	display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 10px;
	background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08); cursor: pointer;
	color: var(--lcwd-muted) !important; font-size: 14px;
}
.lcwd-calc-option:has(input:checked) { border-color: var(--lcwd-accent); background: rgba(65,114,232,0.08); color: var(--lcwd-text) !important; }
.lcwd-calc-option input { accent-color: var(--lcwd-accent); flex-shrink: 0; }
.lcwd-calc-products-row { margin-top: 14px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lcwd-calc-products-row label { color: var(--lcwd-muted) !important; font-size: 14px; }
.lcwd-calc-products-row input { width: 90px; background: var(--lcwd-bg) !important; color: var(--lcwd-text) !important; border: 1px solid rgba(255,255,255,0.15); border-radius: 8px; padding: 8px 10px; }
.lcwd-calc-products-note { color: var(--lcwd-muted) !important; font-size: 13px; }
.lcwd-calc-total {
	display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap;
	background: var(--lcwd-bg) !important; border: 2px solid var(--lcwd-accent); border-radius: 14px; padding: 24px 28px;
}
.lcwd-calc-total-label { display: block; color: var(--lcwd-muted) !important; font-size: 13px; text-transform: uppercase; letter-spacing: .5px; }
.lcwd-calc-total-amount { display: block; font-family: var(--font-heading); font-size: 34px; color: var(--lcwd-accent) !important; font-weight: 700; }

/* Client vs. In-House type badge, 2026-08-23 - distinguishes real paying clients from Leon's own
   other businesses on the Work page (Claude Queue q_5401fa61). Same pill shape as
   .lcwd-package-badge, distinct colours so the two badge families stay visually separate. */
.lcwd-type-badge {
	display: inline-block; font-size: 12px; font-weight: 800; letter-spacing: .3px;
	text-transform: uppercase; padding: 5px 12px; border-radius: 999px; margin-bottom: 12px;
}
.lcwd-type-badge--client {
	background: rgba(127, 224, 189, 0.15); color: var(--lcwd-accent-mint-text) !important;
}
.lcwd-type-badge--inhouse {
	background: rgba(79, 124, 255, 0.15); color: var(--lcwd-accent-blue) !important;
}

/* Friday Offer banner (2026-08-31) - shown only on Fridays via lcwd_friday_offer_banner()
   in inc/lcwd-pricing.php, called from front-page.php and page-packages.php. Distinct from
   the sitewide .lcwd-announce bar (own border/spacing) so the two don't look identical if
   they were ever both visible at once. */
.lcwd-friday-banner {
	background-color: var(--lcwd-surface, rgba(255,255,255,.04));
	border: 1px solid var(--lcwd-accent);
	color: var(--lcwd-text, #fff);
	text-align: center;
	font-size: 15px;
	padding: 12px 20px;
	border-radius: 8px;
	margin: 0 0 24px;
}
.lcwd-friday-banner-tag {
	display: inline-block;
	background: var(--lcwd-accent);
	color: var(--lcwd-accent-text);
	font-size: 11px;
	font-weight: 800;
	text-transform: uppercase;
	letter-spacing: .4px;
	padding: 3px 10px;
	border-radius: 999px;
	margin-right: 10px;
}
.lcwd-friday-banner a { color: var(--lcwd-accent-blue, var(--lcwd-accent)) !important; font-weight: 700; }

/* Portal (Stage 3, 2026-08-31) - styled login card + message thread. */
.lcwd-portal-login {
	display: flex;
	justify-content: center;
	padding: 48px 0;
}
.lcwd-portal-login-card {
	background-color: var(--lcwd-surface, rgba(255,255,255,.04));
	border: 1px solid var(--lcwd-line, rgba(255,255,255,.1));
	border-radius: 12px;
	padding: 40px;
	max-width: 420px;
	width: 100%;
	text-align: left;
}
.lcwd-portal-login-card .lcwd-page-title,
.lcwd-portal-login-card .lcwd-lead {
	text-align: left;
	max-width: none;
}

.lcwd-portal-thread {
	display: flex;
	flex-direction: column;
	gap: 16px;
	max-width: 680px;
}
.lcwd-portal-message {
	background-color: var(--lcwd-surface, rgba(255,255,255,.04));
	border: 1px solid var(--lcwd-line, rgba(255,255,255,.1));
	border-left: 3px solid var(--lcwd-accent-blue, var(--lcwd-accent));
	border-radius: 6px;
	padding: 14px 18px;
}
.lcwd-portal-message-admin {
	border-left-color: var(--lcwd-accent);
}
.lcwd-portal-message-meta {
	display: flex;
	gap: 10px;
	align-items: baseline;
	font-size: 13px;
	color: var(--lcwd-muted, #8CA0B4);
	margin-bottom: 6px;
}
.lcwd-portal-message-meta strong {
	color: var(--lcwd-text, #fff);
}
.lcwd-portal-message p {
	margin: 0;
	text-align: left;
}

/* Full-bleed "underlay" hero (2026-08-31) - background image with text overlaid directly on top,
   used where a hero image should sit behind the copy rather than beside it in a two-column split. */
.lcwd-hero-underlay {
	position: relative;
	min-height: 420px;
	display: flex;
	align-items: center;
	border-radius: 12px;
	overflow: hidden;
	background-size: cover;
	background-position: center;
	padding: 48px;
}
.lcwd-hero-underlay::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgba(8,11,16,.97) 0%, rgba(8,11,16,.92) 45%, rgba(8,11,16,.55) 68%, rgba(8,11,16,.15) 100%);
}
.lcwd-hero-underlay > * {
	position: relative;
	z-index: 1;
	max-width: 560px;
}
.lcwd-hero-underlay .lcwd-kicker,
.lcwd-hero-underlay h1,
.lcwd-hero-underlay p {
	text-align: left;
}
.lcwd-hero-underlay h1 {
	color: var(--lcwd-text) !important;
	text-shadow: 0 2px 12px rgba(0,0,0,.6);
}
.lcwd-hero-underlay h1 em {
	color: var(--lcwd-accent-blue) !important;
	font-style: normal;
	text-shadow: 0 0 28px var(--lcwd-accent-glow);
}
.lcwd-hero-underlay p {
	color: var(--lcwd-text) !important;
}
@media (max-width: 700px) {
	.lcwd-hero-underlay { min-height: 320px; padding: 28px; }
	.lcwd-hero-underlay > * { max-width: 100%; }
}

/* ============================================================
   Portal app UI (Stage 4, 2026-08-31 - ChatGPT UX audit) - a calmer,
   more restrained "product" surface than the marketing site's glow-heavy
   treatment. Own token set, own component prefix (.lcwd-app-*), so the
   rest of the site's styling is untouched.
   ============================================================ */
.lcwd-app {
	--app-bg: #0A0C10;
	--app-surface: #11151C;
	--app-surface-2: #151A22;
	--app-border: rgba(255,255,255,.08);
	--app-text: #F5F7FA;
	--app-text-soft: #9DA8B7;
	--app-blue: #4172E8;
	--app-blue-soft: #7BA0FF;
	--app-gold: var(--lcwd-gold, #D9B15C);
	max-width: 760px;
	margin: 0 auto;
}

.lcwd-app-greeting {
	font-size: 1.6rem;
	font-weight: 700;
	color: var(--app-text);
	margin: 0 0 4px;
}
.lcwd-app-subtitle {
	color: var(--app-text-soft);
	margin: 0 0 28px;
	font-size: 15px;
}

/* The single dominant "what happens next" card - the most important
   component in the product, per the UX audit. */
.lcwd-action-card {
	background: var(--app-surface);
	border: 1px solid var(--app-border);
	border-radius: 12px;
	padding: 28px;
	margin-bottom: 24px;
}
.lcwd-action-card--needed {
	border-color: var(--app-blue);
	box-shadow: 0 0 0 1px var(--app-blue), 0 0 32px -12px rgba(65,114,232,.5);
}
.lcwd-action-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
	margin-bottom: 10px;
}
.lcwd-action-eyebrow--needed { color: var(--app-blue-soft); }
.lcwd-action-eyebrow--clear { color: var(--app-text-soft); }
.lcwd-action-headline {
	font-size: 1.3rem;
	font-weight: 700;
	color: var(--app-text);
	margin: 0 0 8px;
}
.lcwd-action-body {
	color: var(--app-text-soft);
	font-size: 15px;
	margin: 0 0 18px;
	max-width: 480px;
}
.lcwd-owner-badge {
	display: inline-block;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	padding: 3px 10px;
	border-radius: 999px;
	margin-bottom: 14px;
}
.lcwd-owner-badge--client {
	background: rgba(217,177,92,.15);
	color: var(--app-gold);
	border: 1px solid rgba(217,177,92,.4);
}
.lcwd-owner-badge--lc {
	background: rgba(65,114,232,.15);
	color: var(--app-blue-soft);
	border: 1px solid rgba(65,114,232,.4);
}

/* Stage journey stepper */
.lcwd-stage-stepper {
	display: flex;
	align-items: center;
	gap: 0;
	margin: 20px 0 4px;
	overflow-x: auto;
}
.lcwd-stage-step {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	flex: 1;
	min-width: 72px;
	position: relative;
}
.lcwd-stage-step-dot {
	width: 12px;
	height: 12px;
	border-radius: 50%;
	background: var(--app-surface-2);
	border: 2px solid var(--app-border);
	z-index: 1;
}
.lcwd-stage-step.is-done .lcwd-stage-step-dot { background: var(--app-blue); border-color: var(--app-blue); }
.lcwd-stage-step.is-current .lcwd-stage-step-dot { background: var(--app-gold); border-color: var(--app-gold); box-shadow: 0 0 0 4px rgba(217,177,92,.18); }
.lcwd-stage-step-label {
	font-size: 12px;
	color: var(--app-text-soft);
	text-align: center;
}
.lcwd-stage-step.is-current .lcwd-stage-step-label,
.lcwd-stage-step.is-done .lcwd-stage-step-label { color: var(--app-text); font-weight: 600; }
.lcwd-stage-step::before {
	content: "";
	position: absolute;
	top: 5px;
	left: -50%;
	width: 100%;
	height: 2px;
	background: var(--app-border);
	z-index: 0;
}
.lcwd-stage-step:first-child::before { display: none; }
.lcwd-stage-step.is-done::before { background: var(--app-blue); }

/* Generic calm module panel - used for staging/questionnaire/invoices/messages */
.lcwd-app-module {
	background: var(--app-surface);
	border: 1px solid var(--app-border);
	border-radius: 10px;
	padding: 22px 24px;
	margin-bottom: 20px;
}
.lcwd-app-module h2, .lcwd-app-module h3 {
	color: var(--app-text);
	margin: 0 0 6px;
	font-size: 1.05rem;
	text-align: left;
}
.lcwd-app-module p {
	color: var(--app-text-soft);
	font-size: 14px;
	margin: 0 0 12px;
	text-align: left;
}

/* Staging site module - the "your site is being built, live" moment */
.lcwd-staging-module {
	background: linear-gradient(135deg, rgba(65,114,232,.1), rgba(217,177,92,.06));
	border: 1px solid rgba(65,114,232,.3);
}
.lcwd-staging-pulse {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 12px;
	font-weight: 700;
	color: var(--app-blue-soft);
	text-transform: uppercase;
	letter-spacing: .05em;
	margin-bottom: 8px;
}
.lcwd-staging-pulse-dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: #3FD6FF;
	box-shadow: 0 0 8px #3FD6FF;
}

/* Questionnaire */
.lcwd-questionnaire-q { margin-bottom: 16px; text-align: left; }
.lcwd-questionnaire-q label { display: block; color: var(--app-text); font-weight: 600; margin-bottom: 6px; font-size: 14px; }
.lcwd-questionnaire-q textarea, .lcwd-questionnaire-q input {
	width: 100%;
	background: var(--app-surface-2);
	border: 1px solid var(--app-border);
	border-radius: 6px;
	color: var(--app-text);
	padding: 10px 12px;
	font-size: 14px;
}
.lcwd-questionnaire-answer {
	background: var(--app-surface-2);
	border-radius: 6px;
	padding: 10px 12px;
	color: var(--app-text);
	font-size: 14px;
}

/* Invoices */
.lcwd-invoice-row {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 12px;
	padding: 12px 0;
	border-bottom: 1px solid var(--app-border);
}
.lcwd-invoice-row:last-child { border-bottom: none; }
.lcwd-invoice-desc { color: var(--app-text); font-size: 14px; }
.lcwd-invoice-amount { color: var(--app-text); font-weight: 700; font-size: 15px; }
.lcwd-invoice-status {
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .04em;
	padding: 3px 10px;
	border-radius: 999px;
	white-space: nowrap;
}
.lcwd-invoice-status--pending { background: rgba(217,177,92,.15); color: var(--app-gold); }
.lcwd-invoice-status--paid { background: rgba(90,200,120,.15); color: #6fd08a; }

/* Admin's own small inline forms inside modules */
.lcwd-app-admin-form { margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--app-border); }
.lcwd-app-admin-form label { display: block; font-size: 12px; color: var(--app-text-soft); margin-bottom: 4px; }
.lcwd-app-admin-form input, .lcwd-app-admin-form select, .lcwd-app-admin-form textarea {
	width: 100%;
	background: var(--app-surface-2);
	border: 1px solid var(--app-border);
	border-radius: 6px;
	color: var(--app-text);
	padding: 8px 10px;
	font-size: 13px;
	margin-bottom: 10px;
}
.lcwd-app-btn {
	display: inline-block;
	background: var(--app-blue);
	color: #fff !important;
	border: none;
	border-radius: 6px;
	padding: 10px 18px;
	font-size: 14px;
	font-weight: 600;
	cursor: pointer;
	text-decoration: none;
}
.lcwd-app-btn:hover { background: var(--app-blue-soft); }
.lcwd-app-btn-ghost {
	background: transparent;
	border: 1px solid var(--app-border);
	color: var(--app-text) !important;
}

/* ============================================================
   Client Overview redesign additions (2026-09-06): header row with the
   "Take the tour" trigger, stage-expectation copy, the staging/current-
   site link row, and the permanent Contact & Support module.
   ============================================================ */
.lcwd-app-header-row {
	display: flex;
	justify-content: space-between;
	align-items: flex-start;
	gap: 16px;
	margin-bottom: 4px;
}
.lcwd-app-header-row .lcwd-app-greeting,
.lcwd-app-header-row .lcwd-app-subtitle { margin-bottom: 0; }
.lcwd-app-header-row > div:first-child { margin-bottom: 24px; }
.lcwd-app-header-actions {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
}
/* "Live Site" header button (2026-09-06, revised same day into 3 distinct site-link buttons - Live
   Site/Staging/Concept - rather than one collapsing link; see lc_portal_render_header_actions()).
   Only the Live Site button gets this accent glow - it's the single most-relevant action once a
   project has actually launched; Staging and Concept render as plain ghost buttons alongside it,
   same as "Take the tour". */
.lcwd-visit-site-btn {
	box-shadow: 0 0 0 1px rgba(65,114,232,.4), 0 0 24px -8px rgba(65,114,232,.6);
}

.lcwd-stage-expectation {
	color: var(--app-text-soft);
	font-size: 13.5px;
	line-height: 1.5;
	margin: 10px 0 0;
	padding-top: 12px;
	border-top: 1px dashed var(--app-border);
}

.lcwd-overview-links {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin-top: 16px;
}
.lcwd-overview-staging-link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}
.lcwd-overview-staging-link .lcwd-staging-pulse-dot {
	background: #3FD6FF;
	box-shadow: 0 0 8px #3FD6FF;
}

.lcwd-contact-module { text-align: left; margin-top: 4px; }
.lcwd-contact-module .lcwd-overview-links { margin-top: 14px; }

/* ============================================================
   Portal's own bottom mobile nav (2026-09-06, WEBSITE_BUILD_RULES.md §4) -
   same fixed-bar visual system as the site-wide #lcwd-bottom-nav so it
   reads as one site, but with the portal's own item set (Overview/Project/
   Live Site/Contact) and only ever shown inside the client's own portal
   context - see lc_portal_is_client_portal_context() in
   inc/lcwd-portal-client-ui.php, which also stops the generic marketing
   bottom nav rendering at the same time so the two never stack.
   ============================================================ */
#lcwd-portal-bottom-nav { display: none; }
@media (max-width: 921px) {
	#lcwd-portal-bottom-nav {
		display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 99970;
		background: var(--lcwd-panel, #11151C); border-top: 1px solid rgba(255,255,255,0.08);
		padding: 8px 4px calc(8px + env(safe-area-inset-bottom));
	}
	#lcwd-portal-bottom-nav a {
		flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
		text-decoration: none; padding: 6px 2px; position: relative; min-width: 0;
	}
	#lcwd-portal-bottom-nav svg { width: 20px; height: 20px; color: var(--app-text-soft, #9DA8B7); flex-shrink: 0; }
	#lcwd-portal-bottom-nav span { font-size: 9.5px; color: var(--app-text-soft, #9DA8B7) !important; font-weight: 600; white-space: nowrap; }
	#lcwd-portal-bottom-nav a.active svg { color: var(--app-blue-soft, #7BA0FF); }
	#lcwd-portal-bottom-nav a.active span { color: var(--app-blue-soft, #7BA0FF) !important; }
	#lcwd-portal-bottom-nav a.active::before {
		content: ''; position: absolute; top: -9px; left: 50%; transform: translateX(-50%);
		width: 26px; height: 3px; background: var(--app-blue, #4172E8); border-radius: 0 0 3px 3px;
	}
	/* .lcwd-app already sits inside a page that gets the same body padding-bottom the site-wide
	   bottom nav relies on (astra-chrome.css's existing 921px block sets it unconditionally), so
	   no extra bottom padding is needed here - it would double up otherwise. */
	#lcwd-portal-bottom-nav .lcwd-nav-badge {
		position: absolute; top: 0; right: 22%; min-width: 15px; height: 15px; padding: 0 4px;
		font-size: 9px; line-height: 15px;
	}
}

/* Pending-count badge (2026-09-07) on the Inbox/Questionnaire nav items, both breakpoints - gold to
   match this system's existing "needs attention" colour (.lcwd-owner-badge--client, .lcwd-invoice-
   status--pending use the same var), not a new alert colour. */
.lcwd-nav-badge {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
	background: var(--app-gold, #D9B15C); color: #1a1408; font-size: 11px; font-weight: 700; line-height: 1;
}

/* ============================================================
   Portal's own left side nav (2026-09-06, Leon's direct request) - the
   PRIMARY desktop navigation for the client-facing portal (Overview +
   project detail). Same 922px breakpoint as the bottom nav's own 921px
   max-width cutoff (one pixel apart on purpose) so exactly one of the two
   navs is ever visible - never both, never neither. `.lcwd-portal-layout`
   is the two-column grid wrapper the templates put around the side nav +
   `.lcwd-app` together; below the breakpoint it collapses back to the
   existing single-column `.lcwd-app` flow untouched.
   ============================================================ */
.lcwd-portal-layout {
	/* Same token set as .lcwd-app (astra-chrome.css's "Portal app UI" block) - duplicated here
	   rather than relied on via inheritance, since .lcwd-portal-sidenav is a SIBLING of .lcwd-app
	   inside this wrapper, not a descendant of it, so it can't read .lcwd-app's own custom
	   properties otherwise. */
	--app-bg: #0A0C10;
	--app-surface: #11151C;
	--app-surface-2: #151A22;
	--app-border: rgba(255,255,255,.08);
	--app-text: #F5F7FA;
	--app-text-soft: #9DA8B7;
	--app-blue: #4172E8;
	--app-blue-soft: #7BA0FF;
	--app-gold: var(--lcwd-gold, #D9B15C);
}
.lcwd-portal-sidenav { display: none; }

@media (min-width: 922px) {
	.lcwd-portal-layout {
		display: grid;
		grid-template-columns: 200px 1fr;
		gap: 32px;
		align-items: start;
		/* Widened 1020px -> 1160px (2026-09-06 layout audit - Leon: "cramped, everything stacked") so
		   the content column has real room (~928px) for the 2-up grids below, not just a slightly
		   wider single column. */
		max-width: 1160px;
		margin: 0 auto;
	}
	.lcwd-portal-layout .lcwd-app { max-width: none; margin: 0; }
	.lcwd-portal-sidenav {
		display: flex;
		flex-direction: column;
		gap: 2px;
		position: sticky;
		top: 24px;
		background: var(--app-surface);
		border: 1px solid var(--app-border);
		border-radius: 12px;
		padding: 12px;
	}
	.lcwd-portal-sidenav a {
		display: flex;
		align-items: center;
		gap: 10px;
		padding: 10px 12px;
		border-radius: 8px;
		color: var(--app-text-soft) !important;
		text-decoration: none;
		font-size: 14px;
		font-weight: 600;
	}
	.lcwd-portal-sidenav svg { width: 18px; height: 18px; flex-shrink: 0; }
	.lcwd-portal-sidenav a:hover { background: var(--app-surface-2); color: var(--app-text) !important; }
	.lcwd-portal-sidenav a.active { background: rgba(65,114,232,.15); color: var(--app-blue-soft) !important; }
	.lcwd-portal-sidenav a.active svg { color: var(--app-blue-soft); }
	.lcwd-portal-sidenav .lcwd-nav-badge { margin-left: auto; }
}

@media (max-width: 480px) {
	.lcwd-app-header-row { flex-direction: column; }
	.lcwd-tour-trigger-btn { align-self: flex-start; }
}

/* ============================================================
   Layout audit (2026-09-06, Leon: "cramped and bad - everything stacked
   vertically instead of using inline/grid layouts where it makes sense").
   Two additions: a reusable 2-up grid for short, related blocks (stage
   status next to site links, invoices next to order history, client
   uploads next to LC deliverables), and the project page's own tab-strip
   (secondary nav "within the project area", per Leon's own suggested
   shape) now that its content is split into real sub-views instead of one
   long scroll. Both collapse to plain single-column stacking below 800px -
   genuinely long content (the questionnaire form, the message thread)
   stays full-width/stacked at every size, per the same audit's own
   distinction between "short info" and "long content".
   ============================================================ */
.lcwd-grid-2 {
	display: grid;
	gap: 20px;
}
@media (min-width: 800px) {
	.lcwd-grid-2 { grid-template-columns: 1fr 1fr; align-items: start; }
	/* Inside a 2-up column, a module's own bottom margin just adds uneven double-gutter spacing
	   against the grid `gap` - the grid gap already provides it. */
	.lcwd-grid-2 > .lcwd-app-module,
	.lcwd-grid-2 > .lcwd-action-card { margin-bottom: 0; }
}

.lcwd-project-tabs {
	display: flex;
	gap: 4px;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	border-bottom: 1px solid var(--app-border);
	margin: 4px 0 24px;
	padding-bottom: 0;
}
.lcwd-project-tabs a {
	display: inline-block;
	padding: 10px 16px;
	font-size: 14px;
	font-weight: 600;
	color: var(--app-text-soft) !important;
	text-decoration: none;
	white-space: nowrap;
	border-bottom: 2px solid transparent;
	margin-bottom: -1px;
}
.lcwd-project-tabs a:hover { color: var(--app-text) !important; }
.lcwd-project-tabs a.active {
	color: var(--app-text) !important;
	border-bottom-color: var(--app-blue);
}

/* Real "Pay Now" button (Stage 7, 2026-09-06) - same accent-glow treatment as the header's "Live
   Site" button, since this is the single most-actionable thing on a pending invoice row. */
.lcwd-pay-now-btn {
	box-shadow: 0 0 0 1px rgba(65,114,232,.4), 0 0 24px -8px rgba(65,114,232,.6);
	padding: 6px 14px !important;
	font-size: 13px !important;
}

/* ============================================================
   Portal mobile responsiveness (2026-08-31). Baseline is already
   single-column (.lcwd-app max-width:760px), these rules handle the
   specific components that don't just stack cleanly on narrow screens.
   ============================================================ */
@media (max-width: 600px) {
	.lcwd-app { padding: 0 4px; }
	.lcwd-app-greeting { font-size: 1.3rem; }
	.lcwd-app-module { padding: 18px 16px; }
	.lcwd-action-card { padding: 20px 18px; }
	.lcwd-action-headline { font-size: 1.1rem; }

	/* Stage stepper: 5 labels under dots is too tight under ~420px. Keep the
	   dots+line (they carry the "how far along" signal at a glance even
	   unlabelled) but drop to abbreviated single-word/short labels and let
	   the row scroll horizontally rather than wrap/overlap. */
	.lcwd-stage-stepper {
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
		padding-bottom: 4px;
		scrollbar-width: thin;
	}
	.lcwd-stage-step { min-width: 64px; }
	.lcwd-stage-step-label { font-size: 11px; }
	/* Current stage's label stays legible even if others truncate. */
	.lcwd-stage-step.is-current .lcwd-stage-step-label { font-size: 12px; }

	/* Invoice row: stack description above the amount/status/action group,
	   which itself wraps rather than forcing a horizontal squeeze. */
	.lcwd-invoice-row {
		flex-direction: column;
		align-items: flex-start;
		gap: 8px;
	}
	.lcwd-invoice-row > div[style*="display:flex"] {
		width: 100%;
		flex-wrap: wrap;
		gap: 8px !important;
	}

	/* Owner badge + eyebrow + headline: already stack (block elements), just
	   tighten spacing so the card doesn't feel oversized on a small screen. */
	.lcwd-owner-badge { margin-bottom: 10px; }
	.lcwd-action-eyebrow { display: block; margin-bottom: 8px; }

	/* Login card: full-width with breathing room instead of a fixed max-width
	   card floating in a sea of padding. */
	.lcwd-portal-login { padding: 24px 0; }
	.lcwd-portal-login-card { padding: 28px 20px; max-width: 100%; }

	/* Touch targets: buttons and the stepper dots' tap area (the dot itself
	   is decorative-small, but its clickable/glanceable area should not be). */
	.lcwd-app-btn, .lcwd-app-btn-ghost { padding: 12px 20px; font-size: 15px; width: 100%; text-align: center; }
	.lcwd-app-admin-form .lcwd-app-btn { width: 100%; }
	.lcwd-invoice-row form .lcwd-app-btn-ghost { width: auto; padding: 8px 14px; }
	.lcwd-stage-step { padding: 6px 0; } /* larger tap/visual area around each dot+label */

	/* Message send button and textarea get the same full-width touch-friendly treatment. */
	#lc-portal-messages textarea { font-size: 16px; } /* 16px prevents iOS auto-zoom on focus */
	.lcwd-app-admin-form input, .lcwd-app-admin-form select, .lcwd-app-admin-form textarea { font-size: 16px; }
}

/* WP admin bar eats real vertical space on mobile for a logged-in admin
   checking their own portal - WP already collapses it to a shorter bar
   under 782px, this just makes sure our own fixed-position elements (none
   currently, but any could exist) never sit under it. Also nudge the very
   top of the app content down slightly so nothing collides with the bar's
   bottom edge on small screens. */
@media (max-width: 782px) {
	.admin-bar .lcwd-app { margin-top: 4px; }
}

/* Freebies (Stage 5, 2026-08-31) */
.lcwd-freebie-gate { max-width: 640px; }
.lcwd-freebie-form { display: flex; gap: 12px; flex-wrap: wrap; margin: 16px 0; }
.lcwd-freebie-form input[type="email"] {
	flex: 1; min-width: 220px; padding: 12px 14px; border-radius: 6px;
	border: 1px solid var(--lcwd-line, rgba(255,255,255,.15));
	background: var(--lcwd-surface, rgba(255,255,255,.04)); color: var(--lcwd-text, #fff);
}
.lcwd-freebie-list { text-align: left; color: var(--lcwd-text, #fff); line-height: 1.8; }
.lcwd-freebie-list li { margin-bottom: 6px; }
@media (max-width: 600px) {
	.lcwd-freebie-form { flex-direction: column; }
	.lcwd-freebie-form button { width: 100%; }
}

/* Services page card grid (2026-09-02) - services previously rendered as a plain single-column
   list (.lcwd-service-detail, kept below for any other page still using it) while Home/Packages
   already used the real .lcwd-cards/.lcwd-card grid. This reuses that same pattern instead of
   inventing a new one, plus a few small additions the plain list never needed. */
.lcwd-kicker { display: inline-block; color: var(--lcwd-accent) !important; font-family: var(--font-mono); font-weight: 500; letter-spacing: 1px; text-transform: uppercase; font-size: 12px; margin-bottom: 14px; }
.lcwd-card-who { color: var(--lcwd-accent) !important; font-family: var(--font-mono); font-size: 11.5px; font-weight: 500; text-transform: uppercase; letter-spacing: .3px; margin: 0 0 10px; }
.lcwd-card-price { font-family: var(--font-heading); font-size: 19px; font-weight: 700; color: var(--lcwd-text) !important; margin: 4px 0 14px; }
.lcwd-card-price small { display: block; font-family: var(--font-body); font-weight: 400; font-size: 12px; color: var(--lcwd-muted) !important; margin-top: 2px; }
.lcwd-card.lcwd-card-featured {
	grid-column: span 2; position: relative;
	background: linear-gradient(150deg, var(--lcwd-panel), #161a22) !important;
	border: 1px solid var(--lcwd-accent-line); box-shadow: 0 0 60px -22px var(--lcwd-accent-glow);
}
.lcwd-card-featured-inner { display: flex; gap: 26px; align-items: flex-start; }
.lcwd-card-featured-inner .lcwd-card-icon { margin-bottom: 0; flex-shrink: 0; }
@media (max-width: 700px) {
	.lcwd-card.lcwd-card-featured { grid-column: span 1; }
	.lcwd-card-featured-inner { flex-direction: column; gap: 14px; }
}

/* Ongoing Maintenance cards (Packages page, 2026-09-02) - mint accent (matches the existing
   .lcwd-reassure-panel mint tokens) to read as a distinct band from the blue package/service cards. */
.lcwd-care-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; }
.lcwd-care-card { background-color: var(--lcwd-panel) !important; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 14px; padding: 24px; display: flex; flex-direction: column; }
.lcwd-care-card h3 { color: var(--lcwd-text) !important; font-size: 18px; margin: 0 0 6px; }
.lcwd-care-price { font-family: var(--font-heading); font-size: 26px; font-weight: 800; color: var(--lcwd-accent-mint-text) !important; margin: 0 0 14px; }
.lcwd-care-card ul { list-style: none; margin: 0 0 18px; padding: 0; flex-grow: 1; }
.lcwd-care-card li { color: var(--lcwd-muted) !important; font-size: 13.5px; padding-left: 18px; position: relative; margin-bottom: 8px; }
.lcwd-care-card li::before { content: '\2713'; position: absolute; left: 0; color: var(--lcwd-accent-mint-text); font-weight: 700; }
.lcwd-care-card .lcwd-btn-secondary { margin-top: auto; }
.lcwd-care-tier2 { border-color: rgba(127, 224, 189, .35); }
.lcwd-care-tier3 { border-color: rgba(127, 224, 189, .6); box-shadow: 0 0 50px -22px rgba(127, 224, 189, .4); }

/* "Add to Basket" buttons on Packages page (2026-09-02). Sits inside .lcwd-compare-card, which is
   a flex column using `order` to lay out its children (h3=1, price=2, tagline=3, list=4) - this
   needs an explicit order too or it flexes to the very top (order:0, before h3). Order 5 keeps it
   right after the feature list and above "Prefer to talk" (bumped to order:6 at its own rule,
   ~line 677), i.e. at the bottom of the card, exactly above the talk-to-us link. */
.lcwd-compare-card .lcwd-buy-btn { order: 5; width: 100%; margin-top: 10px; }
.lcwd-compare-card .lcwd-visit { text-align: center; margin-top: 10px; }

/* Cart/Checkout pages (2026-09-02) - previously wrapped in the trashed Silverbark demo's own
   chrome; now real lcwd- pages, so WooCommerce's default light-theme cart/checkout tables need
   dark-theme overrides same as everywhere else on the site. */
.lcwd-woo-section table.shop_table { background: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1) !important; border-radius: 14px; color: var(--lcwd-text) !important; }
.lcwd-woo-section table.shop_table thead, .lcwd-woo-section table.shop_table tr { background: transparent !important; }
.lcwd-woo-section table.shop_table th { color: var(--lcwd-muted) !important; border-bottom: 1px solid rgba(255,255,255,0.1) !important; }
.lcwd-woo-section table.shop_table td { border-top: 1px solid rgba(255,255,255,0.08) !important; color: var(--lcwd-text) !important; }
.lcwd-woo-section .woocommerce-cart-form, .lcwd-woo-section .cart-collaterals, .lcwd-woo-section .woocommerce-checkout-review-order, .lcwd-woo-section .woocommerce-billing-fields, .lcwd-woo-section .woocommerce-additional-fields { color: var(--lcwd-text) !important; }
.lcwd-woo-section .cart_totals, .lcwd-woo-section #order_review { background: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1) !important; border-radius: 14px; padding: 20px; }
/* 2026-09-03: `.cart_totals h2`/`#order_review_heading` ship their own opaque white background in
   Astra's WooCommerce compat CSS, sitting on top of the dark panel above (near-invisible white-on-
   white text) - the general `.lcwd-woo-section label` etc. rules never touched these since they're
   headings, not labels. */
.lcwd-woo-section .cart_totals h2, .lcwd-woo-section #order_review_heading, .lcwd-woo-section h3#order_review_heading {
	background: transparent !important; color: var(--lcwd-text) !important; padding: 0 0 14px !important; margin: 0 0 14px !important;
	border-bottom: 1px solid rgba(255,255,255,0.1) !important; font-size: 19px !important;
}
.lcwd-woo-section input.input-text, .lcwd-woo-section select, .lcwd-woo-section textarea {
	background: rgba(255,255,255,0.04) !important; border: 1px solid rgba(255,255,255,0.15) !important;
	color: var(--lcwd-text) !important; border-radius: 6px !important;
}
.lcwd-woo-section label { color: var(--lcwd-muted) !important; }
.lcwd-woo-section .button, .lcwd-woo-section button.button, .lcwd-woo-section #place_order {
	background: var(--lcwd-accent) !important; color: var(--lcwd-accent-text) !important;
	border-radius: 8px !important; border: none !important; font-weight: 800 !important;
	box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 0 24px -6px var(--lcwd-accent-glow) !important;
}
.lcwd-woo-section .woocommerce-message, .lcwd-woo-section .woocommerce-info {
	background: var(--lcwd-accent-soft) !important; border-top-color: var(--lcwd-accent) !important; color: var(--lcwd-text) !important;
}

/* LC Live Chat widget (2026-09-02) - floating bubble, bottom-right, sitewide except wp-admin/Portal. */
#lcwd-chat-root { position: fixed; right: 20px; bottom: 20px; z-index: 99990; font-family: var(--font-body); }
#lcwd-chat-bubble {
	width: 58px; height: 58px; padding: 0; border-radius: 50%; background: var(--lcwd-accent); color: var(--lcwd-accent-text);
	border: none; cursor: pointer; display: grid; place-items: center; position: relative;
	box-shadow: 0 0 0 1px var(--lcwd-accent-line), 0 6px 28px -6px var(--lcwd-accent-glow);
	transition: transform .15s ease;
}
#lcwd-chat-bubble:hover { transform: translateY(-2px); }
#lcwd-chat-dot { position: absolute; top: 2px; right: 2px; width: 13px; height: 13px; border-radius: 50%; border: 2px solid var(--lcwd-bg); }
.lcwd-chat-dot-on { background: #3ddc84; }
.lcwd-chat-dot-off { background: var(--lcwd-muted); }
#lcwd-chat-panel {
	position: absolute; right: 0; bottom: 74px; width: 340px; max-width: calc(100vw - 40px);
	background: var(--lcwd-panel); border: 1px solid rgba(255,255,255,0.12); border-radius: 16px;
	box-shadow: 0 20px 60px -12px rgba(0,0,0,0.6); display: flex; flex-direction: column; overflow: hidden;
	max-height: 70vh;
}
/* 2026-09-03 fix: the `display: flex` above (ID selector) outranks the browser's own default
   `[hidden]{display:none}` rule (attribute selector, much lower specificity), so the panel was
   showing on every page load regardless of the `hidden` attribute the JS toggles - close/minimise
   silently did nothing. This restores hidden's actual effect. */
#lcwd-chat-panel[hidden] { display: none !important; }
#lcwd-chat-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; padding: 16px 18px; background: rgba(255,255,255,0.03); border-bottom: 1px solid rgba(255,255,255,0.08); }
#lcwd-chat-header strong { display: block; color: var(--lcwd-text) !important; font-family: var(--font-heading); font-size: 15px; }
#lcwd-chat-status { display: block; color: var(--lcwd-muted) !important; font-size: 12.5px; margin-top: 3px; }
#lcwd-chat-close { background: none; border: none; color: var(--lcwd-muted); font-size: 22px; line-height: 1; cursor: pointer; padding: 0; }
#lcwd-chat-close:hover { color: var(--lcwd-text); }
#lcwd-chat-pre { padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; }
#lcwd-chat-pre p { color: var(--lcwd-muted) !important; font-size: 13px; margin: 0 0 4px; }
#lcwd-chat-pre input, #lcwd-chat-pre textarea {
	background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.15); border-radius: 8px;
	padding: 10px 12px; color: var(--lcwd-text); font-family: inherit; font-size: 14px; resize: vertical;
}
#lcwd-chat-pre input::placeholder, #lcwd-chat-pre textarea::placeholder { color: var(--lcwd-muted); opacity: .8; }
.lcwd-chat-error { color: #ff8080 !important; font-size: 12.5px; margin: 0; }
#lcwd-chat-thread { display: flex; flex-direction: column; flex-grow: 1; min-height: 0; }
#lcwd-chat-messages { flex-grow: 1; overflow-y: auto; padding: 14px 18px; display: flex; flex-direction: column; gap: 8px; max-height: 340px; }
.lcwd-chat-msg { display: flex; }
.lcwd-chat-msg-visitor { justify-content: flex-end; }
.lcwd-chat-msg-admin { justify-content: flex-start; }
.lcwd-chat-bubble-inner { max-width: 78%; padding: 9px 13px; border-radius: 12px; font-size: 13.5px; line-height: 1.4; word-wrap: break-word; }
.lcwd-chat-msg-visitor .lcwd-chat-bubble-inner { background: var(--lcwd-accent); color: var(--lcwd-accent-text); }
.lcwd-chat-msg-admin .lcwd-chat-bubble-inner { background: rgba(255,255,255,0.06); color: var(--lcwd-text); border: 1px solid rgba(255,255,255,0.1); }
#lcwd-chat-send-form { display: flex; gap: 8px; padding: 12px 14px; border-top: 1px solid rgba(255,255,255,0.08); }
#lcwd-chat-reply {
	flex-grow: 1; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.15); border-radius: 8px;
	padding: 9px 12px; color: var(--lcwd-text); font-family: inherit; font-size: 13.5px;
}
#lcwd-chat-send-form button { margin-top: 0; padding: 8px 16px; }
@media (max-width: 480px) {
	#lcwd-chat-root { right: 12px; bottom: 12px; }
	#lcwd-chat-panel { width: calc(100vw - 24px); right: -6px; }
}

/* My Account page (2026-09-03) - real page-my-account.php override now wraps WooCommerce's native
   myaccount markup in .lcwd-woo-section (same as Cart/Checkout), these target its specific classes
   (nav tabs, order/download tables, address cards, edit-account/login forms) not covered by the
   more generic .lcwd-woo-section rules above. */
.lcwd-myaccount-section .woocommerce-MyAccount-navigation {
	background: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1) !important;
	border-radius: 14px; overflow: hidden; padding: 8px 0;
}
.lcwd-myaccount-section .woocommerce-MyAccount-navigation ul { margin: 0; padding: 0; list-style: none; }
.lcwd-myaccount-section .woocommerce-MyAccount-navigation-link { border: none !important; }
.lcwd-myaccount-section .woocommerce-MyAccount-navigation-link a {
	display: block; padding: 12px 20px; color: var(--lcwd-muted) !important; text-decoration: none; font-size: 14px;
}
.lcwd-myaccount-section .woocommerce-MyAccount-navigation-link a:hover { color: var(--lcwd-text) !important; background: rgba(255,255,255,0.03); }
.lcwd-myaccount-section .woocommerce-MyAccount-navigation-link.is-active a {
	background: var(--lcwd-accent-soft) !important; color: var(--lcwd-accent-blue) !important; font-weight: 700;
	border-left: 3px solid var(--lcwd-accent) !important;
}
.lcwd-myaccount-section .woocommerce-MyAccount-content { color: var(--lcwd-text) !important; }
.lcwd-myaccount-section .woocommerce-MyAccount-content > p,
.lcwd-myaccount-section .woocommerce-MyAccount-content a:not(.button) { color: var(--lcwd-muted) !important; }
.lcwd-myaccount-section .woocommerce-MyAccount-content a:not(.button) { color: var(--lcwd-accent-blue) !important; }
.lcwd-myaccount-section table.woocommerce-orders-table, .lcwd-myaccount-section table.shop_table_responsive {
	background: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1) !important; border-radius: 14px; color: var(--lcwd-text) !important;
}
.lcwd-myaccount-section table.woocommerce-orders-table th { color: var(--lcwd-muted) !important; border-bottom: 1px solid rgba(255,255,255,0.1) !important; background: transparent !important; }
.lcwd-myaccount-section table.woocommerce-orders-table td { border-top: 1px solid rgba(255,255,255,0.08) !important; color: var(--lcwd-text) !important; }
.lcwd-myaccount-section .woocommerce-orders-table__cell-order-status { color: var(--lcwd-accent-mint-text) !important; }
.lcwd-myaccount-section .woocommerce-Addresses, .lcwd-myaccount-section .woocommerce-Address {
	color: var(--lcwd-text) !important;
}
.lcwd-myaccount-section .woocommerce-Address-title { display: flex; align-items: center; justify-content: space-between; }
.lcwd-myaccount-section .woocommerce-Address-title h3 { color: var(--lcwd-text) !important; }
.lcwd-myaccount-section address {
	background: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1) !important;
	border-radius: 14px; padding: 20px; color: var(--lcwd-muted) !important; font-style: normal;
}
.lcwd-myaccount-section fieldset {
	background: var(--lcwd-panel) !important; border: 1px solid rgba(255,255,255,0.1) !important;
	border-radius: 14px; padding: 20px; margin-bottom: 16px;
}
.lcwd-myaccount-section fieldset legend { color: var(--lcwd-text) !important; font-weight: 700; padding: 0 8px; }
.lcwd-myaccount-section mark { background: none; color: var(--lcwd-text) !important; }

/* Floating cart button + popout (2026-09-03) - stacked directly above the LC Live Chat bubble
   (#lcwd-chat-root sits at right:20/bottom:20, 58px tall), same right offset, 92px up so there's a
   clean 14px gap between the two buttons at rest. */
#lcwd-float-cart-root { position: fixed; right: 20px; bottom: 92px; z-index: 99980; font-family: var(--font-body); }
#lcwd-float-cart-btn {
	width: 50px; height: 50px; padding: 0; border-radius: 50%; background: var(--lcwd-panel); color: var(--lcwd-text);
	border: 1px solid rgba(255,255,255,0.15); cursor: pointer; display: grid; place-items: center; position: relative;
	box-shadow: 0 6px 24px -6px rgba(0,0,0,0.5); transition: transform .15s ease, border-color .15s ease;
}
#lcwd-float-cart-btn:hover { transform: translateY(-2px); border-color: var(--lcwd-accent-line); }
.lcwd-float-cart-count {
	position: absolute; top: -4px; right: -4px; min-width: 19px; height: 19px; padding: 0 4px; border-radius: 999px;
	background: var(--lcwd-gold, #f5a623); color: #241804; font-size: 11px; font-weight: 800; line-height: 19px; text-align: center;
	border: 2px solid var(--lcwd-bg);
}
#lcwd-float-cart-panel {
	position: absolute; right: 0; bottom: 62px; width: 340px; max-width: calc(100vw - 40px);
	background: var(--lcwd-panel); border: 1px solid rgba(255,255,255,0.12); border-radius: 16px;
	box-shadow: 0 20px 60px -12px rgba(0,0,0,0.6); max-height: 70vh; overflow-y: auto;
}
#lcwd-float-cart-panel[hidden] { display: none !important; }
#lcwd-float-cart-header {
	display: flex; align-items: center; justify-content: space-between; padding: 14px 18px;
	background: rgba(255,255,255,0.03); border-bottom: 1px solid rgba(255,255,255,0.08);
	position: sticky; top: 0;
}
#lcwd-float-cart-header strong { color: var(--lcwd-text) !important; font-family: var(--font-heading); font-size: 15px; }
#lcwd-float-cart-close { background: none; border: none; color: var(--lcwd-muted); font-size: 22px; line-height: 1; cursor: pointer; padding: 0; }
#lcwd-float-cart-close:hover { color: var(--lcwd-text); }

/* WooCommerce's default mini-cart widget markup, reskinned dark. */
#lcwd-float-cart-panel .widget_shopping_cart_content { padding: 14px 18px; }
#lcwd-float-cart-panel .woocommerce-mini-cart { list-style: none; margin: 0 0 14px; padding: 0; }
#lcwd-float-cart-panel .woocommerce-mini-cart-item {
	display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid rgba(255,255,255,0.08);
	position: relative;
}
#lcwd-float-cart-panel .woocommerce-mini-cart-item img { width: 44px; height: 44px; object-fit: cover; border-radius: 8px; flex-shrink: 0; }
#lcwd-float-cart-panel .woocommerce-mini-cart-item a:not(.remove) { color: var(--lcwd-text) !important; font-size: 13.5px; font-weight: 600; text-decoration: none; }
#lcwd-float-cart-panel .woocommerce-mini-cart-item .quantity { display: block; color: var(--lcwd-muted) !important; font-size: 12.5px; }
#lcwd-float-cart-panel .woocommerce-mini-cart-item .remove {
	color: var(--lcwd-muted) !important; text-decoration: none; font-size: 18px; margin-left: auto; flex-shrink: 0;
}
#lcwd-float-cart-panel .woocommerce-mini-cart-item .remove:hover { color: #ff8080 !important; }
#lcwd-float-cart-panel .woocommerce-mini-cart__empty-message { color: var(--lcwd-muted) !important; font-size: 13.5px; text-align: center; padding: 20px 0; }
#lcwd-float-cart-panel .total { display: flex; justify-content: space-between; align-items: center; font-weight: 700; color: var(--lcwd-text) !important; margin-bottom: 14px; font-size: 14px; }
#lcwd-float-cart-panel .total .woocommerce-Price-amount { color: var(--lcwd-accent-blue) !important; }
#lcwd-float-cart-panel .woocommerce-mini-cart__buttons { display: flex; flex-direction: column; gap: 8px; }
#lcwd-float-cart-panel .woocommerce-mini-cart__buttons a {
	display: block; text-align: center; padding: 11px; border-radius: 8px; font-weight: 700; font-size: 13.5px; text-decoration: none;
}
#lcwd-float-cart-panel a.wc-forward:not(.checkout) { background: rgba(255,255,255,0.06); color: var(--lcwd-text) !important; border: 1px solid rgba(255,255,255,0.15); }
#lcwd-float-cart-panel a.checkout { background: var(--lcwd-accent) !important; color: var(--lcwd-accent-text) !important; }
@media (max-width: 480px) {
	#lcwd-float-cart-root { right: 12px; bottom: 84px; }
	#lcwd-float-cart-panel { width: calc(100vw - 24px); right: -6px; }
}

/* Mobile bottom icon nav (2026-09-03) - hidden entirely above the 921px breakpoint Astra's own
   mobile header already switches at, so it only ever shows alongside the hamburger, never both nav
   systems competing on desktop. */
#lcwd-bottom-nav { display: none; }
@media (max-width: 921px) {
	body { padding-bottom: calc(64px + env(safe-area-inset-bottom)); }
	#lcwd-bottom-nav {
		display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 99970;
		background: var(--lcwd-panel); border-top: 1px solid rgba(255,255,255,0.08);
		padding: 8px 4px calc(8px + env(safe-area-inset-bottom));
	}
	#lcwd-bottom-nav a {
		flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
		text-decoration: none; padding: 6px 2px; position: relative; min-width: 0;
	}
	#lcwd-bottom-nav svg { width: 20px; height: 20px; color: var(--lcwd-muted); flex-shrink: 0; }
	#lcwd-bottom-nav span { font-size: 9.5px; color: var(--lcwd-muted) !important; font-weight: 600; white-space: nowrap; }
	#lcwd-bottom-nav a.active svg { color: var(--lcwd-accent-blue); }
	#lcwd-bottom-nav a.active span { color: var(--lcwd-accent-blue) !important; }
	#lcwd-bottom-nav a.active::before {
		content: ''; position: absolute; top: -9px; left: 50%; transform: translateX(-50%);
		width: 26px; height: 3px; background: var(--lcwd-accent); border-radius: 0 0 3px 3px;
		box-shadow: 0 0 10px -1px var(--lcwd-accent-glow);
	}

	/* Floating chat + cart buttons shift up above the new bar instead of sitting in the corner it
	   now occupies - same right offset and relative stacking (cart above chat), just raised. */
	#lcwd-chat-root { bottom: calc(64px + env(safe-area-inset-bottom) + 16px); }
	#lcwd-float-cart-root { bottom: calc(64px + env(safe-area-inset-bottom) + 88px); }
}

/* 2026-09-06: checkout payment method detail boxes (bank transfer / cash-on-delivery instructions,
   and critically the Stripe Payment Element mount point) were rendering on a transparent background,
   inheriting this theme's near-white --lcwd-text. That's invisible on its own for the plain-text
   gateways, and worse for Stripe: its Payment Element reads the surrounding page's computed styles
   to auto-theme its own iframe ("smart" appearance) - sampling near-white text meant for a dark
   ground produced near-white text on Stripe's fixed white iframe background. Pinning this one box to
   a real light card fixes both: our own instructions become readable, and Stripe now samples a
   dark-on-light context, so its injected card fields render legibly too. */
.woocommerce-checkout .payment_box,
.woocommerce-checkout .wc_payment_methods .payment_box,
.woocommerce-checkout #payment,
.woocommerce-checkout .woocommerce-checkout-payment,
.woocommerce-checkout .wc_payment_methods {
	background: #f8f9fb !important;
	color: #1d2327 !important;
	border-radius: 8px;
}
.woocommerce-checkout .payment_box p,
.woocommerce-checkout .payment_box li,
.woocommerce-checkout .payment_box label,
.woocommerce-checkout .payment_box a,
.woocommerce-checkout #payment p,
.woocommerce-checkout #payment li,
.woocommerce-checkout #payment label {
	color: #1d2327 !important;
}
/* 2026-09-06 follow-up: fixing just .payment_box left Klarna's own secondary/description text
   (its BNPL terms copy) still near-invisible. Stripe's Payment Element picks its whole light-vs-dark
   theme PRESET (not just the one colorText/colorBackground pair we can override) by sampling an
   ancestor further out than .payment_box - most likely #payment, the wrapper around the entire
   payment-method list. That ancestor was still the sitewide dark background, so Stripe picked its
   dark preset; that preset's own built-in secondary-text colour is light, meant for a dark surface,
   and stayed light even inside our now-light .payment_box. Pinning the wider wrapper light too gives
   Stripe's sampling a consistent light context everywhere it might be reading from. */
