/**
 * Structure only. Every colour, size, spacing and typography value comes from the
 * Elementor panel, so this file deliberately holds no brand values.
 */

/* No underline anywhere in these widgets, including on hover. */
.pp-card, .pp-card:hover, .pp-card:focus,
.pp-feature, .pp-feature:hover, .pp-feature:focus,
.pp-card a, .pp-card a:hover, .pp-feature a, .pp-feature a:hover,
.pp-card *, .pp-feature * { text-decoration: none !important; }

/* ---------- tabs ---------- */
.pp-tabs { display: flex; flex-wrap: wrap; }
.pp-tab { background-color: transparent; border: 0; border-bottom: 2px solid transparent; cursor: pointer;
	font: inherit; transition: color .3s ease, border-color .3s ease; }

/* ---------- grid ---------- */
.pp-grid { display: flex; flex-wrap: wrap; gap: var(--pp-gap, 32px); align-items: stretch; }
.pp-card { width: calc((100% - (var(--pp-cols, 3) - 1) * var(--pp-gap, 32px)) / var(--pp-cols, 3));
	display: flex; flex-direction: column; position: relative; color: inherit;
	border: 1px solid transparent; transition: all .4s; }
.pp-card::after { content: ''; position: absolute; top: 0; left: 0; right: 0;
	transform: scaleX(0); transform-origin: left; transition: transform .5s; z-index: 3; }
.pp-card:hover::after { transform: scaleX(1); }
.pp-card-body { display: flex; flex-direction: column; gap: 16px; flex: 1 1 auto; }
.pp-card-title, .pp-feature-title { display: block; }
.pp-card-excerpt { display: block; flex: 1 1 auto; }
.pp-card-foot { display: flex; justify-content: space-between; align-items: center;
	border-top: 1px solid transparent; padding-top: 16px; margin-top: auto; }

/* ---------- image ---------- */
.pp-img { position: relative; display: block; overflow: hidden; background-size: cover;
	background-position: center; background-color: rgba(10,10,10,0.08); }
.pp-img:not(.pp-img-has)::after { content: 'IMAGE'; position: absolute; top: 50%; left: 50%;
	transform: translate(-50%,-50%); font-size: 13px; letter-spacing: 4px; opacity: .4; }
.pp-tag { position: absolute; top: 20px; left: 20px; z-index: 2; padding: 6px 12px; display: inline-block; }

/* ---------- shared text bits ---------- */
.pp-eyebrow-sm { display: inline-flex; align-items: center; gap: 12px; }
.pp-eyebrow-sm::before { content: ''; width: 20px; height: 1px; flex: 0 0 auto; background: currentColor; }
.pp-meta { display: inline-block; }
.pp-dot { margin: 0 6px; }
.pp-read { display: inline-flex; align-items: center; gap: 10px; transition: gap .3s ease, color .3s ease; }
.pp-read-arrow::after { content: '\2192'; }
.pp-card:hover .pp-read-arrow { gap: 14px; }
.pp-empty { display: none; text-align: center; padding: 48px 0; }

/* ---------- featured ---------- */
.pp-feature { display: flex; align-items: stretch; position: relative; color: inherit;
	border: 1px solid transparent; transition: all .4s; }
.pp-feature::after { content: ''; position: absolute; top: 0; left: 0; right: 0;
	transform: scaleX(0); transform-origin: left; transition: transform .5s; z-index: 3; }
.pp-feature:hover::after { transform: scaleX(1); }
.pp-feature-body { display: flex; flex-direction: column; align-items: flex-start; gap: 20px; }
.pp-feature-img { flex: 0 0 auto; }
.pp-btn { display: inline-block; transition: background-color .3s ease, color .3s ease; }

@keyframes ppFade { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }

@media (max-width: 1024px) {
	.pp-feature { flex-direction: column; }
	.pp-feature-img { width: 100% !important; }
	.pp-feature-body { width: 100% !important; }
}

/* ---------- related posts (horizontal track) ---------- */
.pp-rel-wrap { position: relative; }
.pp-rel-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 24px;
	margin-bottom: 32px; }
.pp-rel-head-text { display: flex; flex-direction: column; }
.pp-rel-eyebrow { display: inline-flex; align-items: center; gap: 14px; }
.pp-rel-eyebrow::before { content: ''; width: 32px; height: 1px; flex: 0 0 auto; background: currentColor; }
.pp-rel-arrows { display: flex; gap: 10px; flex: 0 0 auto; }
.pp-rel-arrow { box-sizing: border-box; aspect-ratio: 1 / 1; padding: 0; margin: 0;
	border: 1px solid transparent; border-radius: 50%; background-color: transparent;
	cursor: pointer; display: flex; flex: 0 0 auto; align-items: center; justify-content: center;
	font-size: 18px; line-height: 1; transition: all .3s ease; }
.pp-rel-track { display: flex; gap: var(--pp-gap, 28px); overflow-x: auto; scroll-behavior: smooth;
	scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.pp-rel-track::-webkit-scrollbar { display: none; }
.pp-rel-track .pp-card { flex: 0 0 var(--pp-rel-w, 300px); width: var(--pp-rel-w, 300px);
	scroll-snap-align: start; }

/* ---------- post content: auto-brand whatever an editor adds to a post ----------
   Elementor's own Global Kit styles a bare <p>/<h2> directly and can outrank a
   plain descendant selector depending on load order, so the base type here is
   !important — the same reasoning as the "no underline" rule above. */
.pp-post-content { max-width: 760px; margin: 0 auto; }
.pp-post-content, .pp-post-content p, .pp-post-content li {
	font-family: 'Barlow Condensed', sans-serif !important;
	font-size: 19px !important; font-weight: 400 !important; line-height: 1.75 !important;
	color: rgba(255,255,255,0.75) !important;
}
.pp-post-content h2, .pp-post-content h3, .pp-post-content h4 {
	font-family: 'Bebas Neue', sans-serif !important; font-weight: 900 !important;
	color: #FFFFFF !important; text-transform: none !important;
}
.pp-post-content h2 { font-size: 40px !important; margin: 48px 0 20px; }
.pp-post-content h2:first-child { margin-top: 0; }
.pp-post-content h3 { font-size: 28px !important; margin: 36px 0 14px; }
.pp-post-content p { margin-bottom: 22px; }
.pp-post-content ul, .pp-post-content ol { margin: 0 0 22px; padding-left: 0; list-style: none; }
.pp-post-content ul li, .pp-post-content ol li { margin-bottom: 12px; padding-left: 30px; position: relative; }
.pp-post-content ul li::before { content: '\2192'; position: absolute; left: 0;
	color: var( --e-global-color-secondary, #F25010 ); }
.pp-post-content ol { counter-reset: pplist; }
.pp-post-content ol li { counter-increment: pplist; }
.pp-post-content ol li::before { content: counter( pplist, decimal-leading-zero );
	position: absolute; left: 0; color: var( --e-global-color-secondary, #F25010 ); font-weight: 600; }
.pp-post-content a { color: var( --e-global-color-secondary, #F25010 ); text-decoration-color: rgba(242,80,16,0.4);
	text-underline-offset: 3px; }
.pp-post-content a:hover { text-decoration-color: var( --e-global-color-secondary, #F25010 ); }
.pp-post-content blockquote { margin: 48px 0; padding: 32px 28px; border-left: 3px solid
	var( --e-global-color-secondary, #F25010 ); background: rgba(242,80,16,0.04); }
.pp-post-content blockquote p { font-size: 1.5em; line-height: 1.2; font-weight: 700; margin-bottom: 0; }
.pp-post-content blockquote cite { display: block; margin-top: 16px; font-size: 0.6em; letter-spacing: 2px;
	text-transform: uppercase; font-style: normal; color: var( --e-global-color-secondary, #F25010 ); }
.pp-post-content figure { margin: 48px 0; }
.pp-post-content img { display: block; width: 100%; height: auto; }
.pp-post-content figcaption { padding: 14px 4px 0; font-style: italic; font-size: 0.8em; opacity: 0.6; text-align: center; }

/* ---------- max-width utilities ----------
   Container "CSS Classes" get dropped by Elementor; widget classes don't. So a
   centred column of widgets each carries one of these rather than relying on a
   wrapping container class. */
.pp-mw560  { max-width: 560px;  margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw680  { max-width: 680px;  margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw760  { max-width: 760px;  margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw900  { max-width: 900px;  margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw1000 { max-width: 1000px; margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw1100 { max-width: 1100px; margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw1200 { max-width: 1200px; margin-left: auto; margin-right: auto; width: 100%; }
.pp-mw1500 { max-width: 1500px; margin-left: auto; margin-right: auto; width: 100%; }

/* ---------- single post: hero image, meta row, CTA buttons ---------- */
.pp-hero-img img { display: block; width: 100%; height: auto; aspect-ratio: 21 / 9; object-fit: cover; }
@media (max-width: 768px) { .pp-hero-img img { aspect-ratio: 16 / 10; } }
.pp-hero-meta { flex-wrap: wrap; }
.pp-cta-btns { flex-wrap: wrap; }

/* Elementor's native Share Buttons widget colours each icon per network (Facebook
   blue, etc). The real styling — bordered stacked rows, brand colours, no per-network
   squares — is the "single post v2" block further down; this just sets the transition. */
.pp-share-row .elementor-share-btn { transition: all .3s ease; }

/* ==========================================================================
   SINGLE POST v2 — breadcrumb, reading progress, TOC, drop cap, pull quote,
   tags, author box, related grid. Every colour/size below matches the brand
   tokens (#0A0A0A / #F25010 / #F5F3EF / #141414, Bebas Neue / Barlow
   Condensed) already used across this plugin.
   ========================================================================== */

html { scroll-behavior: smooth; }

/* ---------- breadcrumb ---------- */
.pp-crumb-link { text-decoration: none !important; transition: color .3s ease; }
.pp-crumb-link:hover { color: #FFFFFF !important; }

/* ---------- reading progress bar ----------
   Fixed to the very top of the viewport. If the site's global header is a
   fixed/sticky bar, nudge #pp-progress-fill's top offset to sit just under it. */
#pp-progress-fill { position: fixed; top: 0; left: 0; height: 3px; width: 0%;
	background-color: #F25010; z-index: 9999; transition: width .1s linear; pointer-events: none; }

/* ---------- sticky sidebars: TOC (left) and share+tags (right) ----------
   Elementor's own "Sticky" advanced-tab effect doesn't stop at its parent's
   bottom edge — it kept floating over the Related Posts section below. Plain
   CSS position:sticky, on the inner wrapper only (not the column that stretches
   to match the post content's height), can only travel as far as its own
   parent block is tall — which is exactly "stop where the blog content stops". */
#pp-toc-sidebar, #pp-share-sidebar { position: sticky; top: 100px; align-self: flex-start; }

/* ---------- table of contents (left sidebar) ---------- */
#pp-toc-list { display: flex; flex-direction: column; gap: 12px; }
#pp-toc-list a { font-family: 'Barlow Condensed', sans-serif; font-weight: 400; font-size: 13px;
	color: rgba(255,255,255,0.5); text-decoration: none; line-height: 1.4; transition: all .3s ease;
	display: flex; gap: 10px; padding-left: 0; }

/* Indentation is by DEPTH (relative nesting, computed in pp-blog.js -- a
   skipped heading level still lands one rung below its nearest preceding
   parent), not by raw H-tag number. depth-0 is a top-level entry (numbered);
   each depth below it steps in another 16px. */
#pp-toc-list a.pp-toc-depth-0 { padding-left: 0; }
#pp-toc-list a.pp-toc-depth-1 { padding-left: 16px; font-size: 12.5px; }
#pp-toc-list a.pp-toc-depth-2 { padding-left: 32px; font-size: 12px; }
#pp-toc-list a.pp-toc-depth-3 { padding-left: 48px; font-size: 12px; }
#pp-toc-list a.pp-toc-depth-4 { padding-left: 64px; font-size: 12px; }

/* The hover/active nudge used to be padding-left: 8px, which reset whatever
   base indent a depth class had just set -- a depth-2 entry would jump back
   to depth-1's indentation on hover. transform layers on top of the existing
   padding instead of overwriting it, so depth is preserved either way. */
#pp-toc-list a:hover, #pp-toc-list a.pp-toc-active { color: #F25010; transform: translateX(8px); }
#pp-toc-list a .pp-toc-num { color: #F25010; font-family: 'Bebas Neue', sans-serif; font-size: 11px;
	letter-spacing: 1px; padding-top: 2px; flex: 0 0 auto; }
.pp-post-content h2[id], .pp-post-content h3[id], .pp-post-content h4[id],
.pp-post-content h5[id], .pp-post-content h6[id] { scroll-margin-top: 100px; }

/* ---------- post content: drop cap + inline emphasis + bigger pull quote ---------- */
.pp-post-content p:first-of-type::first-letter { font-family: 'Bebas Neue', sans-serif; font-size: 80px;
	float: left; line-height: 0.85; margin-right: 14px; margin-top: 6px; color: #F25010 !important; font-weight: 900; }
.pp-post-content strong { color: #FFFFFF !important; font-weight: 600 !important; }
.pp-post-content em { color: rgba(255,255,255,0.9) !important; font-style: italic !important; }
.pp-post-content blockquote p {
	font-family: 'Bebas Neue', sans-serif !important; font-size: 32px !important; line-height: 1.15 !important;
	font-weight: 900 !important; letter-spacing: -0.3px; color: #FFFFFF !important; text-transform: none !important;
}

/* ---------- share list: stacked rows, no border ---------- */
.pp-share-row .elementor-share-buttons { display: flex !important; flex-direction: column !important; gap: 8px !important; }
.pp-share-row .elementor-share-btn {
	background-color: transparent !important; border: none !important; border-radius: 0 !important;
	display: flex !important; justify-content: space-between !important; align-items: center !important;
	width: 100% !important; padding: 12px 14px !important;
	font-family: 'Barlow Condensed', sans-serif !important; font-weight: 500 !important; font-size: 12px !important;
	letter-spacing: 1px !important; text-transform: uppercase !important;
}
.pp-share-row .elementor-share-btn:hover { background-color: transparent !important; }
.pp-share-row .elementor-share-btn,
.pp-share-row .elementor-share-btn .elementor-share-btn__title { color: rgba(255,255,255,0.6) !important; }
.pp-share-row .elementor-share-btn:hover,
.pp-share-row .elementor-share-btn:hover .elementor-share-btn__title { color: #F25010 !important; }
.pp-share-row .elementor-share-btn .elementor-share-btn__icon {
	font-family: 'Bebas Neue', sans-serif !important; font-size: 11px !important; letter-spacing: 1px !important;
	background: none !important; color: inherit !important; width: auto !important; height: auto !important;
}
/* The black squares behind each icon aren't on .elementor-share-btn__icon itself, they're
   on a nested span/svg/pseudo-element the icon library draws its own box on. Strip
   background off everything inside the button, not just the one wrapper, and force the
   glyph (whether font-icon or inline svg) to render in the button's own text colour. */
.pp-share-row .elementor-share-btn *,
.pp-share-row .elementor-share-btn::before,
.pp-share-row .elementor-share-btn::after,
.pp-share-row .elementor-share-btn *::before,
.pp-share-row .elementor-share-btn *::after {
	background: none !important; background-color: transparent !important;
	box-shadow: none !important; border-radius: 0 !important;
}
.pp-share-row .elementor-share-btn svg { fill: currentColor !important; color: inherit !important; width: 14px !important; height: 14px !important; }
.pp-share-row .elementor-share-btn i { color: inherit !important; }

/* Copy Link is a real Button widget, not the Share Buttons widget (Elementor has no
   native "copy to clipboard" share network) — pp-blog.js wires the click. */
.pp-copy-link, .pp-copy-link .elementor-button {
	background-color: transparent !important; border: none !important; border-radius: 0 !important;
	display: flex !important; justify-content: space-between !important; align-items: center !important;
	width: 100% !important; padding: 12px 14px !important; box-shadow: none !important;
	font-family: 'Barlow Condensed', sans-serif !important; font-weight: 500 !important; font-size: 12px !important;
	letter-spacing: 1px !important; text-transform: uppercase !important; color: rgba(255,255,255,0.6) !important;
	transition: all .3s ease;
}
.pp-copy-link:hover, .pp-copy-link .elementor-button:hover { color: #F25010 !important; }

/* ---------- tags: a Text Editor widget bound to the pp-current-tags dynamic tag,
   which outputs one real <a> per tag (to that tag's own archive). Text Editor is a
   rich-text field by design, so the tag's own HTML output here is content, the same
   as typing a bold word or a link into the visual editor — not a code/HTML widget. */
.pp-tags-row { display: flex; flex-wrap: wrap; gap: 6px; }
.pp-tags-row .pp-tag-pill {
	font-family: 'Barlow Condensed', sans-serif; font-weight: 500; font-size: 10px;
	letter-spacing: 1.5px; text-transform: uppercase; color: rgba(255,255,255,0.5);
	text-decoration: none; padding: 6px 12px; border: 1px solid rgba(255,255,255,0.1);
	display: inline-block; transition: all .3s ease;
}
.pp-tags-row .pp-tag-pill:hover { border-color: #F25010; color: #F25010; }

/* ---------- related posts: static grid variant (as well as the horizontal track) ---------- */
.pp-rel-grid { display: grid; grid-template-columns: repeat(var(--pp-rel-cols, 3), 1fr); gap: var(--pp-gap, 32px); overflow: visible; }
.pp-rel-grid .pp-card { width: auto; flex: none; scroll-snap-align: none; }
@media (max-width: 900px) { .pp-rel-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .pp-rel-grid { grid-template-columns: 1fr; } }
.pp-rel-view-all { display: inline-flex; align-items: center; gap: 10px; text-decoration: none;
	font-family: 'Barlow Condensed', sans-serif; font-weight: 600; font-size: 12px; letter-spacing: 2px;
	text-transform: uppercase; color: #F25010; border-bottom: 1px solid #F25010; padding-bottom: 6px;
	transition: gap .3s ease; white-space: nowrap; }
.pp-rel-view-all:hover { gap: 14px; }
.pp-rel-view-all::after { content: '\2192'; }

/* ==========================================================================
   PARCELPOINT Go — download page section backgrounds.

   These are the design's own radial glows, verbatim. They live here rather than
   in each section's "Custom CSS" panel field because that field is an Elementor
   Pro feature that is switched off on this install, so anything put there is
   silently dropped. This file is enqueued on every page by the plugin, so it
   always applies.

   They're keyed off each section's CSS ID (Advanced tab → CSS ID), which is set
   on the imported template and survives import. To retune a glow, edit the value
   here; to remove one, clear that section's CSS ID.
   ========================================================================== */

/* Hero: warm glow top-right plus the faint 96px pixel grid. */
#go-header,
#go-hero {
	background-color: #0D0D0D;
	background-image:
		linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px),
		linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
	background-size: 96px 96px, 96px 96px;
	background-repeat: repeat, repeat;
}
#go-hero {
	background-image:
		radial-gradient(900px 520px at 78% 18%, rgba(242,80,16,.20), transparent 70%),
		linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px),
		linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
	background-size: auto, 96px 96px, 96px 96px;
	background-repeat: no-repeat, repeat, repeat;
}

/* "One carrier down never stops your send." — glow rising from bottom-left. */
#go-multi-carrier {
	background-color: #0D0D0D;
	background-image: radial-gradient(700px 400px at 15% 110%, rgba(242,80,16,.18), transparent 70%);
	background-repeat: no-repeat;
}

/* "Skip the queue. Send smarter." — glow falling from top-centre. */
#go-cta {
	background-color: #0D0D0D;
	background-image: radial-gradient(760px 420px at 50% 0%, rgba(242,80,16,.22), transparent 70%);
	background-repeat: no-repeat;
}

/* NOTE: an earlier version of this file had a blanket `#home-banner-bg {
   background-color:#FFFFFF}` rule here, left over from an abandoned
   homepage-merge approach. This stylesheet loads on every page of the site
   (see the unconditional wp_enqueue_style call in parcelpoint-blog.php), and
   that ID turned out to be reused by several unrelated pages -- the rule was
   silently forcing their hero backgrounds white too. Removed. Any page-
   specific background now lives on a page-specific, collision-resistant ID
   (pp-landing-hero, #go-hero, etc.), never on a generic name like this one. */

/* ---------- Landing page: problem-card hover swap ----------
   Each card holds a "problem" line and a "solution" line stacked in the same
   grid cell (not position:absolute -- Position is an Elementor Pro control this
   install may or may not have enabled, grid-stack doesn't need it) and
   crossfades between them on hover. Plain CSS in the plugin's own stylesheet,
   not Elementor's Custom CSS field. */
.pp-problem-card__stack { display: grid; }
.pp-problem-card__stack > * { grid-area: 1 / 1; transition: opacity .35s ease; }
.pp-problem-card__solution { opacity: 0; }
.pp-problem-card:hover .pp-problem-card__problem { opacity: 0; }
.pp-problem-card:hover .pp-problem-card__solution { opacity: 1; }
@media (hover: none) {
	/* No hover on touch: show the fix by default rather than hiding it behind a
	   gesture that doesn't exist. */
	.pp-problem-card__problem { opacity: 0; }
	.pp-problem-card__solution { opacity: 1; }
}

/* ---------- ParcelPoint Icon widget ---------- */
.pp-svg-icon { display: inline-block; line-height: 0; }
.pp-svg-icon svg { display: block; }

/* ---------- ParcelPoint Marquee widget ----------
   Two identical tracks sit side by side and both slide left by exactly their own
   width, so the moment the first one leaves the second is already in its place:
   the loop has no seam and no jump. Duration comes from the widget's own speed
   control through the --pp-mq-speed variable. */
.pp-marquee { display: flex; overflow: hidden; white-space: nowrap; width: 100%; }
.pp-marquee__track {
	display: inline-flex; align-items: center; flex: 0 0 auto;
	animation-name: ppMarqueeSlide; animation-timing-function: linear;
	animation-iteration-count: infinite; animation-duration: var(--pp-mq-speed, 40s);
}
.pp-marquee--ltr .pp-marquee__track { animation-direction: reverse; }
.pp-marquee--pause:hover .pp-marquee__track { animation-play-state: paused; }
.pp-marquee__word { font-family: 'Bebas Neue', sans-serif; letter-spacing: 2px; line-height: 1; }
.pp-marquee__sep { line-height: 1; font-size: 0.6em; }
@keyframes ppMarqueeSlide { from { transform: translateX(0); } to { transform: translateX(-100%); } }
@media (prefers-reduced-motion: reduce) {
	.pp-marquee__track { animation: none; }
	.pp-marquee { justify-content: center; }
	.pp-marquee__track + .pp-marquee__track { display: none; }
}
