/* ============================================================
   Purple Login — Visual Refinements (v5.7.0)
   ============================================================
   ADDITIVE ONLY. Loads after pl-bundle.min.css. Every rule here
   either uses the existing design tokens (so dark mode and the
   per-section customiser keep working) or is a progressive
   enhancement that older browsers simply ignore.
   ============================================================ */

/* ---- 1. Keyboard focus — visible, on-brand, only when needed ----
   Mouse clicks no longer leave a lingering outline; keyboard users
   get a clear violet ring. Huge accessibility + perceived-quality win. */
:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid var(--c-accent-violet, #76736c);
  outline-offset: 2px;
  border-radius: var(--radius-sm, 3px);
}
:where(a, button, [tabindex]):focus:not(:focus-visible) {
  outline: none;
}

/* ---- 2. Motion respect ----
   The theme ships animated banners, shimmer effects and dozens of
   transitions. Users with vestibular disorders (or "reduce motion"
   enabled on their phone) now get a calm UI automatically. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---- 3. Card hover elevation — consistent, token-driven ----
   Feed posts, job cards, connection cards and directory cards all
   lift the same way now, using the theme's own shadow scale. */
:where(.feed-post, .post-card, .conn-card, .job-card, .dir-card, .privacy-card):hover {
  box-shadow: var(--shadow-md, 0 4px 12px rgba(0,0,0,0.07), 0 1px 3px rgba(0,0,0,0.05));
  transition: box-shadow var(--transition-normal, 0.2s ease);
}

/* ---- 4. Button micro-interaction ----
   A 1px press-down on activation makes every button feel responsive.
   Purely additive; no colors or sizes touched. */
:where(button, .btn-primary, .btn-gray-small, input[type="submit"]):active {
  transform: translateY(1px);
}
:where(button, .btn-primary, .btn-gray-small, input[type="submit"]) {
  transition: transform var(--transition-fast, 0.15s ease),
              box-shadow var(--transition-fast, 0.15s ease);
}

/* ---- 5. Text rendering polish ---- */
body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

/* ---- 6. Media polish ----
   Lazy-loaded feed media fades in instead of popping; broken images
   are hidden instead of showing the browser's broken-image icon. */
img[loading="lazy"] {
  transition: opacity var(--transition-normal, 0.2s ease);
}

/* ---- 7. Skeleton loading utility ----
   Ready-to-use shimmer class for AJAX regions (feed load-more,
   mailbox, notifications). Apply .pl-skeleton to a placeholder div. */
.pl-skeleton {
  position: relative;
  overflow: hidden;
  background: #eef0f3; /* literal — must stay visible on the all-white palette */
  border-radius: var(--radius-sm, 3px);
  min-height: 14px;
}
.pl-skeleton::after {
  content: "";
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(90deg, transparent,
              rgba(255, 255, 255, 0.35), transparent);
  animation: pl-skeleton-shimmer 1.4s infinite;
}
@keyframes pl-skeleton-shimmer {
  100% { transform: translateX(100%); }
}

/* ---- 8. OPTIONAL: modern radius scale (disabled by default) ----
   The whole UI currently uses a uniform 3px radius. Uncomment this
   block for a softer, more contemporary look — every card, input and
   button updates automatically because they all read these tokens.
   Left off by default to preserve the current visual identity.

:root {
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 8px;
  --radius-xl: 10px;
  --radius-2xl: 12px;
  --radius-3xl: 14px;
}
*/


/* ---- 9. [v5.7.5] Transparent icon controls — platform-wide ----
   Per design direction: icon tabs, icon toggles and icon-only buttons
   carry NO background fill anywhere; icons render in the primary text
   color (black in light mode, light in dark mode). Labeled action
   buttons (Save, Apply, Read more, etc.) are intentionally NOT touched.
   Active tabs stay identifiable via the purple underline/icon. */
.nd-tab, .nd-tab.active, .nd-tab:hover,
.post-menu-btn, .post-menu-btn:hover,
.post-dropdown, .dropdown-item, .dropdown-item:hover,
.nd-panel-header button, .nd-panel-header button:hover {
  background: transparent !important;
  box-shadow: none !important;
}
.nd-tab, .post-menu-btn, .dropdown-item {
  color: var(--c-text-primary, #000) !important;
  -webkit-text-fill-color: var(--c-text-primary, #000) !important;
}
.nd-tab.active {
  color: var(--c-accent-purple, #55534e) !important;
  -webkit-text-fill-color: var(--c-accent-purple, #55534e) !important;
}
.nd-tab:hover, .post-menu-btn:hover, .dropdown-item:hover,
.nd-panel-header button:hover {
  opacity: .65;
}


/* ---- 10. [v5.7.7] White compact header & footer ----
   Per design direction: no gradient/background on the fixed header and
   footer — clean white bars with a hairline border, dark text, compact
   buttons. Selectors use html body prefix so these rules outrank the
   per-site Custom Overrides CSS (which also uses !important) through
   higher specificity, regardless of print order. Dark theme gets a
   matching dark bar. */
html body .site-header,
html body .site-footer {
  background: #ffffff !important;
  box-shadow: none !important;
  color: var(--c-text-primary, #1a1a1a) !important;
}
html body .site-header { border-bottom: 1px solid var(--c-border, #e5e7eb) !important; }
html body .site-footer { border-top: 1px solid var(--c-border, #e5e7eb) !important; }
html body .site-header a,
html body .site-header .logo-text,
html body .site-header .hamburger-btn,
html body .footer-text,
html body .footer-text a {
  color: var(--c-text-primary, #1a1a1a) !important;
  -webkit-text-fill-color: var(--c-text-primary, #1a1a1a) !important;
}

/* Compact, quiet header buttons (Dashboard / Jobs / Logout / theme toggle) */
html body .header-button {
  background: transparent !important;
  color: var(--c-text-primary, #1a1a1a) !important;
  -webkit-text-fill-color: var(--c-text-primary, #1a1a1a) !important;
  border: 1px solid var(--c-border-dark, #d1d5db) !important;
  box-shadow: none !important;
  text-shadow: none !important;
  padding: 2px 9px !important;
  font-size: 12px !important;
  line-height: 1.5 !important;
  opacity: 1 !important;
}
html body .header-button:hover {
  background: transparent !important;
  border-color: var(--c-text-primary, #1a1a1a) !important;
  transform: none !important;
}

/* Compact tabs platform-wide: same look, ~25% tighter */
html body .conn-tab, html body .jobs-tab, html body .reg-tab,
html body .pj-tab, html body .eng-tab, html body .cpv-tab {
  padding: 6px 13px !important;
  font-size: 12px !important;
}
html body .up-tog-label { padding: 3px 10px !important; font-size: 12px !important; }
html body .nd-tab { padding: 3px 2px !important; }




/* ============================================================
   ---- 11. [v5.7.8] SIGNATURE LOOK — "Live Wire" ----
   ============================================================
   Design thesis: Purple Login's identity is electric — deep purple,
   the technical Share Tech face, warm cream canvas, living scene
   banners. This section amplifies that instead of borrowing the
   blue/grey professional-network template.

   ONE bold element: a slowly drifting purple→magenta energy line
   under the header (static twin above the footer). Everything else
   is quiet support: purple-tinted card elevation, gradient logo,
   soft avatar rings, tinted scrollbars. Reduced-motion users get a
   static line automatically (section 2 kills the animation).     */

/* Signature: the energy line */
html body .site-header { border-bottom: none !important; position: fixed; }
html body .site-header::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -2px;
  height: 2px;
  /* [v5.16.95] #c2185b (hue 336deg, a crimson pink) replaced with #9b988f
     (hue 272deg). The strip now runs entirely within the purple family
     rather than crossing into pink at its midpoint. */
  background: linear-gradient(90deg,
    #5f5d58, #76736c 30%, #9b988f 50%, #76736c 70%, #5f5d58);
  background-size: 200% 100%;
  animation: pl-livewire 9s linear infinite;
}
html body .site-footer { border-top: none !important; position: fixed; }
html body .site-footer::before {
  content: "";
  position: absolute;
  left: 0; right: 0; top: -2px;
  height: 2px;
  background: linear-gradient(90deg, #5f5d58, #76736c 45%, #9b988f);  /* [v5.16.95] was #c2185b */
  opacity: .55;
}
@keyframes pl-livewire {
  from { background-position: 0% 0; }
  to   { background-position: 200% 0; }
}

/* Gradient wordmark (overrides section 10's flat dark fill) */
html body .site-header .site-logo .logo-text {
  background: linear-gradient(120deg, #5f5d58, #76736c 55%, #9b988f) !important;  /* [v5.16.95] wordmark: was #c2185b */
  -webkit-background-clip: text !important;
  background-clip: text !important;
  color: transparent !important;
  -webkit-text-fill-color: transparent !important;
  letter-spacing: .4px;
}

/* [v5.8.1] Rectangular geometry — crisp 2–4px corners across the UI */
:root {
  --radius-sm: 2px;
  --radius-md: 3px;
  --radius-lg: 4px;
  --radius-xl: 4px;
  --radius-2xl: 4px;
  --radius-3xl: 4px;
  --post-card-radius: 4px;
  --scrollbar-thumb: rgba(118,115,108, 0.35);
  --scrollbar-track: rgba(118,115,108, 0.08);
}

/* Cards: purple-tinted elevation, gentle lift (replaces section 3's grey hover) */
:where(.feed-post, .post-card, .conn-card, .job-card, .dir-card, .privacy-card,
       .cpv-news-card, .padmin-stat-card) {
  border-radius: 4px;
  box-shadow: 0 1px 3px rgba(95,93,88, 0.07), 0 1px 2px rgba(0, 0, 0, 0.03);
  transition: box-shadow var(--transition-normal, 0.2s ease),
              transform var(--transition-normal, 0.2s ease);
}
:where(.feed-post, .post-card, .conn-card, .job-card, .dir-card, .privacy-card,
       .cpv-news-card, .padmin-stat-card):hover {
  box-shadow: 0 8px 20px rgba(95,93,88, 0.12), 0 2px 6px rgba(0, 0, 0, 0.04);
  transform: translateY(-2px);
}

/* Primary actions: soft glow on hover — energy, not noise */
:where(.btn-primary, .form-save, .post-btn, .submit-post-btn,
       button[name^="save_"]):hover {
  box-shadow: 0 4px 14px rgba(118,115,108, 0.35) !important;
}

/* Avatars: faint violet ring — people are the product */
:where(.post-avatar, .comment-avatar, .sidebar-avatar, .comment-form-avatar) {
  box-shadow: 0 0 0 2px rgba(118,115,108, 0.16);
}

/* Scrollbars pick up the tint everywhere webkit vars aren't used */
/* [v5.9.4] Invisible scrollbars — scrolling still works everywhere.
   overflow stays auto on every scroll container, so wheel, trackpad,
   touch and keyboard scrolling are untouched; only the visible
   scroller chrome is removed. */
* { scrollbar-width: none !important; -ms-overflow-style: none !important; }
*::-webkit-scrollbar { width: 0 !important; height: 0 !important; display: none !important; }
*::-webkit-scrollbar-thumb, *::-webkit-scrollbar-track { display: none !important; background: transparent !important; }

/* Dark theme: rings/shadows brighten slightly so they read on dark */
html body[data-theme="dark"] :where(.post-avatar, .comment-avatar,
    .sidebar-avatar, .comment-form-avatar) {
  box-shadow: 0 0 0 2px rgba(155,152,143, 0.28);
}


/* ============================================================
   ---- 12. [v5.7.9] TYPE SYSTEM + SPATIAL RHYTHM ----
   ============================================================
   Typography becomes a deliberate pairing instead of one face for
   everything: the user's chosen Global Font (via --font-main, e.g.
   Nunito Sans) stays as the READING face; Share Tech — always loaded
   by the font-loader — returns as the technical DISPLAY accent for
   headings, sidebar section labels and statistics. Secondary text
   gains real hierarchy (previously every grey token was near-black),
   and the spacing tokens tighten for a denser, calmer rhythm.      */

:root {
  /* [v5.18.12] the LOCAL font binaries were removed from the theme per
     direction (assets/fonts now ships no woff2). 'Share Tech' stays in
     this stack because header.php loads it from Google Fonts — the clock
     face is unchanged; the theme itself simply bundles no font files. */
  --font-display: var(--font-main, sans-serif);

  /* Text hierarchy: primary stays black; supporting text steps back */
  --c-text-muted:  #5b6472;
  --c-text-light:  #78808f;
  --c-text-faded:  #8b93a2;
  --c-text-dim:    #4b5563;

  /* Tighter spatial rhythm (density classes still layer on top) */
  --post-card-padding: 14px;
  --post-card-margin-bottom: 10px;
  --col2-padding-top: 16px;
  --col2-padding-bottom: 16px;
  --col2-padding-left: 12px;
  --col2-padding-right: 12px;
  --form-input-padding: 7px 11px;
}

/* Display face on identity moments — technical accent, used with restraint */
html body .profile-form h2,
html body .sw-head,
html body .nd-panel-header span,
html body .nav-section > .nav-item > a {
  font-family: var(--font-display) !important;
  letter-spacing: .05em;
}
html body .nav-section > .nav-item > a {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: .09em;
  color: var(--c-text-dim, #4b5563);
}

/* Headings: tighter leading, slight negative tracking on large sizes */
h1, h2, h3 { line-height: 1.25; }
h1 { letter-spacing: -0.015em; }
h2 { letter-spacing: -0.01em; }

/* Numbers line up: tabular figures wherever counts and stats render */
.sw-val, .sw-row, .nd-badge, .eng-badge, .cpv-tab-badge,
.pv-stat, .padmin-stat-card, .stat-value {
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum' 1;
}
.sw-val { font-family: var(--font-display); font-size: 13px; }

/* Reading comfort: relaxed body copy where people actually read */
.post-content, .comment-text, .cpv-news-content, .job-desc, .cv-entry {
  line-height: 1.6;
  letter-spacing: .002em;
}

/* Supporting text steps back visually */
.post-time, .comment-time, .cpv-news-date, .sidebar-email, .sw-lbl {
  color: var(--c-text-faded, #8b93a2) !important;
  font-size: 12px;
}

/* Forms breathe evenly */
.profile-form label { letter-spacing: .01em; }
input::placeholder, textarea::placeholder { color: #a3aab8; opacity: 1; }

/* Dark theme: hierarchy tokens already correct in themes.css (its
   body[data-theme] selector outranks this :root block), so only the
   faded meta-text needs a dark-safe value */
html body[data-theme="dark"] .post-time,
html body[data-theme="dark"] .comment-time,
html body[data-theme="dark"] .sidebar-email,
html body[data-theme="dark"] .sw-lbl {
  color: #8b93a2 !important;
}


/* ---- 13. [v5.9.0] Plain background ----
   The warm cream canvas is replaced with a plain white background.
   Cards keep their borders and violet elevation for separation. Dark
   theme is untouched (its body[data-theme] token block outranks
   :root). Admin can still tune page/columns colors from the now
   admin-only Site Settings. */
:root {
  /* canvas */
  --c-bg-body: #ffffff;
  --c-bg-page: #ffffff;
  --c-bg-cream: #ffffff;
  /* [v5.9.6] every container surface defaults to white — separation
     comes from hairline borders and the violet elevation, not tints.
     Dark mode and the alternate themes (midnight/arctic/rigid/ember)
     override all of these with their own body[data-theme] token
     blocks, so this applies to the default light theme only. */
  --c-bg-panel: #ffffff;
  --c-bg-white: #ffffff;
  --c-bg-light: #ffffff;
  --c-bg-muted: #ffffff;
  --c-bg-off-white: #ffffff;
  --c-bg-subtle: #ffffff;
  --c-bg-dim: #ffffff;
  --c-bg-input-alt: #ffffff;
  --c-bg-lavender: #ffffff;
  --c-bg-purple-tint: #ffffff;
  --post-card-bg: #ffffff;
  --post-media-bg: #ffffff;
  --cv-bg: #ffffff;
}


/* ============================================================
   ---- 14. [v5.9.1] FLOATING PANELS on a pure white canvas ----
   ============================================================
   The four columns become distinct panels that float on the white
   page: air around and between them, hairline borders, crisp 4px
   corners, and the violet elevation from the Live Wire pass. Each
   column keeps its own internal scrollbar, so panels stay fixed
   while content scrolls inside them.

   Admin control preserved: these are token/default-level styles —
   the admin's Site Settings column-color overrides (emitted with
   higher-specificity !important rules) still repaint any panel.  */

:root {
  --column-gap: 6px;          /* ~1.6mm air BETWEEN the panels     */
  --col1-bg: #ffffff;
  --col2-bg: #ffffff;
  --col3-bg: #ffffff;
  --col4-bg: #ffffff;
}

/* Air AROUND the grid so panels float free of banner and footer */
html body .dashboard-grid {
  padding: 6px; /* ~1.6mm frame around the grid */
}

/* The panels themselves */
html body .left-sidebar,
html body .center-content,
html body .users-panel,
html body .right-sidebar {
  border: 1px solid var(--c-border, #e5e7eb);
  /* [v5.17.42] The left/right/users columns are governed by the Corners →
     "Side panels" group, which publishes --pl-r-panels and emits an
     !important rule on these same selectors. Read that variable here (not
     --pl-r-cards, which was wrong in v5.17.41 and never matched the control
     that targets these columns) so the base rule agrees with the control.
     .center-content is intentionally NOT bent by the panels group, so it
     keeps the 4px fallback. */
  border-radius: var(--pl-r-panels, 4px);
  box-shadow: 0 1px 3px rgba(95,93,88, 0.06),
              0 6px 18px rgba(95,93,88, 0.05);
}

/* Top banner floats to match: inset with rounded corners */
html body .info-banner {
  margin: 6px 6px 0;
  border-radius: 4px;
  overflow: hidden;
}

/* Mobile (single column): keep a slim gutter so panels still float */
@media (max-width: 992px) and (pointer:coarse) {
  html body .dashboard-grid { padding: 5px; }
  html body .info-banner { margin: 5px 5px 0; }
}


/* ============================================================
   ---- 15. [v5.9.9] WHITE IS LAW (default theme) ----
   ============================================================
   All backgrounds are forced pure white on the default light theme —
   including over any previously-saved Site Settings color swatches.
   The TOP BANNER is the single exception: it keeps its gradient or
   animated scene as the only decorated element on the page.
   The :not([data-theme]) guard means dark mode and the alternate
   themes (midnight / arctic / rigid / ember) are untouched.      */
/* [v5.11.1] The canvas BEHIND the panels is the one admin-tunable
   color (Site Settings -> Background -> Canvas, saved as --c-bg-body).
   The panels themselves stay locked white. */
html body:not([data-theme]) .dashboard-wrapper,
html body:not([data-theme]) .dashboard-center {
  background: var(--c-bg-body, #ffffff) !important;
}
html body:not([data-theme]) .left-sidebar,
html body:not([data-theme]) .center-content,
html body:not([data-theme]) .users-panel,
html body:not([data-theme]) .right-sidebar,
html body:not([data-theme]) .feed-post,
html body:not([data-theme]) .post-card {
  background: #ffffff !important;
}
/* the one exception — the top banner keeps its color/scene */
html body:not([data-theme]) .info-banner {
  background: var(--top-banner-bg) !important;
}


/* ============================================================
   ---- 16. [v5.10.1] COMPACT FEED COMPOSER ----
   ============================================================
   The Post/Poll switcher is enforced as slim underline tabs (an old
   grey button override was re-painting them as filled blocks), and
   the whole composer tightens: smaller heading, slimmer tabs, shorter
   textarea, reduced vertical rhythm. */

/* Section heading: smaller, tighter */
html body .dir-header { margin-bottom: 6px !important; }
html body .dir-header h2 {
  font-size: 15px !important;
  margin: 0 0 4px !important;
  letter-spacing: .02em;
}

/* [v5.11.196] Profile-tab section headings as a full-width light-purple pill band.
   Scoped to .profile-form so other .dir-header uses (Network, Discover, etc.) are
   untouched. Summary/CV has no .profile-form wrapper, so it keeps its plain heading.
   [v5.11.197] Raised specificity with .center-content so it beats the later
   ".center-content .dir-header h2{background:transparent}" rule, and the underline
   is removed. */
html body .center-content .profile-form .dir-header,
html body .center-content .dir-header.pl-cv-head,
/* [v5.16.99] .pl-page-head added here too. v5.16.97/98 put the marker on the
   PILL rule but not on this one, so those 24 headers rendered the pill AND
   kept .dir-header's default 3px underline underneath it — two treatments at
   once. Wherever the pill shows, the container's underline comes off. */
/* [v5.16.128] Extended to the profile and registration tabs.
   Thirteen templates write plain class="dir-header" with no .pl-page-head
   marker — the eleven profile tabs plus the two registration tabs. Their H2
   was already styled by the pill rule below (it lists
   .profile-form .dir-header h2), but their CONTAINER was not, so it kept the
   base .dir-header from style.css: display:flex, align-items:center,
   padding-bottom:10px and a 3px purple border-bottom.

   Two consequences, both visible. The h2 was a FLEX ITEM on those pages and a
   block everywhere else — the same split that made Account Management render
   a different corner curve in v5.16.121 — and the pill sat on top of a purple
   underline that .pl-page-head pages had removed.

   Matching on .profile-form .dir-header rather than adding the class to
   thirteen files keeps it to one rule, and covers any future tab that follows
   the same pattern without needing to remember the marker. */
html body .center-content .dir-header.pl-page-head,
html body .center-content .profile-form .dir-header,
html body .center-content .dir-header.pl-cv-head {
  /* [v5.16.205] margin-bottom raised 2px -> 8px and background forced
     transparent: at Pill radius the title's rounded ends exposed the
     square white top of the first card sitting 2px beneath — the
     peeking sliver in the screenshot. Clearance + no wrapper paint. */
  margin-bottom: 8px !important;
  background: transparent !important;
  box-shadow: none !important;
  border: none !important;
  border-bottom: none !important; padding-bottom: 0 !important; display: block !important; }
html body .center-content .profile-form .dir-header h2,
html body .center-content .dir-header.pl-cv-head h2,
/* [v5.16.97] Tabs with no .profile-form wrapper — Group Messages, Admin
   Panel and Testing — were getting the plain fallback (a 3px underline)
   instead of the purple pill, because this rule required BOTH
   .center-content and .profile-form as ancestors. Marked with
   .pl-page-head, the same way .pl-cv-head already works. */
html body .center-content .dir-header.pl-page-head h2 {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 8px !important;
  width: 100% !important;
  box-sizing: border-box !important;
  background: #5f5d58 !important;
  color: #ffffff !important;
  padding: 5px 18px !important;
  line-height: 1.2 !important;
  /* [v5.16.119] Height is pinned, and the radius is stated outright.
     border-radius:999px does not mean "pill" — the browser CLAMPS it to
     half the element's height, so the curve was a function of however
     tall the h2 happened to render. A title that wrapped, or an icon a
     pixel taller, gave a different corner on that page and nothing else
     changed. 5px padding + 15px text at 1.2 = 28px, so 14px IS the pill
     radius; writing it as 14px removes the dependency entirely, and
     min/max-height stops the box drifting in the first place.
     white-space:nowrap keeps a long title on one line rather than
     growing the bar. */
  min-height: 28px !important;
  max-height: 28px !important;
  /* [v5.16.129] Elliptical end, not a semicircle. 14px is a plain pill —
     the horizontal and vertical radii equal, so the end is a half-circle.
     Writing it as 21px / 14px makes the horizontal radius half again as
     long, which draws the elongated "metro carriage" end. Measured against
     the Personal Information header, which was already rendering this and
     is the one being matched: fitting its corner profile gave r=21 with an
     error of 1.0, against 29.9 for a 14px circle.
     The slash syntax is horizontal / vertical. 14 stays the vertical half
     because the bar is pinned to 28px tall and a vertical radius above half
     the height would just be clamped back down. */
  border-radius: 21px / 14px !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  border: none !important;
  border-bottom: none !important;
  box-shadow: none !important;
  font-size: 15px !important;
  font-weight:500 !important;
  margin: 0 !important;
}
html body .center-content .dir-header.pl-page-head h2 svg,
html body .center-content .profile-form .dir-header h2 svg,
html body .center-content .profile-form .dir-header h2 i,
html body .center-content .dir-header.pl-cv-head h2 svg,
html body .center-content .dir-header.pl-cv-head h2 i {
  color: #ffffff !important;
  /* [v5.16.119] The header line is now nowrap, so a flex child with no
     flex-shrink:0 can be squeezed narrower than its own box on a long
     title — the icon would go oval. Pin it. */
  flex: 0 0 auto !important;
}

/* Post / Poll: slim underline tabs — never filled buttons */
html body .composer-tab {
  background: transparent !important;
  border: none !important;
  border-bottom: 2px solid transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 4px 13px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  color: #4b5563 !important;
  -webkit-text-fill-color: #4b5563 !important;
  line-height: 1.5 !important;
  margin-bottom: -2px !important;
}
html body .composer-tab.active {
  background: transparent !important;
  border-bottom: 2px solid var(--c-primary, #5f5d58) !important;
  color: var(--c-primary, #5f5d58) !important;
  -webkit-text-fill-color: var(--c-primary, #5f5d58) !important;
}
html body .composer-tab:hover:not(.active) {
  color: #374151 !important;
  -webkit-text-fill-color: #374151 !important;
  background: transparent !important;
}

/* Composer body: shorter, tighter */
html body .post-textarea {
  min-height: 48px !important;
  padding: 8px 10px !important;
  margin-bottom: 6px !important;
  font-size: 13px !important;
}


/* ---- 16b. [v5.10.2] Composer trigger hover affordance ---- */
html body #pl-composer-trigger:hover {
  border-color: var(--c-accent-violet, #76736c) !important;
  box-shadow: 0 1px 6px rgba(118,115,108, 0.10);
}
html body #pl-composer-trigger button:hover { opacity: .7; }


/* ---- 16c. [v5.10.3] Media attach preview: image tiles must render ----
   The theme sized .preview-item video but never .preview-item img (an
   original oversight, present since v5.6.6) — attached images produced
   an empty tile with only the remove button. Enforced here as well as
   fixed at the source in style.css. */
html body .preview-item img,
html body .preview-item video {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  display: block !important;
  opacity: 1 !important;
}


/* ============================================================
   ---- 17. [v5.10.4] HALF-SIZE POST HEADER + ENGAGEMENT BAR ----
   ============================================================
   Per direction: the author block at the top of each post and the
   like/dislike/send/comment/save bar at the bottom both shrink to
   roughly half their previous footprint. The engagement bar also
   loses its lavender gradient — white with a hairline top border,
   consistent with white-is-law. */

/* Author header: half-size avatar, tighter type, less air */
:root { --post-avatar-size: 24px; }   /* was 44px */
html body .post-avatar {
  width: 24px !important;
  height: 24px !important;
}
html body .post-header { margin-bottom: 2px !important; gap: 6px !important; }
html body .post-author-name { font-size: 12px !important; line-height: 1.3 !important; }
html body .post-author-name a { font-size: 12px !important; }
html body .post-time { font-size: 12px !important; }

/* Engagement bar: half height, white, slim icons and chips */
html body .engagement-bar {
  padding: 3px 8px !important;          /* was 7px 10px */
  margin-top: 5px !important;
  gap: 1px !important;
  background: #ffffff !important;       /* was lavender gradient */
  border-top: 1px solid var(--c-border, #e5e7eb) !important;
}
html body .engagement-btn {
  padding: 1px 3px !important;
  font-size: 12px !important;
  line-height: 1.3 !important;
}
html body .engagement-btn svg {
  width: 11px !important;
  height: 11px !important;
}
/* count chips: half-size, quiet until non-zero styling applies */
html body .eng-badge-count {
  min-width: 11px !important;
  height: 11px !important;
  line-height: 11px !important;
  font-size: 10px !important;
  border-radius: 3px !important;
}


/* ---- 17b. [v5.10.5] Like/Dislike +15% ----
   The two primary reaction buttons step up ~15% from the half-size
   baseline so they read as the main actions in the bar; send/comment/
   save stay at the compact size. */
html body .engagement-btn.like-btn,
html body .engagement-btn.dislike-btn {
  padding: 2px 4px !important;
  font-size: 12px !important;
}
html body .engagement-btn.like-btn svg,
html body .engagement-btn.dislike-btn svg {
  width: 13px !important;    /* 11px x 1.15 ~= 12.7 -> 13px */
  height: 13px !important;
}
html body .engagement-btn.like-btn .eng-badge-count,
html body .engagement-btn.dislike-btn .eng-badge-count {
  min-width: 13px !important;
  height: 13px !important;
  line-height: 13px !important;
  font-size: 10px !important;
}


/* ---- 17c. [v5.10.6] Compact comments block ----
   The empty-comments state stacked default <p> margins on top of
   section/toolbar/list/form paddings, producing a tall dead zone
   between the engagement bar and the comment input. Everything
   tightens; Read Mode is enforced as a quiet outline chip. */
html body .comments-section {
  padding: 4px 14px 6px !important;
  margin-top: 0 !important;
}
html body .comments-toolbar { margin-bottom: 2px !important; }
html body .comments-list { margin-bottom: 2px !important; }
html body .no-comments,
html body p.no-comments,
html body .comments-loading {
  margin: 0 !important;            /* kills the default <p> margins */
  padding: 4px 0 !important;
  font-size: 12px !important;
}
html body .comment-form { padding-top: 4px !important; }

/* Read Mode: quiet outline chip, never a grey filled button */
html body .read-mode-btn {
  background: transparent !important;
  border: 1px solid var(--c-border, #d1d5db) !important;
  color: var(--c-text-dim, #4b5563) !important;
  -webkit-text-fill-color: var(--c-text-dim, #4b5563) !important;
  padding: 1px 7px !important;
  font-size: 12px !important;
  box-shadow: none !important;
}
html body .read-mode-btn:hover { border-color: var(--c-primary, #5f5d58) !important; color: var(--c-primary, #5f5d58) !important; -webkit-text-fill-color: var(--c-primary, #5f5d58) !important; }


/* ---- 17d. [v5.10.7] Empty comments: no message, no dead rows ----
   With zero comments the section starts directly at the comment
   input: the empty list collapses entirely and the Read Mode chip
   (which only makes sense with comments to read) stays hidden until
   there is at least one comment. */
html body .comments-list:empty { display: none !important; margin: 0 !important; }
html body .comments-section:has(.comments-list:empty) .comments-toolbar { display: none !important; }
html body .comment-form { border-top: none !important; }


/* ---- 17e. [v5.10.9] Comment "+" menu: like / dislike / reply ONLY ----
   The expanded menu previously also showed edit (pencil) and delete
   (trash) on the viewer's own comments — easily mistaken for forward/
   save at 13px. Per direction the + now reveals exactly the three
   engagement actions, matching the post bar. (Edit/delete for own
   comments are hidden with the menu; restore by deleting this block.) */
/* [v5.11.0] edit/delete restored for the comment's own author —
   the loader only renders them on the viewer's own comments
   (delete additionally for the post author and admins). */
html body .comment-actions-inner .comment-edit-btn,
html body .comment-actions-inner .comment-delete-btn {
  display: inline-flex !important;
}
/* the three that remain: match the post-bar visual language */
html body .comment-action-btn {
  background: transparent !important;
  border: none !important;
  padding: 1px 4px !important;
}
html body .comment-action-btn svg {
  width: 12px !important;
  height: 12px !important;
}
html body .comment-eng-count { font-size: 10px !important; }


/* ---- 17f. [v5.10.10] Comment actions match the post bar exactly ----
   Like / dislike / reply in the comment "+" menu now render in the
   same visual language as the post engagement bar: purple count chip
   first, then the icon — same chip geometry, same colors. */
html body .comment-action-btn {
  display: inline-flex !important;
  flex-direction: row-reverse !important;  /* count chip renders before the icon, like the post bar */
  align-items: center !important;
  gap: 2px !important;
}
html body .comment-eng-count {
  display: inline-block !important;
  min-width: 13px !important;
  height: 13px !important;
  line-height: 13px !important;
  padding: 0 2px !important;
  font-size: 10px !important;
  font-weight:500 !important;
  text-align: center !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  background: var(--c-primary, #5f5d58) !important;
  border-radius: 3px !important;
}
html body .comment-action-btn svg {
  width: 13px !important;
  height: 13px !important;
}


/* ---- 17g. [v5.10.12] Comment actions: inline beside the text + always visible ----
   1) The actions bar now sits ON THE SAME LINE as the comment text
      (text becomes inline; the bar becomes inline-flex right after it).
   2) The icons were rendering white-on-white until hover on some
      setups (inherited currentColor). The stroke is now forced
      directly on the SVGs, which overrides any inherited color —
      dark by default, brand purple when the reaction is active. */
html body .comment-text {
  display: inline !important;
}
html body .comment-actions-bar {
  display: inline-flex !important;
  vertical-align: middle !important;
  margin: 0 0 0 6px !important;
  padding: 0 !important;
}

/* toggle (+ / -): quiet outline chip, never grey filled */
html body .comment-actions-toggle {
  background: transparent !important;
  border: 1px solid var(--c-border, #d1d5db) !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  width: 16px !important;
  height: 16px !important;
  font-size: 12px !important;
  box-shadow: none !important;
}

/* buttons + icons: always visible, dark strokes, purple when active */
html body .comment-action-btn,
html body .comment-actions-inner {
  opacity: 1 !important;
  visibility: visible !important;
}
html body .comment-action-btn {
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
}
html body .comment-action-btn svg {
  stroke: #1a1a1a !important;   /* overrides inherited currentColor entirely */
  opacity: 1 !important;
}
html body .comment-action-btn.active svg,
html body .comment-action-btn:hover svg {
  stroke: var(--c-primary, #5f5d58) !important;
}


/* ============================================================
   ---- 18. [v5.10.13] FINAL DE-GREY SWEEP ----
   ============================================================
   The last grey-filled utility buttons align with the platform
   language: primary submits go brand purple; secondary utilities
   become quiet outline chips. */

/* Comment "Send": a submit CTA — brand purple like Post */
html body .comment-submit-btn {
  background: var(--c-primary, #5f5d58) !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border: none !important;
  padding: 5px 12px !important;
  font-size: 12px !important;
}
html body .comment-submit-btn:hover { background: var(--c-primary-dark, #3f3d39) !important; }

/* Attach / Schedule: quiet outline chips */
html body .add-media-btn {
  background: transparent !important;
  border: 1px solid var(--c-border, #d1d5db) !important;
  color: var(--c-text-dim, #4b5563) !important;
  -webkit-text-fill-color: var(--c-text-dim, #4b5563) !important;
  padding: 3px 9px !important;
  font-size: 12px !important;
  box-shadow: none !important;
}
html body .add-media-btn:hover {
  border-color: var(--c-primary, #5f5d58) !important;
  color: var(--c-primary, #5f5d58) !important;
  -webkit-text-fill-color: var(--c-primary, #5f5d58) !important;
}
html body .add-media-btn svg { stroke: currentColor !important; }

/* Site Settings: Save Settings purple; preset slots outline */
html body .cz-btn {
  background: var(--c-primary, #5f5d58) !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border: none !important;
}
html body .cz-btn:hover { background: var(--c-primary-dark, #3f3d39) !important; }
html body .cz-preset-btn {
  background: transparent !important;
  border: 1px solid var(--c-border, #d1d5db) !important;
  color: var(--c-text-dim, #4b5563) !important;
  -webkit-text-fill-color: var(--c-text-dim, #4b5563) !important;
  box-shadow: none !important;
}
html body .cz-preset-btn:hover { border-color: var(--c-primary, #5f5d58) !important; color: var(--c-primary, #5f5d58) !important; -webkit-text-fill-color: var(--c-primary, #5f5d58) !important; }


/* ---- 19. [v5.11.0] Threaded comments ----
   Replies indent under their parent with a soft guide line; the
   indent caps at depth 5 (the reply handler promotes level-6 replies
   to new top-level comments). New comments stack vertically. */
/* [v5.11.3] Per-level indent tuned to ~5mm (19px). The children block
   sits inside the content column, which is already offset by the
   avatar (24px) + 6px flex gap — the negative margin counteracts that
   structural offset so the NET step per level is ~19-20px. */
html body .comment-children {
  margin-left: -16px;
  padding-left: 6px;
  border-left: 2px solid var(--c-border, #e9e5f2);
  margin-top: 3px;
}
html body .comment-item { margin-bottom: 6px; }
html body .comment-item .comment-avatar { width: 20px !important; height: 20px !important; }
html body .comment-item.c-depth-0 > img.comment-avatar { width: 24px !important; height: 24px !important; }


/* ============================================================
   ---- 20. [v5.11.6] UNIFIED ALIGNMENT ----
   ============================================================
   Banner, columns grid, header content and footer content all share
   the same left/right edges. The banner and the header/footer gutters
   derive from the SAME container variables the grid uses, so
   alignment holds at every density (70% ... full-width). */

/* [v5.11.7 rewrite] The container width is responsive
   (70% -> 80% -> 90% -> 95% -> 100% across breakpoints in style.css),
   so nothing may hard-code it.

   BANNER: it lives INSIDE .dashboard-center, which already carries
   the responsive width — so it simply fills its parent, inset 6px to
   match the panels' grid padding. Aligned at every breakpoint by
   construction, directly below the header. */
html body .info-banner {
  width: calc(100% - 12px) !important;
  margin: 6px auto 0 !important;
  box-sizing: border-box !important;
}

/* HEADER + FOOTER: mirror the exact same breakpoints style.css uses
   for .dashboard-center, so the wordmark and the Dashboard/Jobs/
   Logout buttons align with the container edges at every size.
   Gutter = (100% - container)/2 + the 6px panel inset. */
html body .site-header, html body .site-footer {
  box-sizing: border-box !important;
  padding-left: calc((100% - min(70%, 1400px)) / 2 + 6px) !important;
  padding-right: calc((100% - min(70%, 1400px)) / 2 + 6px) !important;
}
@media (max-width: 1600px) {
  html body .site-header, html body .site-footer {
    padding-left: calc(10% + 6px) !important;
    padding-right: calc(10% + 6px) !important;
  }
}
@media (max-width: 1400px) {
  html body .site-header, html body .site-footer {
    padding-left: calc(5% + 6px) !important;
    padding-right: calc(5% + 6px) !important;
  }
}
@media (max-width: 1200px) {
  html body .site-header, html body .site-footer {
    padding-left: calc(2.5% + 6px) !important;
    padding-right: calc(2.5% + 6px) !important;
  }
}
@media (max-width: 992px) and (pointer:coarse) {
  html body .site-header, html body .site-footer { padding-left: 10px !important; padding-right: 10px !important; }
  html body .info-banner { width: calc(100% - 16px) !important; margin: 8px auto 0 !important; }
}


/* ---- 21. [v5.11.8] Thread collapse toggle + Read Mode purge ----
   Read Mode is removed platform-wide; its toolbar row (the tall gap
   between the engagement bar and the first comment) goes with it.
   Parents with replies get a V toggle to expand/contract the thread. */
html body .comments-toolbar { display: none !important; }
html body .comments-section { padding-top: 2px !important; }

html body .thread-toggle {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  background: transparent !important;
  border: none !important;
  padding: 1px 2px !important;
  margin: 1px 0 0 !important;
  font-size: 12px !important;
  font-weight:500 !important;
  color: var(--c-primary, #5f5d58) !important;
  -webkit-text-fill-color: var(--c-primary, #5f5d58) !important;
  cursor: pointer;
  box-shadow: none !important;
}
html body .thread-toggle .tt-chev { font-size: 12px; line-height: 1; }
html body .thread-toggle:hover { opacity: .7; }


/* ---- 22. [v5.11.9] Post analytics mini-row removed ---- */
html body .nf-analytics-mini { display: none !important; }


/* ---- 23. [v5.11.10] Comment rhythm: max 2-3mm gaps everywhere ----
   Vertical and horizontal spacing throughout the comment area capped
   at ~8-10px (2-3mm). */
html body .comment-item {
  padding: 2px 0 !important;
  margin-bottom: 2px !important;
  gap: 5px !important;                 /* avatar <-> content (horizontal) */
  border-bottom: none !important;      /* the divider added to the gap */
}
html body .comments-list { margin-bottom: 2px !important; }
html body .comment-header { margin: 0 !important; line-height: 1.3 !important; }
html body .comment-content { row-gap: 1px !important; }
html body .comment-text { line-height: 1.35 !important; }
html body .comment-actions-bar { margin-left: 5px !important; }
html body .thread-toggle { margin: 0 !important; }
html body .comment-children { margin-top: 2px !important; padding-left: 6px !important; }
html body .reply-form-wrapper { margin: 2px 0 !important; }
html body .comment-form { padding-top: 3px !important; gap: 5px !important; }


/* ---- 24. [v5.11.11] Comment alignment: avatar locked to the name line ----
   The avatar and the author-name line now sit on the SAME axis: the
   avatar top-aligns with the header row and the header centers its
   text against the avatar height. Name -> comment-text gap <= 2mm;
   thread -> thread <= 2-3mm (re-enforced with explicit zero margins,
   since UA <strong>/<div> defaults contributed stray offsets). */
html body .comment-item { align-items: flex-start !important; }
html body .comment-item .comment-avatar {
  margin: 0 !important;
  align-self: flex-start !important;
}
html body .comment-header {
  display: flex !important;
  align-items: center !important;
  gap: 5px !important;
  min-height: 20px !important;         /* matches nested avatar height */
  margin: 0 !important;
  padding: 0 !important;
}
html body .comment-item.c-depth-0 > .comment-content > .comment-header { min-height: 24px !important; }
html body .comment-author { margin: 0 !important; line-height: 1.2 !important; }
html body .comment-time { line-height: 1.2 !important; }

/* name -> text: <= 2mm (7px ceiling; set 2px) */
html body .comment-content { display: flex !important; flex-direction: column !important; row-gap: 0 !important; }
html body .comment-text { margin: 2px 0 0 !important; padding: 0 !important; }
html body .comment-actions-bar { margin-top: 0 !important; }

/* thread -> thread: <= 2-3mm */
html body .comment-children { margin-top: 2px !important; }
html body .comment-children .comment-item { margin-bottom: 2px !important; padding: 1px 0 !important; }


/* ---- 25. [v5.11.12] Thread tails level + "+" back inline ----
   FIX A: v5.11.11 made .comment-content a flex COLUMN, which stacked
   the actions bar under the text — regression. Content returns to
   block flow: the text is inline and the + bar flows right beside it
   on the same line (the v5.10.12 behavior), with the <=2mm name->text
   gap now carried by the header's bottom margin (inline elements
   ignore vertical margins).
   FIX B: the vertical thread guide lines ended at uneven depths
   because each nesting container kept trailing padding/margins from
   its last child. All trailing slack is flattened, so every guide
   line ends level with the bottom of the thread's last comment. */

/* A: text + actions on one line again */
html body .comment-content { display: block !important; }
html body .comment-header { margin-bottom: 2px !important; }
html body .comment-text { display: inline !important; margin: 0 !important; }
html body .comment-actions-bar {
  display: inline-flex !important;
  vertical-align: middle !important;
  margin: 0 0 0 6px !important;
}

/* B: guide lines end together at the thread's last item */
html body .comment-children { padding-bottom: 0 !important; margin-bottom: 0 !important; }
html body .comment-children > .comment-item:last-child {
  margin-bottom: 0 !important;
  padding-bottom: 0 !important;
}
html body .comment-item:last-child > .comment-content > .comment-children { margin-bottom: 0 !important; }


/* ---- 26. [v5.11.13] Flash messages as centered auto-fading toasts ----
   "Post created/updated/deleted" no longer render as a full-width
   block pushing the feed down. They float as a compact toast centered
   over the content column, hold ~1s, fade, and stop intercepting
   clicks — zero layout space consumed. */
html body .success-message {
  position: fixed !important;
  top: 64px !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  z-index: 9500 !important;
  width: auto !important;
  max-width: 320px !important;
  padding: 6px 16px !important;
  margin: 0 !important;
  border-radius: 4px !important;
  font-size: 12px !important;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
  animation: pl-toast 1.4s ease forwards;
  pointer-events: none;
}
@keyframes pl-toast {
  0%   { opacity: 0; transform: translateX(-50%) translateY(-6px); }
  12%  { opacity: 1; transform: translateX(-50%) translateY(0); }
  75%  { opacity: 1; }
  100% { opacity: 0; visibility: hidden; }
}


/* ---- 27. [v5.11.14] 3-line text clamp + full-screen image viewer ----
   Post text shows 3 lines with a fade; clicking the text expands and
   collapses it. Clicking a post image opens the viewer: image on the
   left, post info on the right, live comments below the info. */

/* clamp (overrides the old 200px max-height system) */
html body .post-card .post-content-full:not(.pl-expanded) {
  display: -webkit-box !important;
  -webkit-line-clamp: 3 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
  max-height: none !important;
  cursor: pointer;
}
html body .post-card .post-content-full.pl-expanded {
  display: block !important;
  max-height: none !important;
  cursor: pointer;
}

/* viewer */
html body #pl-lightbox {
  position: fixed; inset: 0; z-index: 2147483000;
  display: flex;
  /* [v5.16.173] image + panel are now a CENTRED PAIR. The row centres
     on both axes and the space between the two is a literal 5mm —
     previously the media box was flex:1 1 auto, so it swallowed the
     whole left region, pushed the panel flush right and left a huge
     black gulf between them. */
  align-items: center;
  justify-content: center;
  gap: 5mm;
  /* [v5.16.170] fully opaque solid black + a z-index above every other
     overlay in the theme, so nothing behind can ever show through the
     gap between the image and the comments panel. */
  background: #000 !important;
}
html body #pl-lightbox .plb-media {
  /* solid backing so the padding area around a contain-fit image is
     black, never a window onto the feed. */
  background: #000;
}
html body #pl-lightbox .plb-media {
  /* [v5.16.173] shrink-to-fit: the box is exactly the image, so the
     5mm gap is measured from the image's edge, not from an invisible
     padded region around it.
     [v5.16.174] position:relative so the comments toggle can ride the
     image's right edge. */
  position: relative;
  flex: 0 1 auto; width: auto;
  display: flex; align-items: center; justify-content: center;
  min-width: 0; padding: 0; cursor: zoom-out;
  max-width: calc(100vw - 360px - 5mm - 24px);
  max-height: calc(100vh - 32px);
}
html body #pl-lightbox .plb-media img {
  max-width: 100%; max-height: calc(100vh - 32px); object-fit: contain;
  border-radius: 4px; box-shadow: 0 8px 40px rgba(0,0,0,0.5);
}
html body #pl-lightbox .plb-side {
  /* [v5.16.168] isolate the panel as its own rounded, bordered card
     (like the feed cards), rather than a flush full-height slab.
     [v5.16.173] no more flush-right margin — the panel now sits 5mm
     from the image via the row gap. Its height is set at runtime to
     the image's rendered height (see plOpenLightbox), so with both
     items centred, panel top = image top and panel bottom = image
     bottom. box-sizing makes that height include padding+border. */
  flex: 0 0 360px; max-width: 90vw; background: #ffffff;
  display: flex; flex-direction: column; overflow-y: auto; padding: 14px;
  margin: 0;
  box-sizing: border-box;
  max-height: calc(100vh - 32px);
  border: 1px solid var(--c-border, #e5e7eb);
  border-radius: var(--pl-r-cards, 12px);
  box-shadow: 0 10px 40px rgba(0,0,0,0.35);
}
html body #pl-lightbox .plb-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
html body #pl-lightbox .plb-avatar { width: 28px; height: 28px; border-radius: 4px; object-fit: cover; }
html body #pl-lightbox .plb-name { font-weight:500; font-size: 13px; }
html body #pl-lightbox .plb-time { font-size: 12px; color: #4b5563; }
html body #pl-lightbox .plb-text { font-size: 13px; line-height: 1.45; margin-bottom: 8px; border-bottom: 1px solid var(--c-border, #e5e7eb); padding-bottom: 8px; }
html body #pl-lightbox .plb-comments .comments-section { padding: 0 !important; margin: 0 !important; border-top: none !important; }

/* [v5.16.167] Fullscreen (lightbox) comments — each top-level thread
   isolated as its own card, ordered latest-first. Scoped to
   #pl-lightbox so the in-feed comment list is completely unchanged. */
html body #pl-lightbox .plb-comments .comments-list {
  display: flex;
  flex-direction: column-reverse; /* newest thread on top */
  gap: 10px;
}
html body #pl-lightbox .plb-comments .comments-list > .comment-item {
  background: var(--c-bg-white, #fff);
  border: 1px solid var(--c-border, #e5e7eb);
  border-radius: var(--pl-r-cards, 8px);
  padding: 10px 12px;
  margin: 0;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04);
}
/* Nested replies stay inside their parent card, not separate windows. */
html body #pl-lightbox .plb-comments .comment-children {
  border-left: 2px solid var(--c-border, #e5e7eb);
  margin-top: 8px;
  padding-left: 10px;
}
/* [v5.16.174] The ✕ close button is gone — the viewer closes on
   Escape or a click on the black backdrop. The only control is the
   comments toggle, a small round button vertically centred on the
   RIGHT EDGE of the image: › folds the panel away, ‹ brings it back. */
html body #pl-lightbox #plb-ctoggle {
  position: absolute; top: 50%; right: 10px; transform: translateY(-50%);
  z-index: 2;
  width: 30px; height: 30px; border-radius: 50%;
  background: rgba(0,0,0,0.45); color: #fff; border: 1px solid rgba(255,255,255,0.35);
  font-size: 18px; line-height: 1; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
html body #pl-lightbox #plb-ctoggle:hover { background: rgba(0,0,0,0.7); }
/* Panel folded away: [v5.16.183] the media grows to the full screen
   (two-state layout, matching the zoom viewer); display:none also
   makes the .182 ghost problem impossible. */
html body #pl-lightbox.plb-comments-hidden .plb-side { display: none; }
html body #pl-lightbox.plb-comments-hidden .plb-media {
  max-width: 100vw;
  max-height: 100vh;
}
html body #pl-lightbox.plb-comments-hidden .plb-media img { max-height: 100vh; }
@media (max-width: 820px) {
  html body #pl-lightbox { flex-direction: column; gap: 8px; }
  /* [v5.16.173] stacked layout: the image-height match makes no sense
     vertically, so the runtime height is both skipped by the JS and
     overridden here as a second line of defence. */
  html body #pl-lightbox .plb-side { flex: 0 0 45%; max-width: none; height: auto !important; }
  /* [v5.16.174] stacked layout: the toggle sits at the image's bottom
     edge instead, pointing down/up. Glyph rotation only — the JS keeps
     flipping ›/‹ and the quarter turn makes that ˅/˄. */
  html body #pl-lightbox #plb-ctoggle {
    top: auto; bottom: 8px; right: 50%; transform: translateX(50%) rotate(90deg);
  }
}


/* ---- 28. [v5.11.15] Post (...) menu opens HORIZONTALLY, to the left ----
   The edit/delete items previously dropped as a vertical column under
   the dots; the menu now flows right-to-left on the SAME row as the
   dots button: a horizontal strip appearing beside it. */
html body .post-dropdown {
  top: 50% !important;
  right: calc(100% + 4px) !important;   /* sits to the LEFT of the dots */
  transform: translateY(-50%) !important;
  white-space: nowrap !important;
}
html body .post-dropdown.active {
  display: inline-flex !important;      /* horizontal row, not a column */
  flex-direction: row-reverse !important; /* first item lands nearest the dots */
  align-items: center !important;
  gap: 2px !important;
}
html body .post-dropdown a,
html body .post-dropdown button {
  display: inline-flex !important;
  align-items: center !important;
  padding: 3px 5px !important;
  margin: 0 !important;
}


/* ---- 29. [v5.11.16] Engagement counts: plain black numerals ----
   The purple chip background behind like/dislike/comment counts is
   removed everywhere (post bar AND comment actions) — counts render
   as plain black numbers beside the icons. Overrides the chip styling
   from sections 17/17f. */
html body .eng-badge-count,
html body .comment-eng-count {
  background: transparent !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  border: none !important;
  border-radius: 0 !important;
  min-width: 0 !important;
  height: auto !important;
  line-height: 1.2 !important;
  padding: 0 1px !important;
  font-size: 10px !important;
  font-weight:500 !important;
}
html body .engagement-btn.like-btn .eng-badge-count,
html body .engagement-btn.dislike-btn .eng-badge-count { font-size: 10px !important; }


/* [v5.11.17] Black numerals, final enforcement — beats the per-button
   .like-btn/.dislike-btn/.comment-btn chip rules and active states. */
html body .engagement-btn .eng-badge-count,
html body .engagement-btn.active .eng-badge-count,
html body .comment-action-btn .comment-eng-count,
html body .comment-action-btn.active .comment-eng-count {
  background: transparent !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  border-radius: 0 !important;
}


/* ---- 30. [v5.11.18] Reactions do NOT change color when active ----
   A liked/disliked state previously painted the comment buttons with
   a dark background (via the generic button.active rule, which the
   comment buttons fall into) and turned post-bar icons purple. Per
   direction, reacting leaves the appearance exactly as it was: same
   icons, same black numerals, no fill. The toggle still works — the
   count changing is the feedback. */

/* comment actions: kill the dark active background + purple strokes */
html body .comment-action-btn.active,
html body button.comment-action-btn.active {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
}
html body .comment-action-btn.active svg {
  stroke: #1a1a1a !important;
}
html body .comment-action-btn.active .comment-eng-count {
  background: transparent !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
}

/* post bar: active like/dislike/save keep the normal dark look */
html body .engagement-btn.active,
html body .engagement-btn.like-btn.active,
html body .engagement-btn.dislike-btn.active,
html body .engagement-btn.save-btn.active {
  background: transparent !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
}
html body .engagement-btn.active svg { stroke: #1a1a1a !important; }


/* ---- 31. [v5.11.19] Notifications dashboard: slim, black & white ----
   Same treatment as the rest of the platform: white surfaces, black
   outline icons, no filled tabs, no purple header bar, plain black
   numerals for counts. */

/* tabs: transparent, black icons; active = underline, not a fill */
html body .nd-tab,
html body .nd-tab.active {
  background: transparent !important;
  border: none !important;
  border-bottom: 2px solid transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  padding: 3px 8px !important;
}
html body .nd-tab svg { stroke: #1a1a1a !important; width: 13px !important; height: 13px !important; }
html body .nd-tab.active { border-bottom-color: #1a1a1a !important; }
html body .nd-tab:hover { opacity: .65; }

/* count badge: plain black numeral, no red pill */
html body .nd-badge {
  background: transparent !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  border-radius: 0 !important;
  min-width: 0 !important;
  padding: 0 1px !important;
  font-size: 10px !important;
  font-weight:500 !important;
}

/* panel header: white and slim instead of the purple bar */
html body .nd-panel-header,
html body .notif-dash-header {
  background: #ffffff !important;
  color: #1f2937 !important;
  border-bottom: 1px solid var(--c-border, #e5e7eb) !important;
  padding: 3px 8px !important;
  font-size: 12px !important;
  font-weight:500 !important;
}
html body .nd-panel-header button,
html body .notif-dash-header button {
  background: transparent !important;
  border: none !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  font-size: 12px !important;
  padding: 1px 4px !important;
  cursor: pointer;
}
html body .nd-panel-header button svg,
html body .notif-dash-header button svg { stroke: #1a1a1a !important; }
html body .nd-panel-header button:hover { opacity: .65; }

/* items: tighter rhythm */
html body .notif-dash-item { padding: 4px 8px !important; }
html body .notif-dash-tabs { gap: 0 !important; border-bottom: 1px solid var(--c-border, #e5e7eb) !important; }


/* ---- 32. [v5.11.26] Post text: no boxed background ----
   The post body previously rendered inside a bordered/tinted
   rectangle; it now sits directly on the white card like the rest of
   the content. Enforced over any cached/bundle copy. */
html body .post-card .post-content-full,
html body .feed-post .post-content-full {
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
}


/* ---- 33. [v5.11.28] Posts as mild-rounded rectangles ----
   Refined direction: each post IS its own card again — a clean
   rectangle with a MILD bend on the corners (5px), a hairline
   border, tight gaps between posts, and no heavy shadow. The
   composer block matches. */
html body .center-content .post-card,
html body .center-content .feed-post {
  border: 1px solid var(--c-border, #e5e7eb) !important;
  border-radius: 5px !important;           /* the mild bend */
  box-shadow: none !important;
  margin: 0 0 6px !important;              /* slim air between posts */
  overflow: hidden;                        /* media + bars respect the bend */
}
html body .center-content .composer-card,
html body .center-content .post-composer,
html body .center-content .create-post-section,
html body .center-content .create-post-card {
  border: 1px solid var(--c-border, #e5e7eb) !important;
  border-radius: 5px !important;
  box-shadow: none !important;
  margin: 0 0 6px !important;
}


/* ---- 34. [v5.11.29] The center WRAPPER disappears — posts float free ----
   The big white rectangle around the whole feed was the center panel
   itself. It is now invisible (transparent, no border, no shadow):
   ONLY the composer and the posts appear, each as its own white
   mild-rounded card floating directly on the canvas. Left/right
   panels keep their floating design. Declared after sections 14/15/33
   so it wins the cascade at equal specificity. */
html body:not([data-theme]) .center-content {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;      /* [v5.11.30] top too — first card aligns with the side panels' tops */
}
/* the Feed heading no longer floats above the cards adding offset —
   it sits inside the flow tight to the top */
html body .center-content > .dir-header { margin-top: 0 !important; padding-top: 0 !important; }
html body .center-content > .dir-header h2 { margin-top: 0 !important; }
/* the cards ARE the floating surfaces now */
html body:not([data-theme]) .center-content .post-card,
html body:not([data-theme]) .center-content .feed-post,
html body:not([data-theme]) .center-content .create-post-card,
html body:not([data-theme]) .center-content .create-post-section,
html body:not([data-theme]) .center-content .profile-form {
  background: #ffffff !important;
  box-shadow: 0 1px 3px rgba(95,93,88, 0.06) !important;
}
/* the "Feed" heading sits quietly on the canvas */
html body .center-content > .dir-header,
html body .center-content .dir-header h2 { background: transparent !important; }


/* ---- 35. [v5.11.31] Comment inline edit form ---- */
html body .comment-edit-form { display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; }
html body .comment-edit-form input {
  font-size: 12px; padding: 3px 8px;
  border: 1px solid var(--c-primary, #5f5d58); border-radius: 4px;
  min-width: 220px;
}
html body .comment-edit-save {
  background: var(--c-primary, #5f5d58) !important; color: #fff !important;
  -webkit-text-fill-color: #fff !important; border: none !important;
  padding: 3px 10px !important; font-size: 12px !important; border-radius: 4px !important;
}
html body .comment-edit-cancel {
  background: transparent !important; border: 1px solid var(--c-border, #d1d5db) !important;
  color: #4b5563 !important; -webkit-text-fill-color: #4b5563 !important;
  padding: 3px 8px !important; font-size: 12px !important; border-radius: 4px !important;
}


/* ---- 36. [v5.11.32] Ultra-compact post header, no band ----
   The author row shrinks to a slim single line with zero chrome:
   transparent (no strip/border), 2px rhythm, small metadata. Card
   padding tightens to 8px; the engagement bar's full-bleed negative
   margins re-tuned to the new padding so the bend still clips it
   cleanly. */
html body .post-card { padding: 6px 8px 4px !important; }

html body .post-header {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  margin: 0 0 3px !important;
  min-height: 0 !important;
  gap: 5px !important;
}
html body .post-header .post-avatar { width: 20px !important; height: 20px !important; }
html body .post-author-name, html body .post-author-name a { font-size: 12px !important; line-height: 1.2 !important; }
html body .post-time,
html body .post-header .post-edited,
html body .post-header .post-rev,
html body .post-modified-tag {
  font-size: 12px !important;
  line-height: 1.2 !important;
}
html body .post-actions-menu { margin: 0 !important; }
html body .post-menu-btn, html body .post-actions-menu > button { padding: 0 3px !important; }

/* engagement bar full-bleed matches the new 8px side padding */
html body .engagement-bar { margin-left: -8px !important; margin-right: -8px !important; margin-bottom: -4px !important; }


/* ---- 37. [v5.11.33] Post actions relayout ----
   EDIT lives in the engagement bar (after Save, own posts only).
   The three vertical dots float over the media's top-right corner in
   a soft white chip and hold DELETE; the card anchors the overlay. */
html body .post-card { position: relative; }

/* [v5.16.147] BACK IN THE AUTHOR ROW.
   The absolute position above floated the dots over the media's top-right
   corner — top:50px, right:27px. That only works on a post that HAS media.
   On a text-only post there is nothing at 50px, so the dots dropped to the
   level of the engagement bar and read as belonging to it.

   .post-header is already display:flex; align-items:center, and
   .post-actions-menu already carries margin-left:auto, so returning it to
   static flow puts it at the right-hand end of the author line for every
   post, with or without media, and needs no per-case handling.

   The dropdown needs no change: .post-dropdown is position:absolute with
   right:0 and top:100%, so it is already anchored to the button's right edge
   and grows leftward and downward. */
html body .post-card .post-actions-menu {
  position: relative !important;
  top: auto !important;
  right: auto !important;
  margin-left: auto !important;
  flex-shrink: 0 !important;
  z-index: 30 !important;
}
html body .post-menu-btn {
  /* [v5.16.147] The white chip and border existed so the dots stayed legible
     ON TOP OF a photo. Sitting in the author row on a white card they are just
     a box around a glyph, so both go. */
  background: none !important;
  background-color: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  width: 20px !important;
  height: 20px !important;
  line-height: 1 !important;
  font-size: 13px !important;
  color: #1f2937 !important;
  -webkit-text-fill-color: #1f2937 !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12) !important;
  cursor: pointer;
}
/* dropdown (delete) opens leftward beside the chip, over the image */
html body .post-card .post-dropdown {
  background: rgba(255, 255, 255, 0.95) !important;
  border: 1px solid var(--c-border, #e5e7eb) !important;
  border-radius: 4px !important;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
  padding: 1px !important;
}
/* edit button in the bar matches its neighbors */
html body .post-edit-btn svg { width: 12px !important; height: 12px !important; }


/* ---- 38. [v5.11.34] Post editor placement polish ----
   The editor renders below the media, in place of the text it edits.
   Save = purple, Cancel = outline chip. While the editor is open the
   floating dots chip hides (its only action is delete, and it was
   overlapping the editor border). */
html body .edit-form { margin: 4px 0 !important; }
html body .edit-textarea {
  border: 1px solid var(--c-primary, #5f5d58) !important;
  border-radius: 4px !important;
  font-size: 13px !important;
  padding: 8px 10px !important;
}
html body .edit-save-btn {
  background: var(--c-primary, #5f5d58) !important; color: #fff !important;
  -webkit-text-fill-color: #fff !important; border: none !important;
  padding: 4px 12px !important; font-size: 12px !important; border-radius: 4px !important;
}
html body .edit-save-btn:hover { background: var(--c-primary-dark, #3f3d39) !important; }
html body .edit-cancel-btn {
  background: transparent !important; border: 1px solid var(--c-border, #d1d5db) !important;
  color: #4b5563 !important; -webkit-text-fill-color: #4b5563 !important;
  padding: 4px 10px !important; font-size: 12px !important; border-radius: 4px !important;
}
/* hide the dots chip while its post's editor is open */
html body .post-card:has(.edit-form[style*="block"]) .post-actions-menu {
  display: none !important;
}


/* ---- 39. [v5.11.35] Poster avatar is a circle ---- */
html body .post-header .post-avatar,
html body .post-avatar {
  border-radius: 50% !important;
}


/* ---- 40. [v5.11.36] Engagement bar: floating pill, scrolls with you ----
   The action row is no longer a full-width background band attached
   to the card edges: it is an isolated rounded pill with its own
   border and soft shadow, inset from the card, and it is STICKY —
   while a long post scrolls, its pill stays pinned just under the
   site header so like/comment/save remain reachable. */
html body .engagement-bar {
  position: sticky !important;
  top: 42px !important;                     /* just below the fixed site header */
  z-index: 25 !important;
  margin: 6px 6px 4px !important;           /* replaces the full-bleed negative margins */
  border: 1px solid var(--c-border, #e5e7eb) !important;
  border-radius: 6px !important;
  background: rgba(255, 255, 255, 0.96) !important;
  box-shadow: 0 2px 8px rgba(95,93,88, 0.08) !important;
  padding: 2px 8px !important;
}

/* ---- 41. [v5.11.38] Header & footer: isolated floating elements ----
   Per direction, the rectangular header/footer bands are removed.
   The bars themselves are fully transparent (no background, border,
   shadow, or energy line) and click-through; each element they carry
   — logo, nav buttons, hamburger, copyright — becomes its own
   isolated chip in the v5.11.36 pill language: near-white surface,
   hairline border, 6px corners, soft violet shadow. */

/* The bands: invisible + click-through (chips re-enable pointer). */
html body .site-header,
html body .site-footer {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  pointer-events: none !important;
}
/* Kill the Live Wire lines — a floating line without a bar reads as a glitch. */
html body .site-header::after,
html body .site-footer::before { content: none !important; display: none !important; }

/* Shared chip surface */
html body .site-header .site-logo,
html body .site-header .header-button,
html body .site-header .hamburger-btn,
html body .site-footer .footer-text {
  pointer-events: auto !important;
  background: rgba(255, 255, 255, 0.96) !important;
  border: 1px solid var(--c-border, #e5e7eb) !important;
  border-radius: var(--pl-user-radius, 6px) !important;
  box-shadow: 0 2px 8px rgba(95,93,88, 0.08) !important;
}

/* Logo chip */
html body .site-header .site-logo {
  padding: 2px 10px !important;
  display: inline-flex !important;
  align-items: center !important;
}

/* Nav button chips — override section 10's transparent background */
html body .site-header .header-button {
  padding: 2px 10px !important;
}
html body .site-header .header-button:hover {
  background: #ffffff !important;
  border-color: var(--c-accent-violet, #76736c) !important;
  box-shadow: 0 3px 10px rgba(95,93,88, 0.14) !important;
}

/* Hamburger chip (mobile) */
html body .site-header .hamburger-btn { padding: 4px 7px !important; }

/* Copyright chip: shrink-wraps and centres itself instead of
   spanning the footer (inline style width:100% is overridden). */
html body .site-footer .footer-text {
  width: auto !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  padding: 2px 12px !important;
  margin: 0 !important;
}

/* ---- 42. [v5.11.39] Chip legibility: solid ink on solid surfaces ----
   The transparent bands exposed style.css's old white header/footer
   ink (--hdr-text-color #fff, --footer-text-color rgba(255,255,255,
   .85)) — white-on-white where section 10 didn't reach — and the
   gradient wordmark's transparent text fill read as faint over a
   96%-opaque chip. Chips are now fully opaque with a blur backdrop,
   and every piece of text is forced to solid dark ink. */

/* Fully opaque chip surface + blur so scrolled content never ghosts
   through under the text. */
html body .site-header .site-logo,
html body .site-header .header-button,
html body .site-header .hamburger-btn,
html body .site-footer .footer-text {
  background: #ffffff !important;
  backdrop-filter: blur(6px) !important;
  -webkit-backdrop-filter: blur(6px) !important;
}

/* Solid dark ink everywhere in the header/footer — beats the white
   variable defaults regardless of which rule reaches the element. */
html body .site-header,
html body .site-header a,
html body .site-header .header-button,
html body .site-header .site-logo a,
html body .site-footer,
html body .site-footer .footer-text,
html body .site-footer .footer-text a {
  color: #111111 !important;
  -webkit-text-fill-color: #111111 !important;
  text-shadow: none !important;
  opacity: 1 !important;
}

/* Wordmark: retire the gradient/transparent fill — solid brand
   purple, fully legible at chip size. */
html body .site-header .site-logo .logo-text {
  background: none !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  color: var(--c-primary, #5f5d58) !important;
  -webkit-text-fill-color: var(--c-primary, #5f5d58) !important;
  font-size: 14px !important;
  font-weight:500 !important;
  letter-spacing: .3px !important;
}

/* Readable control text: was 9-11px scaled by --hdr-scale. */
html body .site-header .header-button {
  font-size: 12px !important;
  font-weight:500 !important;
  letter-spacing: 0 !important;
  line-height: 1.6 !important;
}
html body .site-footer .footer-text { font-size: 12px !important; }
html body .site-footer .footer-text a {
  font-weight:500 !important;
  color: var(--c-primary, #5f5d58) !important;
  -webkit-text-fill-color: var(--c-primary, #5f5d58) !important;
}

/* Hamburger bars: dark, not the header-ink white. */
html body .site-header .hamburger-btn span {
  background: #111111 !important;
}

/* ---- 43. [v5.11.41] Three-tier ink + jobs panel re-colour ----
   Ink is now exactly three colours, mapped to text size:
     #111827 — headings / titles (h1-h6, card titles)
     #1f2937 — body text
     #4b5563 — small / meta / secondary (12px and under)
   Plus: the sidebar jobs panel loses its off-brand colours — the
   charcoal-on-grey Network/Jobs toggle and the green salary chips
   join the purple chip language. */

/* Size-tier enforcement */
html body h1, html body h2, html body h3,
html body h4, html body h5, html body h6,
html body .sj-title, html body .post-author-name {
  color: #111827 !important;
}
html body small,
html body .sj-meta, html body .sj-company,
html body .post-time, html body .up-headline {
  color: #4b5563 !important;
}

/* Network/Jobs toggle: purple slider, no track.
   [v5.16.396] The track box (background + border + radius + overflow:hidden)
   was removed at source. It is the rule that kept winning over the override in
   pl-gap-enforce.css, so it is deleted here rather than fought. The slider
   carries its own radius now — see pl-gap-enforce.css. */
html body .up-toggle-wrap {
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  overflow: visible !important;
}
html body .up-toggle-wrap .up-tog-slider {
  background: var(--c-primary, #5f5d58) !important;
  border-radius: var(--pl-r-buttons, var(--pl-user-radius, 5px)) !important;
}
html body .up-toggle-wrap .up-tog-label {
  color: #4b5563 !important;
  -webkit-text-fill-color: #4b5563 !important;
  font-weight:500 !important;
}
html body .up-toggle-wrap .up-tog-label.active {
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}

/* Job tags: neutral chips for type/mode, purple chip for salary
   (was success-green on mint — off-brand in a purple system). */
html body .sj-tag {
  font-size: 12px !important;
  padding: 1px 7px !important;
  background: #f3f4f6 !important;
  color: #4b5563 !important;
  border: 1px solid var(--c-border, #e5e7eb) !important;
  border-radius: var(--pl-r-tags, var(--pl-user-radius, 5px)) !important;
}
html body .sj-tag.salary {
  background: rgba(118,115,108, 0.08) !important;
  color: var(--c-primary, #5f5d58) !important;
  border-color: rgba(118,115,108, 0.25) !important;
  font-weight:500 !important;
}

/* ---- 44. [v5.11.42] Engagement bar: chrome removed ----
   Per direction, the rectangular container behind the action row
   (v5.11.36's bordered white pill) is removed: no surface, border,
   shadow or inset — the icons sit directly on the post card. The
   sticky pinning goes with it: a transparent bar pinned over
   scrolling post text would be unreadable, and the surface that
   made pinning legible is exactly what was asked to be removed. */
html body .engagement-bar {
  position: static !important;
  margin: 4px 0 0 !important;
  border: none !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  padding: 2px 0 !important;
}

/* ---- 45. [v5.11.44] Personal info: compact (flow-safe rewrite) ----
   The v5.11.43 grid broke the tab badly: the avatar block lives
   INSIDE the form, so it became a grid cell — First Name slotted
   beside a 300px-tall photo and every later field landed in the
   wrong column, while display:contents destroyed the form's own
   working Phone+DOB / Gender+Nationality flex pairs. That entire
   grid is removed. Compaction is now metrics-only in normal
   document flow — the form's existing structure (including its
   .form-row-half pairs) is preserved exactly. */
html body .profile-form { max-width: 920px !important; } /* [v5.11.80] sized for the four-cell row */
html body .profile-form h2 {
  font-size: 15px !important;
  margin-bottom: 10px !important;
  padding-bottom: 6px !important;
  color: #111827 !important;
}
html body .profile-form .form-row { margin-bottom: 9px !important; }
html body .profile-form .form-row-half { gap: 12px !important; }
html body .profile-form .form-row label {
  font-size: 12px !important;
  font-weight:500 !important;
  color: #4b5563 !important;
  margin-bottom: 3px !important;
}
html body .profile-form .form-row input,
html body .profile-form .form-row select {
  padding: 5px 9px !important;
  font-size: 12.5px !important;
  border-radius: 4px !important;
}
html body .profile-form .form-row textarea {
  padding: 6px 9px !important;
  font-size: 12.5px !important;
  min-height: 34px !important;   /* [v5.11.88] box ends where the text ends — JS auto-fits height to content */
  height: auto;
  resize: vertical !important;
  border-radius: 4px !important;
}
html body .profile-form .form-row input:focus,
html body .profile-form .form-row select:focus,
html body .profile-form .form-row textarea:focus {
  border-color: var(--c-primary, #5f5d58) !important;
}
/* Avatar block: same layout, less air */
html body .profile-form .avatar-upload-wrap { margin-bottom: 12px !important; }
html body .profile-form .save-msg {
  padding: 5px 10px !important;
  margin-bottom: 8px !important;
  font-size: 12px !important;
  border-radius: 4px !important;
}

/* ---- 46. [v5.11.53] CV actions bar: single source of truth ----
   Three !important layers (visual-polish gradient on -primary,
   bundle 1.5px/3px outline chrome, a late bundle padding rule)
   kept re-differentiating these buttons. This block loads last
   and settles it: inside .cvs-actions every control is identical —
   white, hairline, text-fitted with ~2mm padding — including
   Download PDF. background-image kills the gradient. */
html body .cvs-actions .cvs-btn,
html body .cvs-actions .cvs-btn-primary,
html body .cvs-actions .cvs-btn-outline,
html body .cvs-actions select {
  background: #fff !important;
  background-image: none !important;
  color: #374151 !important;
  -webkit-text-fill-color: #374151 !important;
  border: 1px solid #d1d5db !important;
  border-radius: var(--pl-r-buttons, var(--pl-user-radius, 4px)) !important;
  padding: 4px 8px !important;
  font-size: 12px !important;
  line-height: 1.4 !important;
  font-weight:500 !important;
  height: auto !important;
  min-width: 0 !important;
  box-shadow: none !important;
  box-sizing: border-box !important;
}
html body .cvs-actions .cvs-btn:hover,
html body .cvs-actions .cvs-btn-primary:hover,
html body .cvs-actions .cvs-btn-outline:hover {
  border-color: #76736c !important;
  color: #76736c !important;
  -webkit-text-fill-color: #76736c !important;
  background: rgba(118,115,108, 0.04) !important;
  background-image: none !important;
}

/* ---- 47. [v5.11.54] CV template posters: black & white ----
   The ten template preview icons each carried their own accent
   colour (purple, gold, pink, blue, green, teal...). Per
   direction they render monochrome — grayscale keeps every
   layout's structure and tonal contrast while removing colour.
   The card text and selected-state ring are unaffected. */
html body .cvs-card .cv-ico {
  filter: grayscale(1) !important;
}

/* ---- 48. [v5.11.55] Profile forms: shared row patterns ----
   form-row-half/-third are now used across all profile tabs but
   were only defined in personal.php's inline styles. Defined here
   globally (with mobile stacking, which most tabs lacked) so every
   tab renders its pairs and triples identically. */
html body .profile-form .form-row-half { display: flex; gap: 12px; }
html body .profile-form .form-row-half > .form-row { flex: 1; min-width: 0; }
html body .profile-form .form-row-third { display: flex; gap: 12px; }
html body .profile-form .form-row-third > .form-row { flex: 1; min-width: 0; }
@media (max-width: 768px) {
  html body .profile-form .form-row-half,
  html body .profile-form .form-row-third { flex-direction: column; gap: 0; }
}

/* ---- 49. [v5.11.57] CV summary: 2-3mm spacing everywhere ----
   Per direction, no gap in the CV summary exceeds ~3mm (11px).
   Block padding 14-18px -> 8x10px (~2mm), section gaps 22px ->
   10px, block gaps 8px -> 6px, title underline gap tightened.
   Line-height inside descriptions eased for density. */
html body .cv-section { margin-bottom: 10px !important; }
html body .cv-section-title {
  padding-bottom: 3px !important;
  margin-bottom: 7px !important;
}
html body .cv-personal,
html body .cv-entry,
html body .cv-summary-block {
  padding: 8px 10px !important;
  margin-bottom: 6px !important;
}
html body .cv-name { margin-bottom: 5px !important; }
html body .cv-entry-sub { margin-top: 2px !important; }
html body .cv-entry-desc { margin-top: 4px !important; line-height: 1.45 !important; }
html body .cv-tags { gap: 4px !important; margin-top: 3px !important; }
html body .cv-tag { padding: 2px 8px !important; }

/* ---- 50. [v5.11.59] Right sidebar: +1px type, paddings untouched ----
   Notifications panel companion to the sidebar-widgets/insights
   source-level bump: header 11->12, list items 11->12, empty state
   10->11, meta 9->10. Only font-size is set here — every padding,
   margin and dimension stays exactly as it was. */
html body .nd-panel-header,
html body .nd-panel-header span { font-size: 12px !important; }
html body .nd-panel-header button { font-size: 12px !important; }
html body .notif-dash-item { font-size: 12px !important; }
html body .notif-dash-empty { font-size: 12px !important; }
html body .notif-dash-item .ndi-time,
html body .notif-dash-item small { font-size: 12px !important; }

/* ---- 51. [v5.11.62] Engagement bar: 1.25x controls ----
   v5.11.61's 1.5x read too big; reduced 25% per direction to a
   net ~1.25x of the original: text 10-11px -> 13px, icons
   14px -> 17px. Covers the right-side flag group too. */
html body .engagement-bar .engagement-btn,
html body .engagement-bar button {
  font-size: 13px !important;
  padding: 3px 6px !important;
  line-height: 1.3 !important;
}
html body .engagement-bar .engagement-btn svg,
html body .engagement-bar button svg {
  width: 17px !important;
  height: 17px !important;
}

/* ---- 52. [v5.11.65] Feed videos: full card width ----
   Videos rendered at intrinsic width (max-width:100% but no width)
   with a 220px height cap, leaving a large empty area beside them
   in the card. They now span the full card width like feed images:
   width 100%, sensible height cap, letterboxed on black so wide
   and tall clips both look intentional. */
html body .post-card .post-media-item video {
  width: 100% !important;
  max-width: 100% !important;
  height: auto !important;
  max-height: 480px !important;
  object-fit: contain !important;
  display: block !important;
  /* [v5.16.332] Was #000, which showed as black side/top bars whenever a
     clip didn't match the card's aspect. Blended to the media surface so
     letterboxing is invisible instead of a black slab. */
  background: var(--post-media-bg, #fff) !important;
  border-radius: 3px !important;
}
html body .post-card .post-media-item { width: 100% !important; }

/* ---- 53. [v5.11.66] Post dropdown items: always-visible dark ink ----
   One of the competing .dropdown-item rules paints these with the
   header ink variable (#fff) — an icon-only white button inside a
   white dropdown is invisible. Force dark ink + left-aligned
   icon+label layout in every post dropdown. */
html body .post-dropdown .dropdown-item {
  color: #111827 !important;
  -webkit-text-fill-color: #111827 !important;
}
html body .post-dropdown .dropdown-item svg { stroke: currentColor !important; }
/* [v5.16.192] the delete item used to be red here; per direction ALL
   strip icons are black-and-white now (see the monochrome enforcement
   block at the end of this file). */
html body .post-dropdown .dropdown-item.delete {
  color: var(--c-text-primary, #000) !important;
  -webkit-text-fill-color: var(--c-text-primary, #000) !important;
}

/* ---- 54. [v5.11.71] Edit pencil: black & white ---- */
html body .engagement-bar .post-edit-btn {
  /* [v5.16.331] Was #111827 (near-black), which made the pencil read darker
     than its neighbours. Matched to the shared engagement-button colour
     (#4b5563) used by like/forward/comment/save so the whole row is one
     consistent tone. */
  color: #4b5563 !important;
  -webkit-text-fill-color: #4b5563 !important;
  /* [v5.16.151] background:#fff removed. Every other button in this bar is
     transparent, so a white chip made the pencil the one boxed icon in the
     row — which is what makes the Engagements card look unlike the Feed. */
  background: none !important;
  background-color: transparent !important;
}
html body .engagement-bar .post-edit-btn svg { stroke: currentColor !important; fill: none !important; }

/* ---- 55. [v5.11.78] Entry blocks: stringent 2-4mm spacing ---- */
html body .profile-form .entry-block {
  padding: 8px 10px !important;      /* ~2mm around content */
  margin-bottom: 8px !important;
}
html body .profile-form .entry-block h3 {
  font-size: 12px !important;
  margin: 0 0 6px 0 !important;
  padding: 0 !important;
}
html body .profile-form .entry-block .remove-entry {
  padding: 4px 10px !important;
  font-size: 12px !important;
  line-height: 1.3 !important;
}
/* [v5.16.15] inside a section panel the entry-block box is redundant (double rectangle) — flatten it */
html body .profile-form .op-body .entry-block,
html body .profile-form .skills-panel-body .entry-block {
  border: none !important;
  background: transparent !important;
  padding: 0 !important;
  margin: 0 !important;
  box-shadow: none !important;
}

/* ---- 56. [v5.11.85] Fix: right sidebars dropping below content ----
   The dashboard grid's centre track is a bare 1fr, whose implicit
   minimum is the content's min-width — the 920px profile form
   (v5.11.80) forced the track wider than its share and broke the
   four-column row. minmax(0,1fr) pins the centre to its allotted
   share regardless of content, and the form caps at its container
   so it can never push the track again. */
html body .dashboard-grid {
  /* [v5.17.44] Sides FIXED, only the feed varies. The Left/People/Right
     columns keep their fixed widths (--col1/3/4-width) exactly as before. The
     centre feed track is var(--col2-width, minmax(0,1fr)): unset it flexes to
     fill the gap (original behaviour); when a Feed width is set the feed takes
     that width and any leftover space sits to the right of the fixed columns —
     the side panels do NOT move. */
  grid-template-columns:
     var(--col1-width)
     var(--col2-width, minmax(0, 1fr))
     var(--col3-width)
     var(--col4-width) !important;
}
html body .profile-form {
  max-width: min(920px, 100%) !important;
}
html body .dashboard-center { min-width: 0 !important; }

/* ---- 57. [v5.11.129] Minimum corner rounding platform-wide ----
   Per direction: every rectangle bends at least ~6px (5-7 range).
   max() keeps the Radius slider authoritative above the floor. */
html body .entry-block,
/* [v5.16.86] Registration uses .reg-* class names rather than .form-row, so
   it was missing this floor and rendered square next to every other tab.
   Added here rather than declared separately, so there stays exactly one
   source of truth for the platform's minimum bend. */
html body .company-page .reg-form-section,
html body .company-page .reg-input,
html body .company-page .reg-select,
html body .company-page .reg-textarea,
html body .company-page .reg-multi-wrap,
html body .company-page textarea,
html body .company-page input[type="tel"],
html body .company-page input[type="number"],
html body .profile-form .form-row input,
html body .profile-form .form-row select,
html body .profile-form .form-row textarea,
html body .profile-form input[type="text"],
html body .profile-form input[type="url"],
html body .profile-form input[type="email"],
html body .profile-form select,
html body .profile-form textarea,
html body .remove-entry,
html body .save-btn,
html body .profile-form button,
html body .date-group select,
html body .date-group input,
html body .cv-actions button,
html body .conn-card,
html body .post-card,
html body .sv-card,
html body .job-card {
  /* [v5.16.125] Follows the Cards corner group. It was
     max(12px, var(--pl-user-radius,12px)) — the max() put a hard 12px FLOOR
     under every card, so setting Cards to Square did nothing and no value
     below 12 was reachable. The old expression is kept as the fallback for
     installs that never open the Corners panel. */
  border-radius: var(--pl-r-cards, max(12px, var(--pl-user-radius, 12px))) !important;
}

/* ---- 58. [v5.11.134] CV template picker: one compact row, names only ----
   Per direction: posters and descriptor lines removed; ten name
   chips share a single horizontally-scrollable row. */
html body .cvs-grid {
  display: grid !important;
  grid-template-columns: repeat(10, minmax(0, 1fr)) !important;
  gap: 6px !important;
  overflow-x: visible !important;
  padding-bottom: 8px !important;
}
@media (max-width: 820px) { html body .cvs-grid { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; } }
@media (max-width: 480px) { html body .cvs-grid { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; } }
html body .cvs-card {
  width: auto !important;
  min-width: 0 !important;
  padding: 7px 3px 6px !important;
  text-align: center !important;
  margin: 0 !important;
}
html body .cvs-actions {
  justify-content: center !important;
  flex-wrap: wrap !important;
  overflow-x: visible !important;
}
html body .cvs-preview-wrap {
  border: none !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  background: #ffffff !important;
  padding: 10px !important;
}
html body .cvs-card .cvs-card-desc {
  display: none !important;
}
/* [v5.11.136] posters kept, reduced ~65% */
html body .cvs-card .cvs-card-icon { margin: 0 auto 3px !important; }
html body .cvs-card .cv-ico {
  width: 24px !important;
  height: 30px !important;
  transform-origin: top center;
}
/* [v5.20.201] THIS is the rule that kept "Corporate" on two lines. It is
   (0,2,2) with !important; the sizing in tabs/summary.php is (0,1,0), so two
   previous attempts to fix the wrap in that template could not reach it and
   appeared to do nothing.
   Its font-size:12px also silently beat the 10px set there — the name was
   never actually rendering at the size the template asked for.
   Now: nowrap so it cannot break, 10px so the longest name ("Corporate",
   ~9 chars) clears the ~57px of text space a desktop card gives, and ellipsis
   as the safety net instead of overflow:visible, which would have let a long
   name spill across the neighbouring card. */
html body .cvs-card .cvs-card-name {
  font-size: 10px !important;
  letter-spacing: -0.2px !important;
  line-height: 1.2 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  overflow-wrap: normal !important;
  margin: 0 !important;
}

/* ---- 59. [v5.11.138] Network/Jobs toggle vs Search: clear separation ---- */
html body .up-toggle-wrap {
  margin-bottom: 10px !important;
  position: relative !important;
  z-index: 1 !important;
}
html body .conn-search,
html body .up-search,
html body input[placeholder="Search..."] {
  margin-top: 2px !important;
}

/* ---- 49. [v5.11.151] Personal info: breathe like the Experience tab ----
   Block 45's compact metrics (9px rows, 11px labels, 5px input padding)
   made the Personal tab feel cramped next to Experience, whose entry-block
   cards give every field air. Scoped to .pl-personal-comfy (set on the
   Personal tab wrapper only), this restores the Experience rhythm: 15px
   between rows, 12px labels with 5px gap, 8px/12px input padding, matching
   half/third gaps, and the Hide-from-CV mini-rows pushed off the field
   edge. Every other tab keeps block 45 unchanged. */
html body .profile-form.pl-personal-comfy .form-row { margin-bottom: 12px !important; } /* [v5.11.154] ~3mm */
html body .profile-form.pl-personal-comfy .form-row-half,
html body .profile-form.pl-personal-comfy .form-row-third { gap: 12px !important; } /* [v5.11.154] ~3mm */
html body .profile-form.pl-personal-comfy .form-row label {
  font-size: 12px !important;
  margin-bottom: 5px !important;
}
html body .profile-form.pl-personal-comfy .form-row input,
html body .profile-form.pl-personal-comfy .form-row select {
  padding: 8px 12px !important;
  font-size: 13px !important;
}
html body .profile-form.pl-personal-comfy .form-row textarea {
  padding: 10px 12px !important;
  font-size: 13px !important;
  line-height: 1.55 !important;
}
html body .profile-form.pl-personal-comfy .form-row > div[style*="justify-content:flex-end"] {
  margin-top: 4px !important; /* [v5.11.154] */
}
html body .profile-form.pl-personal-comfy h2 {
  font-size: 16px !important;
  margin-bottom: 16px !important;
  padding-bottom: 10px !important;
}
html body .profile-form.pl-personal-comfy .avatar-upload-wrap { margin-bottom: 14px !important; } /* [v5.11.154] ~4mm */

/* ---- 50. [v5.11.151b] Personal info cards: match Experience exactly ----
   The Personal tab sections now sit inside the same .entry-block cards
   the Experience tab uses (border, rounding, padding all inherited).
   Small polish scoped to the Personal tab only: comfortable card padding
   and the card heading styled like "Experience 1". */
html body .profile-form.pl-personal-comfy .entry-block {
  padding: 14px !important;        /* [v5.11.154] boundary gap ~4mm */
  margin-bottom: 14px !important;  /* [v5.11.154] card-to-card ~4mm */
}
html body .profile-form.pl-personal-comfy .entry-block h3 {
  font-size: 13px !important;
  font-weight:500 !important;
  color: #1f2937 !important;
  margin: 0 0 10px 0 !important; /* [v5.11.154] */
}


/* ---- 51. [v5.11.154] 3-4mm spacing cap, Personal tab ----
   Per direction: no gap between objects or from an object to its
   card boundary may exceed ~3-4mm (~12-15px). Cards, rows, labels
   and the last row inside each card are capped accordingly; the
   last element in a card sits 14px from the bottom border, not
   its own row margin + padding stacked. */
html body .profile-form.pl-personal-comfy .entry-block > .form-row:last-child,
html body .profile-form.pl-personal-comfy .entry-block > .form-row-half:last-child,
html body .profile-form.pl-personal-comfy .entry-block > .form-row-third:last-child { margin-bottom: 0 !important; }
html body .profile-form.pl-personal-comfy .entry-block > .form-row-half:last-child > .form-row,
html body .profile-form.pl-personal-comfy .entry-block > .form-row-third:last-child > .form-row { margin-bottom: 0 !important; }

/* ---- 52. [v5.11.157] Uniform field heights across profile tabs ----
   Per direction: every input and select on the profile tabs renders
   at the same 32px height, so rows line up regardless of tab.
   Textareas (Description, Bio, notes) are excluded and keep their
   content-fitted height. Checkboxes/radios/file pickers untouched. */
html body .profile-form .form-row input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
html body .profile-form .form-row select,
html body .profile-form .date-group input,
html body .profile-form .date-group select {
  height: 32px !important;
  line-height: normal !important;
  box-sizing: border-box !important;
}

/* [v5.11.205] Profile header banner: a wide strip with the avatar centered over it */
html body .entry-block.pl-photo-card { overflow: hidden; }
html body .pl-banner-strip { position: relative; width: 100%; height: 210px; border-radius: 8px; overflow: hidden; margin: 6px 0 0; line-height: 0; }
html body .pl-banner-strip .pl-banner-svg-holder { position: absolute; inset: 0; display: block; line-height: 0; }
html body .pl-banner-strip .pl-banner-svg-holder svg { width: 100% !important; height: 100% !important; display: block !important; }
html body .avatar-upload-wrap.pl-has-banner { margin-top: -185px; position: relative; z-index: 2; }
html body .avatar-upload-wrap.pl-has-banner .avatar-frame { box-shadow: none; }
html body .avatar-upload-wrap.pl-has-banner .avatar-preview { box-shadow: 0 0 0 4px #fff, 0 4px 14px rgba(0,0,0,0.25); }

/* [v5.16.32] Settings/Export/Blocked tabs hide Column 3 (Network/Jobs). Keep the full
   4-track grid (so the banner's columns still line up), stretch the centre across the
   empty Column 3, and PIN the clock/stats sidebar to Column 4 — the far right, directly
   under the HIGHLIGHTS banner cell. Explicit placement, so the 4th column is never left
   empty regardless of width. */
html body .dashboard-grid.no-users-panel .center-content { grid-column: 2 / 4 !important; min-width: 0; overflow-x: hidden; }
html body .dashboard-grid.no-users-panel .right-sidebar  { grid-column: 4 / 5 !important; }

/* [v5.16.31] The 4th sidebar (clock/stats) was hidden below 1200px, which also catches
   large screens running display scaling (125–175%) or a non-maximised window. Keep the
   full 4-column layout (and the right sidebar) down to ~993px. */
@media (min-width:993px) and (max-width:1200px){
  html body .dashboard-grid { grid-template-columns: 180px minmax(0,1fr) 190px 180px !important; }
  html body .dashboard-grid .right-sidebar { display: block !important; }
}

/* Below ~992px everything stacks into a single column — clear the explicit placement. */
@media (max-width:992px) and (pointer:coarse){
  html body .dashboard-grid.no-users-panel .center-content,
  html body .dashboard-grid.no-users-panel .right-sidebar { grid-column: auto !important; }
}

/* [v5.16.47] Justify long/paragraph text blocks where applicable — reading content only
   (not headings, buttons, labels, inputs or single-line UI). */
html body #acct-settings .info-box,
html body #acct-settings .info-box li,
html body #acct-settings .del-disclaimer,
html body #acct-settings .del-check label,
html body .center-content .post-content-full,
html body .center-content .cv-page p,
html body .center-content .cv-page li { text-align: justify; text-justify: inter-word; }

/* ══════════════════════════════════════════════════════════
   [v5.16.64] "Powered by www.purplelogin.com" watermark
   on the two right-hand dashboard panels.

   Same wording and same 45-degree tile as the CV import
   template, so the branding matches across the product.

   Applied as a BACKGROUND on the panel, not an overlay:
     - background-attachment:local makes it scroll with the
       panel's content, so it covers the whole scrollable
       height rather than just the first screenful. An
       absolutely-positioned overlay would scroll away.
     - It sits behind the widget cards, so it shows in the
       gaps, margins and empty space below the widgets and
       never sits over text.
     - No pointer-events concerns, nothing to click through.

   Only background-image is set. The panel's background
   COLOUR still comes from --col3-bg / --col4-bg, so the
   admin colour controls keep working.
   ══════════════════════════════════════════════════════════ */
.users-panel,
.right-sidebar {
    background-image: url('../img/pl-watermark.png');
    background-repeat: repeat;
    background-position: top center;
    background-attachment: local;
}

/* The tile is drawn for light panels. If the admin picks a dark canvas,
   lift it slightly so it does not disappear into the background. */
@media (prefers-color-scheme: dark) {
    .users-panel,
    .right-sidebar { background-blend-mode: screen; }
}

/* Full-width mode hides both panels; nothing to paint. */
.dashboard-grid.full-width-mode .users-panel,
.dashboard-grid.full-width-mode .right-sidebar { background-image: none; }

/* [v5.16.65] Composer Media / Poll buttons.
   These carried their styling inline, which meant the platform-wide button
   shape control could not reach them — they stayed square whatever the admin
   picked. Same look as before, now as a class so the shape system applies. */
.pl-composer-btn {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: transparent;
    border: none;
    cursor: pointer;
    font-size: 12px;
    font-weight:500;
    color: var(--c-primary, #5f5d58);
    padding: 4px 8px;
    white-space: nowrap;
}
.pl-composer-btn:hover { background: rgba(95,93,88, .07); }

/* ══════════════════════════════════════════════════════════
   [v5.16.66] Network / Jobs panel — match the feed's type

   The TYPEFACE was never different. style.css forces
   `font-family: var(--font-main)` with !important onto
   input, button, div, section and more, so the whole product
   is already Roboto. What made this panel look weaker than
   the feed was size, weight and fill:

     .up-tog-label   10px, weight normal, muted
     .pl-composer-btn (Media/Poll)   11px, weight 700

   Matched to the composer controls below. !important is
   required because the rules being corrected are themselves
   !important, and -webkit-text-fill-color has to be set
   alongside colour or it wins and the change does nothing.
   ══════════════════════════════════════════════════════════ */
.up-toggle-wrap .up-tog-label {
    font-family: var(--font-main) !important;
    font-size: 12px !important;          /* was 10px  — matches .pl-composer-btn */
    font-weight:500 !important;         /* was normal */
    letter-spacing: .01em !important;
    color: #4b5563 !important;           /* same as --c-text-muted; pinned so the weight change is not undone */
    -webkit-text-fill-color: #4b5563 !important;
}
.up-toggle-wrap .up-tog-label.active {
    color: #fff !important;
    -webkit-text-fill-color: #fff !important;
}

/* Search field: same size and colour as the composer's prompt text. */
.users-panel .up-search,
.up-search {
    font-family: var(--font-main) !important;
    font-size: var(--fs-sm, 12px) !important;
    font-weight: 400 !important;
    color: #1f2937 !important;
    -webkit-text-fill-color: #1f2937 !important;
}
.up-search::placeholder {
    color: #8b93a2 !important;
    -webkit-text-fill-color: #8b93a2 !important;
    opacity: 1;
}

/* [v5.16.80] The v5.16.73 BUTTON SAFETY NET was removed here.

   It forced pointer-events, cursor, visibility and — the damaging one —
   opacity:1 !important onto every button on the site. It was written to
   diagnose dead buttons in the profile, and the real cause turned out to be
   unrelated: a JS syntax error in experience.php, fixed in v5.16.74.

   The blanket opacity override then had a side effect. Anything that hides
   itself with opacity:0 and reveals itself with a class was forced permanently
   visible. The scroll-to-top button was the visible symptom — a grey blob
   parked in the bottom-right corner of every page — but the rule reached
   every toast and prompt built the same way.

   Scaffolding for a problem that no longer exists, causing problems of its
   own. Gone. */


/* ══════════════════════════════════════════════════════════
   [v5.16.89] Section-title underline on the profile tabs

   Matches the registration forms, where .reg-form-section-title
   carries the theme's own border-bottom. The profile tabs head
   each card with a plain <h3> and had no rule, so the two areas
   read differently.

   Declared once here rather than in each of the seven tab files,
   so it cannot drift the way the registration styles did.

   !important is genuinely needed: several of these headings are
   written as <h3 style="margin:0;"> in the markup, and an inline
   style beats a stylesheet rule without it. The JS that appends
   new rows emits the same inline style, so newly added entries
   pick this up too.
   ══════════════════════════════════════════════════════════ */
html body .entry-block > h3 {
    padding-bottom: 8px !important;
    margin: 0 0 14px 0 !important;
    border-bottom: 1px solid var(--c-border, #e5e7eb) !important;
    /* clear of the absolutely-positioned Remove button at top:10px */
    min-height: 20px;
}

/* ══════════════════════════════════════════════════════════
   [v5.16.92] Side panels: fit the content, not the viewport

   HEIGHT. .dashboard-grid is a grid and grid items stretch by
   default, so the left sidebar and the users panel were drawn
   full height whatever they contained — a bordered card with a
   large empty area beneath the last menu item. align-self:start
   sizes them to their content instead, and because that height
   is content-driven the card GROWS when a submenu opens and
   shrinks when it closes, with no JavaScript.

   max-height:100% keeps them inside the app shell, and
   overflow-y:auto means the scrollbar only appears when the
   content genuinely exceeds the space — previously it was
   overflow-y:scroll, reserving a gutter permanently.

   WIDTH. 200px existed to fit "RECRUITMENT DASHBOARD" on one
   line, since nav labels are white-space:nowrap with an
   ellipsis. Narrowed to 172px and the two long group labels are
   allowed to wrap onto a second line rather than being cut off.
   Submenu items are all far shorter and are unaffected.
   ══════════════════════════════════════════════════════════ */
html body { --col1-width: 172px; --col3-width: 187px; --col4-width: 187px; } /* [v5.17.47] +5mm sides for the 1710px shell */

html body .left-sidebar,
html body .users-panel {
    align-self: start !important;
    max-height: 100% !important;
    overflow-y: auto !important;
}

/* group headings may wrap; submenu links keep their single line */
html body .left-sidebar .nav-item > a {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    line-height: 1.35;
}
html body .left-sidebar .nav-submenu a {
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}

/* the profile name already wraps; keep it from forcing the column wider */
html body .left-sidebar .sidebar-username,
html body .left-sidebar .sidebar-name {
    word-break: break-word;
    overflow-wrap: anywhere;
}

/* ══════════════════════════════════════════════════════════
   [v5.16.92] Left sidebar: width hugs its text, height hugs
   its content.

   WIDTH. --col1-width was a flat 200px, so the column stayed
   that wide whatever was in it. It is now fit-content(200px):
   the track sizes to its widest content and stops at 200px.
   That matters because the widest label is not the same for
   everyone — a member sees "REGISTRATION" and "PURPLE ADMIN"
   (~150px), while a company account also sees "RECRUITMENT
   DASHBOARD" (~196px). A single hard number is either too wide
   for one or too tight for the other; this fits both.

   .nav-item a already carries white-space:nowrap, so the labels
   define the track honestly. The display name has to be allowed
   to break, otherwise a long one ("Alexandra Catherine
   Montgomery-Smith") would set max-content on its own and the column
   would never shrink.

   HEIGHT. [v5.16.104] .left-sidebar used align-self:start with
   height:auto so the panel hugged its menu. That was written before
   rule 14 (line ~441) gave every column a white card treatment —
   border, radius and shadow. Once the panel became a visible card,
   hugging its content made it stop short while .center-content, which
   keeps the grid default of stretch, still ran the full row. The
   canvas showing through that difference is the open gap under the
   menu, most obvious on tabs whose centre panel is tall and empty.

   [v5.16.131] REVERTED. v5.16.104 made it stretch to close the gap
   beside the Testing tab. That gap had a second and much larger cause
   — .plt-shell was measuring itself against 100vh and overshooting its
   own row by about 97px — which the same release fixed. With that gone
   the stretch was no longer buying anything, and it left the panel
   holding a tall block of empty white below the menu on every page.

   Back to hugging its content: the card ends where the menu ends, and
   grows only when a group is opened. max-height:100% keeps it inside
   the shell if every group is expanded at once, and overflow-y:auto
   means the scrollbar appears only when it is genuinely needed.
   ══════════════════════════════════════════════════════════ */
html body {
  --col1-width: fit-content(187px); /* [v5.17.47] grid TRACK sizing — legal in
     grid-template-columns, but a TYPE ERROR inside calc(): any calc()
     substituting this value is invalidated at computed-value time. */
  /* [v5.17.79] length-only companion for calc() consumers (the header pill's
     centring math). Same ceiling as the fit-content cap; whoever changes one
     changes both. NEVER feed --col1-width itself into calc(). */
  --pl-col1-len: 187px;
}

html body .left-sidebar {
    align-self: start !important;
    height: auto !important;
    max-height: 100% !important;
    overflow-y: auto !important;
    overflow-x: hidden !important;
}

/* let a long display name wrap instead of dictating the width */
html body .left-sidebar .sidebar-name {
    overflow-wrap: anywhere;
    white-space: normal;
}

/* the avatar must not hold the column open either */
html body .left-sidebar .sb-avatar-img { max-width: 100%; }

/* ══════════════════════════════════════════════════════════
   [v5.16.93] One look for the Add and Save buttons on every
   profile tab.

   They were styled by .btn-row, which only exists in 4 of the
   11 tabs (certification, experience, university, school).
   Everywhere else the buttons fell through to the global
   button{} rule in style.css, which forces
   background-color:var(--c-btn) and color:white with
   !important — the grey pills. personal.php went further and
   styled its Save inline.

   Targeted by behaviour rather than by class, because these
   buttons have no shared class to hook:
       Add   -> onclick begins "add...Entry"  (10 buttons)
       Save  -> type=submit, or .save-btn     (11 buttons)
   Both patterns verified against every profile tab before
   this rule was written.

   !important is unavoidable: the global button rule uses it,
   and personal.php's Save carries an inline style, which only
   an !important declaration can override. -webkit-text-fill-
   color is set alongside every colour, since that property
   beats colour outright and the theme uses it widely.

   .cvs-btn is excluded — the CV/Summary tab has its own
   deliberate button treatment.
   ══════════════════════════════════════════════════════════ */

/* shared metrics */
html body .profile-form button[onclick^="add"],
html body .profile-form button[type="submit"]:not(.cvs-btn),
html body .profile-form .save-btn,
html body .profile-form .reg-submit {
    padding: 5px 12px !important;
    font-size: 12px !important;
    font-weight:500 !important;
    line-height: 1.45 !important;
    width: auto !important;
    height: auto !important;
    font-family: inherit !important;
    cursor: pointer !important;
    box-shadow: none !important;
}

/* "+ Add ..." — outlined, secondary */
html body .profile-form button[onclick^="add"] {
    background: #fff !important;
    background-color: #fff !important;
    color: #1f2937 !important;
    -webkit-text-fill-color: #1f2937 !important;
    border: 1px solid #ccc !important;
}
html body .profile-form button[onclick^="add"]:hover {
    background: #f3f4f6 !important;
    background-color: #f3f4f6 !important;
    border-color: #b8b1c6 !important;
}

/* "Save ..." — primary */
/* [v5.16.94] .reg-submit added: the registration Save is a type="button"
   with onclick="saveCompanyReg()", so it matched none of the patterns above
   and would have stayed grey beside the now-purple profile Saves. */
html body .profile-form button[type="submit"]:not(.cvs-btn),
html body .profile-form .save-btn,
html body .profile-form .reg-submit {
    background: var(--c-primary, #5f5d58) !important;
    background-color: var(--c-primary, #5f5d58) !important;
    color: #fff !important;
    -webkit-text-fill-color: #fff !important;
    border: 1px solid var(--c-primary, #5f5d58) !important;
}
html body .profile-form button[type="submit"]:not(.cvs-btn):hover,
html body .profile-form .save-btn:hover,
html body .profile-form .reg-submit:hover {
    background: var(--c-primary-dark, #3f3d39) !important;
    background-color: var(--c-primary-dark, #3f3d39) !important;
    border-color: var(--c-primary-dark, #3f3d39) !important;
}

/* ══════════════════════════════════════════════════════════
   [v5.16.96] The last card headings without the underline.

   Audited every section heading across Network, Discover,
   Community, Purple Admin and Settings. Almost all already
   carry their own treatment and were left alone:

     underlined already   .adm-sh  .cz-title  .cm-head
                          .gm-sb-hdr  .gm-chat-hdr  .rd-hd
                          .fjd-section-title  .adm-drill-hd
                          .privacy-card-header
     purple filled bar    .acc-sec-head  .pr-sec-title
                          .mbx-set-hd
                          (a stronger treatment than a rule —
                           adding one would be noise)

   Only four headings were genuinely bare, and they are the
   ones on screen in Settings > Account:

     Email Diagnostics (Admin Only)   settings-account.php
     Two-Factor Authentication        settings-account.php
     Write a Company Review           company-reviews.php
     Share Your Salary                company-reviews.php

   Same values as .reg-form-section-title and .entry-block h3,
   so all three areas now match.
   ══════════════════════════════════════════════════════════ */
html body .pl-sec-card > h3,
html body .nf-2fa > h3,
html body .cr-form-title {
    padding-bottom: 8px !important;
    margin: 0 0 14px 0 !important;
    border-bottom: 1px solid var(--c-border, #e5e7eb) !important;
}


/* ============================================================
   ---- 48. [v5.16.148] POST DOTS MENU: HORIZONTAL ----
   ============================================================
   The menu was display:block, so its items stacked vertically and
   the panel grew downward over the post content. Two or three icon
   buttons in a column is a lot of vertical travel for very little
   choice.

   Now a row. right:0 was already on .post-dropdown, so with the
   items laid out horizontally the panel grows LEFTWARD from the
   button's right edge — away from the card edge, which is where
   the space is. top:100% keeps it just under the dots.

   Nothing here changes what is in the menu; only how it lays out.
   ============================================================ */
/* [v5.16.152] The open class differs by page, and the page rules carry an ID:
     Feed         .post-dropdown.active                    (0,2,0)
     Engagements  #engagements-page .post-dropdown.show     (1,2,0)
     Community    #community-page .post-dropdown.show       (1,2,0)
   v5.16.148 only wrote .post-dropdown.show at (0,2,2) — it never matched the
   Feed, and it lost to the other two on the ID. So the menu stayed
   display:block while the 26px item sizing below DID apply, stacking the
   items vertically inside overflow:hidden and clipping Delete and the feed
   link out of view. All four selectors are listed now. */
html body .post-dropdown.show,
html body .post-dropdown.active,
html body #engagements-page .post-dropdown.show,
html body #community-page .post-dropdown.show {
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    gap: 2px !important;
    white-space: nowrap !important;
    width: max-content !important;
    min-width: 0 !important;
    overflow: visible !important;   /* .post-dropdown sets overflow:hidden */
}

html body .post-dropdown .dropdown-item {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 26px !important;
    height: 26px !important;
    padding: 0 !important;
    flex: 0 0 auto !important;
}

/* ============================================================
   ---- 49. [v5.16.156] Right sidebar: every widget an
        independent card ----
   ============================================================
   The sidebar pieces read as one merged column: the clock floats
   bare with no frame, Profile Progress hugs the stats card at a
   6px gap, and corner treatment differs block to block. Every
   direct child of .right-sidebar now gets the same card frame —
   white ground, 1px border, the 3px house radius, and a uniform
   10px gap — so the clock, notifications, progress ring, stats,
   job activity and the rest sit as clearly separate,
   self-contained blocks.
   At (0,1,3) this out-ranks the widgets' own class rules
   (.pc-card/.sw-card/.notif-dashboard at (0,1,0)) with no
   !important, wherever each is printed. Internal padding of each
   widget is deliberately untouched. */
/* [v5.16.157] The column itself painted a ground behind the cards
   (--col4-bg by default; the v5.11.1 "panels stay locked white"
   rule at (0,2,2)!important on the default theme), so the whole
   sidebar still read as ONE big rectangle enclosing the cards. Per
   direction, only the independent card rectangles carry a ground —
   the RIGHT sidebar panel is now transparent and the canvas shows
   through between cards. Deliberately revises v5.11.1 for this one
   panel; left sidebar / center / users-panel stay locked white.
   The second selector matches the white lock's (0,2,2)+!important
   and sits later in this file, so it wins on the default theme; the
   first covers the alternate themes. background-COLOR longhand
   only, so the watermark background-image layer is untouched. */
html body .right-sidebar,
html body:not([data-theme]) .right-sidebar {
  background-color: transparent !important;
  /* [v5.16.158] The "panels float free" section frames every panel
     with a 1px border + purple-tinted shadow — on this column that
     kept drawing the enclosing rectangle even after the ground went
     transparent. Per the standing rule the column carries NO frame
     of its own; only the child cards do. Same specificity as the
     source rule, later in the file, so no !important escalation. */
  border: none;
  box-shadow: none;
}
html body .right-sidebar > div {
  background: var(--c-bg-white, #fff);
  border: 1px solid var(--c-border, #e5e7eb);
  /* [v5.16.160] followed the "Cards" slider; [v5.17.72] moved to the
     SIDE PANELS slider per direction — these widget boxes belong to the
     column, not to content cards. 3px house default when no value is
     saved. */
  border-radius: var(--pl-r-panels, 3px);
  margin: 0 0 10px 0;
  overflow: hidden;
}
/* visual-polish gives .notif-dashboard its own near-invisible
   rgba(0,0,0,0.05) border with !important — part of why the
   notifications block blends into the page. Matched to the same
   frame as its siblings; !important is needed to out-rank
   visual-polish's !important, and refinements loads after it. */
html body .right-sidebar > .notif-dashboard {
  border: 1px solid var(--c-border, #e5e7eb) !important;
}

/* ============================================================
   ---- 50. [v5.16.162] Beautiful, centred confirm dialog ----
   ============================================================
   The gm-* mini dialog (delete-post confirm and friends) was a
   flat white rectangle with tight text. Reparenting to <body>
   in JS fixes the off-centre drift (a transformed ancestor was
   re-basing its position:fixed); this section gives it a modern
   look. All selectors carry html body for rank over the base
   gm-* rules in style.css; nothing here is !important beyond the
   button colours that must beat the base .gm-btn !important. */

/* Dim + blur the page behind, and fade the whole overlay in. */
html body .gm-overlay {
  background: rgba(17, 24, 39, 0.55);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  padding: 20px;
}
html body .gm-overlay.active {
  display: flex;
  animation: plGmFade 0.18s ease;
}
@keyframes plGmFade { from { opacity: 0; } to { opacity: 1; } }

/* The card: rounded, elevated, roomy, with a scale-in. */
html body .gm-overlay .gm-box {
  /* [v5.16.163] narrower per direction, and a clearly visible
     boundary line instead of the near-invisible 4%-black hairline.
     Fixed width (the box is free-positioned now, so it must not
     depend on the flex parent) capped to the viewport on phones. */
  width: 320px;
  max-width: calc(100vw - 32px);
  padding: 24px 24px 20px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.28),
              0 2px 8px rgba(0, 0, 0, 0.12);
  border-radius: var(--pl-r-modals, 14px); /* [v5.16.165] follows Dialogs slider */
  border: 1.5px solid var(--c-border, #d1d5db);
  animation: plGmPop 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes plGmPop {
  from { opacity: 0; transform: translateY(8px) scale(0.96); }
  to   { opacity: 1; transform: translateY(0)   scale(1);    }
}

/* Icon badge — a soft red disc for destructive confirms. */
html body .gm-overlay .gm-icon {
  display: flex !important;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  margin: 0 auto 14px;
  border-radius: 50%;
  background: rgba(220, 53, 69, 0.10);
  color: var(--c-danger, #dc3545);
  font-size: 24px;
}

/* Message — larger, calmer, with a little breathing room. */
html body .gm-overlay .gm-msg {
  font-size: 15.5px;
  font-weight:500;
  line-height: 1.5;
  color: var(--c-text-primary, #1f2937);
  margin-bottom: 22px;
}

/* Buttons — full-size, rounded, clear hierarchy. */
html body .gm-overlay .gm-btns {
  gap: 12px;
}
html body .gm-overlay .gm-btn {
  flex: 1;
  max-width: 150px;
  padding: 11px 18px !important;
  font-size: 14px !important;
  font-weight:500 !important;
  border-radius: 9px !important;
  transition: transform 0.08s ease, filter 0.15s ease !important;
}
html body .gm-overlay .gm-btn:hover { filter: brightness(1.05); }
html body .gm-overlay .gm-btn:active { transform: translateY(1px); }

/* Destructive "yes" keeps the danger fill but full-weight now. */
html body .gm-overlay .gm-btn.yes {
  background: var(--c-danger, #dc3545) !important;
  box-shadow: 0 2px 8px rgba(220, 53, 69, 0.30) !important;
}
/* Cancel — quiet neutral with a visible outline, not a grey slab. */
html body .gm-overlay .gm-btn.no {
  background: #fff !important;
  color: var(--c-text-secondary, #4b5563) !important;
  -webkit-text-fill-color: var(--c-text-secondary, #4b5563) !important;
  border: 1px solid var(--c-border, #d1d5db) !important;
}
html body .gm-overlay .gm-btn.no:hover {
  background: var(--c-bg-muted, #f9fafb) !important;
}

/* [v5.16.169] The other (static) image lightbox backdrop was
   rgba(0,0,0,0.95) — same faint see-through. Fully opaque to match
   #pl-lightbox, so no viewer lets the page ghost through. */
html body .lightbox { background: rgb(0, 0, 0); }

/* ============================================================
   ---- 51. [v5.16.171] Static image viewer: comments panel ----
   ============================================================
   Option A — the zoom/rotate viewer (.lightbox) now shows the
   post's comments in a panel on the right, alongside the image,
   with rounded corners on both regions. Backdrop already opaque
   black (section earlier). Scoped to .lightbox so the other
   viewer is untouched. */
html body .lightbox {
  /* [v5.16.172] center the row so the image and the comments panel
     sit next to each other with only a small gap — no dead black
     space between them.
     [v5.16.175] gap tightened to the approved 5mm (same as the other
     viewer). */
  display: none;
  justify-content: center;
  align-items: center;
  gap: 5mm;
  padding: 18px;
  box-sizing: border-box;
}
html body .lightbox.active { display: flex; }
html body .lightbox .lightbox-viewport {
  /* size to the image, not the whole row, so it doesn't push the
     panel away. Caps keep it from crowding the panel. */
  flex: 0 1 auto;
  width: auto; height: auto;
  max-width: calc(100vw - 340px - 60px);
  max-height: calc(100vh - 36px);
  border-radius: 14px;
  background: #000;
  /* [v5.16.176] positioning context for the zoom/rotate controls */
  position: relative;
}
/* [v5.16.176] controls now live inside the viewport, so they are
   centred on the IMAGE (not the screen) and ride its bottom edge.
   Scoped to #lightbox — the community and profile lightboxes keep
   the old screen-anchored bar. */
html body #lightbox .lightbox-viewport .lightbox-controls {
  position: absolute;
  bottom: 12px; left: 50%; transform: translateX(-50%);
  display: flex; gap: 6px; z-index: 6;
}
html body #lightbox .lightbox-viewport .lightbox-controls button {
  background: rgba(0,0,0,0.45);
  border: 1px solid rgba(255,255,255,0.35);
  border-radius: 50%;
}
html body #lightbox .lightbox-viewport .lightbox-controls button:hover {
  background: rgba(0,0,0,0.7);
}
/* [v5.16.180] VIDEO SUPPORT in the same viewer. The video swaps in for
   the img and obeys the same caps, so the comments panel height-match
   works unchanged. Zoom/rotate bar hides — native controls do that job
   (and would fight the transform anyway). */
html body #lightbox .lightbox-viewport video {
  display: block;
  max-width: 100%;
  max-height: calc(100vh - 36px);
  border-radius: 4px;
  box-shadow: 0 8px 40px rgba(0,0,0,0.5);
  background: #000;
}
html body #lightbox.lb-video-mode .lightbox-controls { display: none; }
/* the ⛶ expand button riding each feed video's top-right corner */
html body .post-media-item { position: relative; }
html body .post-media-item .pl-video-expand {
  position: absolute; top: 8px; right: 8px; z-index: 2;
  width: 30px; height: 30px; border-radius: 50%;
  background: rgba(0,0,0,0.45); color: #fff;
  border: 1px solid rgba(255,255,255,0.35);
  font-size: 15px; line-height: 1; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
html body .post-media-item .pl-video-expand:hover { background: rgba(0,0,0,0.7); }
html body .lightbox .lightbox-comments-toggle {
  flex: 0 0 auto;
  width: 30px; height: 54px;
  border: none;
  border-radius: 8px;
  background: rgba(255,255,255,0.14);
  color: #fff;
  font-size: 22px; line-height: 1;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background 0.15s ease;
}
html body .lightbox .lightbox-comments-toggle:hover { background: rgba(255,255,255,0.28); }
html body .lightbox .lightbox-comments {
  flex: 0 0 340px;
  max-width: 92vw;
  /* [v5.16.175] no longer a full-height stretched slab: the panel's
     height is set at runtime to the image's rendered height
     (lbSyncPanel), so it starts where the image starts and ends where
     it ends. box-sizing makes that height include padding + border;
     longer comment lists scroll inside. */
  box-sizing: border-box;
  max-height: calc(100vh - 36px);
  background: #fff;
  border: 1px solid var(--c-border, #e5e7eb);
  border-radius: 16px;
  overflow-y: auto;
  padding: 14px;
  display: flex;
  flex-direction: column;
}
/* [v5.16.183] TWO-STATE LAYOUT (supersedes the .179 preserved-slot +
   .182 ghost fix — display:none makes ghosts impossible anyway):
   comments VISIBLE  -> side-by-side arrangement (caps above);
   comments HIDDEN   -> the media takes the FULL SCREEN, and the ‹
   button floats at the right edge. Hovering the right edge of the
   screen re-opens the comments (see mousemove wiring in the JS). */
html body .lightbox.comments-hidden .lightbox-comments { display: none; }
html body .lightbox.comments-hidden { padding: 0; gap: 0; }
html body .lightbox.comments-hidden .lightbox-viewport {
  max-width: 100vw;
  max-height: 100vh;
  border-radius: 0;
}
html body .lightbox.comments-hidden .lightbox-viewport img,
html body .lightbox.comments-hidden .lightbox-viewport video {
  max-height: 100vh;
  border-radius: 0;
}
html body .lightbox.comments-hidden .lightbox-comments-toggle {
  position: fixed;
  right: 8px; top: 50%; transform: translateY(-50%);
  z-index: 8;
  background: rgba(0,0,0,0.45);
  border: 1px solid rgba(255,255,255,0.35);
}
/* each comment thread its own rounded card, latest first */
html body .lightbox .lightbox-comments .comments-list {
  display: flex;
  flex-direction: column-reverse;
  gap: 10px;
}
html body .lightbox .lightbox-comments .comments-list > .comment-item {
  background: var(--c-bg-white, #fff);
  border: 1px solid var(--c-border, #e5e7eb);
  border-radius: var(--pl-r-cards, 12px);
  padding: 10px 12px;
  margin: 0;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04);
}
html body .lightbox .lightbox-comments .comments-section {
  padding: 0 !important; margin: 0 !important; border-top: none !important;
}
/* keep the zoom/nav controls above the panel
   ([v5.16.175] .lightbox-close removed — button no longer exists) */
html body .lightbox .lightbox-controls,
html body .lightbox .lightbox-counter,
html body .lightbox .lightbox-nav { z-index: 5; }
/* On phones stack image over comments ([v5.16.175] runtime height
   match is skipped by the JS and overridden here as backstop;
   [v5.16.179] stacked layout collapses the hidden panel fully —
   image stability matters on desktop, a 42% blank band does not) */
@media (max-width: 768px) {
  html body .lightbox { flex-direction: column; }
  html body .lightbox .lightbox-comments { flex: 0 0 42%; max-width: none; height: auto !important; }
  html body .lightbox.comments-hidden .lightbox-comments { display: none; visibility: visible; }
}
/* [v5.16.179] keep the viewer above EVERYTHING, including the fixed
   site header (base z-index 10000 lost to a stacking-context trap
   when an ancestor carries a transform; re-parenting to <body> in
   openLightbox is the real fix, this is the belt to those braces). */
html body .lightbox { z-index: 2147483000; }


/* ---- [v5.16.192] Post action strip: monochrome everywhere ----
   (.191's always-visible row reverted to the ⋮ toggle per direction.)
   Every icon in the dots strip — edit, delete, view-in-feed — renders
   plain black-and-white; no red, no fills. */
html body .post-dropdown .dropdown-item,
html body .post-dropdown .dropdown-item svg,
html body .post-dropdown .dropdown-item.delete,
html body .post-dropdown .dropdown-item.delete svg {
  color: var(--c-text-primary, #000) !important;
  -webkit-text-fill-color: var(--c-text-primary, #000) !important;
  stroke: var(--c-text-primary, #000) !important;
}

/* ---- [v5.16.194] Dots strip: BULLETPROOF visibility ----
   Symptom: the open strip showed only the Edit pencil, with Delete and
   View-in-feed present in the layout (the gap proved it) but painted
   invisible — a stroke/fill/visibility rule (theme or saved style
   settings) blanking the SVG internals. This block outranks anything:
   the open strip becomes a white pill with borders and real padding,
   every item gets a uniform 26px hit area, and the icon SVGs AND THEIR
   CHILD SHAPES (path/line/polyline/circle/rect) are forced to stroke
   dark, fill none, fully opaque and visible. */
html body .post-dropdown.active {
  /* [v5.16.330] pill box removed per request (see shared-post-components.php
     inline copy) — icons sit bare inside the unified header box. */
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  overflow: visible !important;
}
html body .post-dropdown .dropdown-item,
html body .post-dropdown a.dropdown-item {
  /* [v5.16.198] icon-only again per direction
     [v5.16.201] flex-basis clamp mirrors the inline copy */
  flex: 0 0 26px !important;
  width: 26px !important; min-width: 26px !important; max-width: 26px !important; height: 26px !important;
  display: inline-flex !important;
  align-items: center !important; justify-content: center !important;
  padding: 0 !important; margin: 0 !important;
  text-decoration: none !important;
  color: #111827 !important; -webkit-text-fill-color: #111827 !important;
  opacity: 1 !important; visibility: visible !important;
}
/* [v5.16.198] ANTI-CLIP INSURANCE: the strip opens leftward as an
   absolute pill; any ancestor with overflow:hidden (the base
   .post-card carries one) can slice it so only the item nearest the
   dots survives — the exact asymmetry seen between the two pages.
   Every ancestor in the strip's path is forced overflow:visible; the
   card's media does its own clipping (.post-media overflow:hidden),
   so nothing is lost. */
html body .post-header,
html body .post-actions-menu,
html body .post-card {
  overflow: visible !important;
}
html body .post-dropdown .dropdown-item svg {
  display: inline-block !important;
  width: 14px !important; height: 14px !important;
  margin: 0 !important;
  opacity: 1 !important; visibility: visible !important;
  stroke: #111827 !important; fill: none !important;
}
html body .post-dropdown .dropdown-item svg path,
html body .post-dropdown .dropdown-item svg line,
html body .post-dropdown .dropdown-item svg polyline,
html body .post-dropdown .dropdown-item svg polygon,
html body .post-dropdown .dropdown-item svg circle,
html body .post-dropdown .dropdown-item svg rect {
  stroke: #111827 !important; fill: none !important;
  opacity: 1 !important; visibility: visible !important;
  display: initial !important;
}

/* ---- [v5.16.196] Engagement posts: media FULL-BLEED like the feed ----
   The feed's .post-media pulls itself over the card padding with
   margin: 8px -14px (edge-to-edge media, the look in the reference
   screenshot). #engagements-page .post-media overrode that with
   margin: 8px 0, insetting the media and making the whole post read
   smaller. This restores the feed geometry on the engagements page. */
html body #engagements-page .post-media {
  margin: 8px -14px !important;
  border-top: 1px solid #e0e0e0 !important;
  border-bottom: 1px solid #e0e0e0 !important;
  border-radius: 0 !important;
  overflow: hidden !important;
}

/* ---- [v5.16.197] Post media sizing: ONE rule set for every page ----
   The feed carried these as page-inline overrides (network-feed.php),
   so only the feed got 500px-tall zero-padding media while the
   engagements page fell back to the base 350px + 10px padding rules —
   the true cause of "engagement posts look smaller". Promoted here to
   the shared layer: identical media geometry wherever a .post-card
   renders. */
html body .post-card .post-media { flex-shrink: 0; overflow: hidden; min-height: 0; }
html body .post-card .post-media-grid { height: 100%; }
html body .post-card .post-media-item {
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  padding: 0 !important;
}
html body .post-card .post-media-item img {
  /* [v5.16.204] WIDTH-FIRST: every image fills the card edge to edge
     (portrait included) and the post's height follows dynamically.
     85vh cap so one tall screenshot can't swallow three screens. */
  width: 100% !important; height: auto !important;
  max-width: 100% !important; max-height: 85vh !important;
  object-fit: contain !important; display: block !important;
}
html body .post-card .post-media-item video {
  width: 100% !important; max-height: 85vh !important;
  object-fit: contain !important;
}

/* ---- [v5.16.199] Strip glyphs: plain text characters ----
   ✎ 🗑︎ ↗ replace the SVG icons — a character participates in no
   stroke/fill pipeline and cannot be blanked. Text-presentation is
   forced (no colour emoji), size and colour hard-set. */
html body .post-dropdown .ddi-glyph {
  font-size: 15px !important;
  line-height: 1 !important;
  font-family: "Segoe UI Symbol", "Noto Sans Symbols", system-ui, sans-serif !important;
  color: #111827 !important;
  -webkit-text-fill-color: #111827 !important;
  font-variant-emoji: text;
  display: inline-block !important;
  opacity: 1 !important; visibility: visible !important;
}

/* ---- [v5.16.202] Header-first posting layout ----
   Per direction: posting moves to the HEADER (see header.php), so the
   in-feed composer card — including its Media and Poll buttons — is
   HIDDEN, not removed: every line of composer/media/poll code stays in
   the program, ready to return by deleting this rule. The centre
   column tightens to the post width and every post fills it, height
   dynamic to content. */
html body .create-post-card { display: none !important; }
html body .feed-container.profile-form {
  /* [v5.16.203] FULL COLUMN: the 700px cap left dead gaps either side
     (the X-marked areas). The feed now fills its column edge to edge;
     posts already fill 100% of it. */
  max-width: none !important;
  width: 100% !important;
  margin: 0 !important;
}
html body .feed-container .post-card { width: 100% !important; }
/* [v5.16.203] vertical tightening: less dead space above and between */
html body .feed-container .pl-page-head { margin: 0 0 var(--pl-gap-tight, 3px) !important; } /* [v5.16.336] was 4px 0 8px — the literal 8px was the real feed-header-to-post gap; tightened at source */
html body .feed-container .post-card { margin-bottom: 8px !important; }

/* ---- [v5.16.206] Header anchoring (mirror of the header.php inline
   copy; also covers logged-out pages where the inline block, being
   inside the composer conditional, does not print) ---- */
html body .site-header { justify-content: flex-start !important; padding-left: calc((100% - min(var(--container-width, 100%), var(--container-max-width, 100vw))) / 2) !important; padding-right: calc((100% - min(var(--container-width, 100%), var(--container-max-width, 100vw))) / 2) !important; } /* [v5.16.207] container-matched gutters */
html body .site-header .hdr-composer { margin-left: auto !important; margin-right: auto !important; } /* [v5.17.72] both autos: centred pill */
html body .site-header .header-nav { margin-left: auto !important; }

/* ============================================================
   ---- 57. [v5.16.223] MEDIA FIXED CENTER in the viewer ----
   ============================================================
   The comments panel was a flex SIBLING of the media, so opening
   it (including the auto-open when the mouse nears the right
   edge) pushed the media left, and closing it rolled the media
   back — the "rollover" the user circled. Now the panel is an
   OVERLAY floating above the right side: the media is centered
   in the full viewport and NEVER moves, panel open or closed. */
html body .lightbox { gap: 0; padding: 12px; }
html body .lightbox .lightbox-viewport {
  max-width: calc(100vw - 24px);
  max-height: calc(100vh - 24px);
}
html body .lightbox .lightbox-comments {
  position: fixed;
  right: 52px; top: 50%; transform: translateY(-50%);
  width: 340px;
  z-index: 9;
  box-shadow: 0 12px 40px rgba(0,0,0,0.45);
}
html body .lightbox .lightbox-comments-toggle {
  position: fixed;
  right: 8px; top: 50%; transform: translateY(-50%);
  z-index: 10;
  background: rgba(0,0,0,0.45);
  border: 1px solid rgba(255,255,255,0.35);
}

/* ============================================================
   ---- 58. [v5.16.228] ADAPTIVE CONTAINER for standard screens ----
   ============================================================
   The container was a fixed 70% at every size — correct on 1920+
   but starving the feed on smaller standard screens. Width now
   adapts per tier (height already adapts: the page scrolls with
   the viewport and post media scales by --post-media-ratio):

     >=1920 (full desktop) ......... 70%  (approved look, unchanged)
     1440-1919 (laptops/scaled) .... 80%
     1200-1439 (small laptops) ..... 90%
     993-1199 (compact/125% scale) . 98%  (pairs with the narrow-
                                          column grid tier)
     <=992 ......................... 100% (stacked mobile layout)

   The header follows automatically: its closed-loop alignment
   re-measures .dashboard-center on every load and resize. */
@media (min-width:1440px) and (max-width:1919px){
  html body { --container-width: 80%; }
}
@media (min-width:1200px) and (max-width:1439px){
  html body { --container-width: 90%; }
}
@media (min-width:993px) and (max-width:1199px){
  html body { --container-width: 98%; }
}
@media (max-width:992px) and (pointer:coarse){
  html body { --container-width: 100%; }
}

/* ============================================================
   ---- 59. [v5.16.231] Stable dialog + corner zoom controls ----
   ============================================================
   a) The delete/confirm dialog appeared right-of-centre and slid
      in: plGmPop ANIMATES transform, which overrides the box's
      inline translate(-50%,-50%) during the animation — so the
      box renders offset right for 0.2s, then snaps. Fade-only
      now; the box appears already in place, perfectly stable.
   b) The viewer's zoom/rotate controls move OFF the image to the
      WINDOW's bottom-left corner (fixed), per direction. */
html body .gm-overlay .gm-box {
  animation: plGmBoxFade 0.15s ease;
}
@keyframes plGmBoxFade { from { opacity: 0; } to { opacity: 1; } }
html body #lightbox .lightbox-viewport .lightbox-controls {
  position: fixed;
  left: 12px;
  bottom: 12px;
  top: auto;
  right: auto;
  transform: none;
  z-index: 11;
}

/* ============================================================
   ---- 60. [v5.16.232] COMPACT confirm dialog + button rule ----
   ============================================================
   STANDING RULE (per direction, applies to all future buttons):
   button text padding max 2mm (~7px) top/bottom and max 5mm
   (~18px) left/right. Dialog itself compacted: narrower box,
   tighter paddings, smaller icon and message. */
html body .gm-overlay .gm-box {
  width: 250px;
  padding: 14px 14px 12px;
}
html body .gm-overlay .gm-icon {
  width: 34px;
  height: 34px;
  margin: 0 auto 8px;
  font-size: 16px;
}
html body .gm-overlay .gm-msg {
  font-size: 13px;
  line-height: 1.4;
  margin-bottom: 12px;
}
html body .gm-overlay .gm-btns { gap: 8px; }
html body .gm-overlay .gm-btn {
  padding: 7px 18px !important;   /* 2mm / 5mm rule */
  font-size: 12.5px !important;
  border-radius: 7px !important;
  max-width: 120px;
}

/* ============================================================
   ---- 61. [v5.16.233] Viewer: info panel, thread nav, solo ----
   ============================================================
   a) POST NAV: "Previous post / Next post" at the top corners,
      2mm/5mm button rule, jumps between posts that have media.
   b) INFO PANEL: post author/time/text/counts floats over the
      LEFT side (mirror of the comments overlay), with its own
      edge toggle. Visible by default; media never moves.
   c) ZOOM TOOLS moved from the window corner to just BELOW the
      image, LEFT corner (per direction, supersedes section 59b);
      the fullscreen button sits just below the image, RIGHT
      corner. Fullscreen (solo) = image only: every overlay is
      hidden and the viewer goes native-fullscreen. */
html body .lb-post-nav {
  position: fixed;
  top: 14px;
  z-index: 12;
  background: rgba(255,255,255,0.14);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.35);
  border-radius: 7px;
  padding: 7px 18px;      /* 2mm / 5mm rule */
  font-size: 12.5px;
  font-weight:500;
  cursor: pointer;
}
html body .lb-post-nav:hover { background: rgba(255,255,255,0.28); }
html body .lb-post-prev { left: 14px; }
html body .lb-post-next { right: 14px; }
html body .lightbox-info-toggle {
  position: fixed;
  left: 8px; top: 50%; transform: translateY(-50%);
  z-index: 10;
  width: 30px; height: 54px;
  border: 1px solid rgba(255,255,255,0.35);
  border-radius: 8px;
  background: rgba(0,0,0,0.45);
  color: #fff;
  font-size: 22px; line-height: 1;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
html body .lightbox-info {
  position: fixed;
  left: 52px; top: 50%; transform: translateY(-50%);
  width: 300px;
  max-width: 88vw;
  max-height: 80vh;
  overflow-y: auto;
  background: #fff;
  border-radius: 16px;
  padding: 14px;
  z-index: 9;
  box-shadow: 0 12px 40px rgba(0,0,0,0.45);
  box-sizing: border-box;
}
html body .lightbox.info-hidden .lightbox-info { display: none; }
html body .lightbox-info .lbi-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
html body .lightbox-info .lbi-avatar { width: 38px; height: 38px; border-radius: 50%; object-fit: cover; }
html body .lightbox-info .lbi-name { font-weight:500; font-size: 13.5px; color: #111827; }
html body .lightbox-info .lbi-time { font-size: 12px; color: #6b7280; }
html body .lightbox-info .lbi-text { font-size: 13px; line-height: 1.5; color: #1f2937; text-align: justify; margin-bottom: 10px; max-height: 40vh; overflow-y: auto; }
html body .lightbox-info .lbi-meta { font-size: 12px; color: #6b7280; border-top: 1px solid #e5e7eb; padding-top: 8px; }
html body #lightbox .lightbox-viewport .lightbox-controls {
  position: absolute;
  left: 0; top: 100%;
  bottom: auto; right: auto;
  margin-top: 6px;
  transform: none;
  z-index: 11;
}
html body .lb-fullscreen-btn {
  position: absolute;
  right: 0; top: 100%;
  margin-top: 6px;
  z-index: 11;
  width: 30px; height: 30px;
  border-radius: 50%;
  background: rgba(0,0,0,0.45);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.35);
  font-size: 14px; line-height: 1;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
html body .lb-fullscreen-btn:hover { background: rgba(0,0,0,0.7); }
html body #lightbox.lb-video-mode .lb-fullscreen-btn { display: none; }
/* SOLO fullscreen: the image and nothing else */
html body .lightbox.lb-solo .lb-post-nav,
html body .lightbox.lb-solo .lightbox-info,
html body .lightbox.lb-solo .lightbox-info-toggle,
html body .lightbox.lb-solo .lightbox-comments,
html body .lightbox.lb-solo .lightbox-comments-toggle,
html body .lightbox.lb-solo .lightbox-controls,
html body .lightbox.lb-solo .lightbox-counter,
html body .lightbox.lb-solo .lightbox-nav { display: none !important; }

/* ============================================================
   ---- 62. [v5.16.235] Side-by-side viewer: NOTHING overlaps ----
   ============================================================
   New layout per direction: ONE fixed right window (340px, full
   height) with Comments / Information tab buttons; the media gets
   every remaining pixel, centered in its own zone; no window ever
   overlaps another. Supersedes the overlay panels of 57/61a-b.
   Solo fullscreen still gives the image the whole screen. */
html body .lightbox { padding: 0; gap: 0; align-items: stretch; justify-content: flex-start; }
html body .lightbox .lightbox-viewport {
  flex: 1 1 auto;
  width: auto;
  max-width: none;
  height: 100vh;
  max-height: 100vh;
  border-radius: 0;
  background: transparent;
  display: flex;
  align-items: center;
  justify-content: center;
}
html body #lightbox .lightbox-viewport img,
html body #lightbox .lightbox-viewport video {
  max-width: calc(100% - 24px);
  max-height: 94vh;
}
html body .lightbox .lightbox-comments {
  position: static;
  transform: none;
  flex: 0 0 340px;
  width: 340px;
  height: 100vh !important;
  max-height: 100vh;
  border-radius: 0;
  box-shadow: none;
  border-left: 1px solid #e5e7eb;
  display: flex;
  flex-direction: column;
  padding: 0;
}
html body .lightbox .lb-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid #e5e7eb;
  flex: 0 0 auto;
}
html body .lightbox .lb-tab-btn {
  flex: 1;
  background: #f9fafb;
  border: none;
  border-bottom: 2px solid transparent;
  padding: 7px 18px;      /* 2mm / 5mm rule */
  font-size: 12.5px;
  font-weight:500;
  color: #6b7280;
  cursor: pointer;
}
html body .lightbox .lb-tab-btn.active {
  background: #fff;
  color: #3f3d39;
  border-bottom-color: #5f5d58;
}
html body .lightbox .lb-tab-body {
  flex: 1 1 auto;
  overflow-y: auto;
  padding: 12px;
}
html body .lightbox-info, html body .lightbox-info-toggle,
html body .lightbox-comments-toggle { display: none !important; }
/* nav that must not touch the right window */
html body .lb-post-next { right: 354px; }
html body .lightbox .lightbox-nav.lightbox-next { right: 352px; }
/* zoom bar + fullscreen ride the media zone's bottom corners */
html body #lightbox .lightbox-viewport .lightbox-controls {
  position: absolute;
  left: 12px; bottom: 12px; top: auto;
  margin: 0;
}
html body .lb-fullscreen-btn {
  position: absolute;
  right: 12px; bottom: 12px; top: auto;
  margin: 0;
}
/* solo: image only, full width */
html body .lightbox.lb-solo .lightbox-comments { display: none !important; }
html body .lightbox.lb-solo .lightbox-viewport img,
html body .lightbox.lb-solo .lightbox-viewport video { max-width: 100%; max-height: 100vh; }
@media (max-width: 820px) {
  html body .lightbox { flex-direction: column; }
  html body .lightbox .lightbox-viewport { height: 55vh; }
  html body .lightbox .lightbox-comments { flex: 1 1 auto; width: 100%; height: auto !important; border-left: none; border-top: 1px solid #e5e7eb; }
  html body .lb-post-next { right: 14px; }
  html body .lightbox .lightbox-nav.lightbox-next { right: 8px; }
}

/* ============================================================
   ---- 63. [v5.16.236] Right window polish per direction ----
   ============================================================
   a) INFO TAB STYLES RESCOPED: the .lbi-* rules were still bound
      to the deleted .lightbox-info panel, so inside the tab the
      avatar rendered UNSTYLED and screen-huge. Now scoped to the
      whole viewer — compact 38px avatar, tidy name/time/text,
      exactly like the comments presentation.
   b) TAB BUTTONS: visible gap between the two, rounded, compact.
   c) NO COLORING on text fields in the viewer window: comment
      inputs stay plain WHITE with a neutral border. */
html body .lightbox .lbi-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
html body .lightbox .lbi-avatar { width: 38px !important; height: 38px !important; border-radius: 50%; object-fit: cover; flex: 0 0 38px; }
html body .lightbox .lbi-name { font-weight:500; font-size: 13.5px; color: #111827; }
html body .lightbox .lbi-time { font-size: 12px; color: #6b7280; }
html body .lightbox .lbi-text { font-size: 13px; line-height: 1.5; color: #1f2937; text-align: justify; margin-bottom: 10px; }
html body .lightbox .lbi-text img { max-width: 100%; height: auto; }
html body .lightbox .lbi-meta { font-size: 12px; color: #6b7280; border-top: 1px solid #e5e7eb; padding-top: 8px; }
html body .lightbox .lb-tabs { gap: 8px; padding: 6px 8px; }
html body .lightbox .lb-tab-btn { border: 1px solid #e5e7eb; border-radius: 6px; border-bottom: 1px solid #e5e7eb; }
html body .lightbox .lb-tab-btn.active { border-color: #5f5d58; border-bottom-color: #5f5d58; }
html body .lightbox .lightbox-comments input[type="text"],
html body .lightbox .lightbox-comments input:not([type]),
html body .lightbox .lightbox-comments textarea {
  background: #ffffff !important;
  border: 1px solid #d1d5db !important;
  box-shadow: none !important;
}

/* ============================================================
   ---- 64. [v5.16.237] STANDING RULE: fields never tinted ----
   ============================================================
   Per direction (permanent): REAL text-entry fields must never
   pick up the banner/theme background color — plain WHITE with a
   neutral border, everywhere content lives: the post modal, the
   viewer, dialogs, and every dashboard tab. The locked header's
   translucent pills are deliberately excluded (header is FINAL). */
html body .dashboard-center input[type="text"],
html body .dashboard-center input[type="email"],
html body .dashboard-center input[type="password"],
html body .dashboard-center input[type="search"],
html body .dashboard-center input[type="url"],
html body .dashboard-center input[type="number"],
html body .dashboard-center input[type="tel"],
html body .dashboard-center input[type="date"],
html body .dashboard-center input:not([type]),
html body .dashboard-center textarea,
html body .dashboard-center select,
html body #pl-postmodal input[type="text"],
html body #pl-postmodal textarea,
html body #pl-postmodal select,
html body .lightbox input[type="text"],
html body .lightbox input:not([type]),
html body .lightbox textarea,
html body .gm-overlay input,
html body .gm-overlay textarea,
html body .forward-modal input,
html body .forward-modal textarea,
html body .conn-modal input,
html body .conn-modal textarea,
html body .left-sidebar input[type="text"],
html body .users-panel input[type="text"],
html body .right-sidebar input[type="text"] {
  background-color: #ffffff !important;
  background-image: none !important;
  color: #111827 !important;
  border-color: #d1d5db !important;
  box-shadow: none !important;
}

/* ============================================================
   ---- 65. [v5.16.238] Viewer GUTTERS: overlap is impossible ----
   ============================================================
   Per direction: in the viewer, NO control may overlap the image
   by even a pixel. Enforced by GEOMETRY, not positioning luck:
   the media zone reserves fixed gutters — 48px top (post-nav
   row), 48px bottom (zoom bar left, fullscreen right), 44px each
   side (image prev/next arrows). The image is confined to the
   inner content box; every control lives only in a gutter. All
   controls also stay INSIDE the media zone — never on the right
   window, never past a boundary. */
html body .lightbox .lightbox-viewport {
  padding: 48px 44px;
  box-sizing: border-box;
}
html body #lightbox .lightbox-viewport img,
html body #lightbox .lightbox-viewport video {
  max-width: 100%;
  max-height: calc(100vh - 96px);
}
html body .lightbox .lightbox-nav {
  position: fixed;
  top: 50%;
  transform: translateY(-50%);
  width: 36px; height: 36px;
  z-index: 11;
}
html body .lightbox .lightbox-nav.lightbox-prev { left: 4px; }
html body .lightbox .lightbox-nav.lightbox-next { right: 348px; }
html body .lightbox-counter { top: 10px; left: 50%; transform: translateX(-50%); position: fixed; z-index: 11; }
html body .lb-post-nav { top: 9px; height: 30px; }
html body .lb-post-prev { left: 8px; }
html body .lb-post-next { right: 352px; }
html body #lightbox .lightbox-viewport .lightbox-controls {
  left: 8px; bottom: 9px; top: auto; margin: 0;
}
html body #lightbox .lightbox-viewport .lightbox-controls button { width: 30px; height: 30px; }
html body .lb-fullscreen-btn { right: 8px; bottom: 9px; top: auto; margin: 0; }
/* solo: gutters collapse, image gets the whole screen (controls hidden) */
html body .lightbox.lb-solo .lightbox-viewport { padding: 0; }
html body .lightbox.lb-solo .lightbox-viewport img,
html body .lightbox.lb-solo .lightbox-viewport video { max-height: 100vh; max-width: 100%; }
html body .lightbox.lb-solo .lb-fullscreen-btn { display: flex !important; right: 8px; bottom: 8px; }
@media (max-width: 820px) {
  html body .lightbox .lightbox-nav.lightbox-next { right: 4px; }
  html body .lb-post-next { right: 8px; }
}

/* ============================================================
   ---- 66. [v5.16.241] STANDING RULE: semicircle button ends ----
   ============================================================
   Per direction: every button's ends are exactly SEMICIRCLES —
   border-radius: 999px caps the visual radius at half the height
   (a pill), so no button can ever look sharper or squarer than a
   semicircle end. Applies across content areas, the post modal,
   the viewer, and all dialogs. The locked header keeps its own
   final styling. Real square icon buttons become circles, which
   is the same rule (each side a semicircle). */
html body .dashboard-center button,
html body .dashboard-center .btn,
html body .dashboard-center input[type="submit"],
html body .dashboard-center input[type="button"],
html body #pl-postmodal button,
html body .lightbox button,
html body .lb-post-nav,
html body .lb-fullscreen-btn,
html body .lightbox .lb-tab-btn,
html body .gm-overlay .gm-btn,
html body .forward-modal button,
html body .conn-modal button,
html body .left-sidebar button,
html body .users-panel button,
html body .right-sidebar button {
  /* [v5.16.299] was a hard 999px override, which BEAT the Site
     Settings shape control. Now it is the DEFAULT only: buttons stay
     pills until a shape/radius is chosen in Site Settings, and that
     choice (which emits its own !important rules later) now wins. */
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px));
}

/* ============================================================
   ---- 67. [v5.16.242] Nav arrows stable on hover ----
   ============================================================
   style.css has a global "button:hover { transform:none
   !important }" — it cancelled the arrows' translateY(-50%)
   vertical centering on hover, so they dropped by half their
   height under the cursor. The centering transform is pinned
   through hover and press (higher specificity, later cascade). */
html body .lightbox .lightbox-nav:hover,
html body .lightbox .lightbox-nav:active,
html body .lightbox .lightbox-nav:focus {
  transform: translateY(-50%) !important;
}

/* ============================================================
   ---- 68. [v5.16.243] CV actions fill the FULL row ----
   ============================================================
   Per direction (highlighted row): the toolbar's controls —
   Download PDF, template select, Save Default, Import Excel,
   Download Template, Erase All — stretch as EQUAL flex shares
   across the full row width, one line, nothing wrapping to a
   second row. The form wrapper and its children join the same
   flex distribution so Save Default and the select share evenly.
   Pill shape and 2mm/5mm padding rules still apply. */
html body .cvs-actions {
  display: flex !important;
  flex-wrap: nowrap !important;
  gap: 8px;
  width: 100%;
}
html body .cvs-actions > .cvs-btn,
html body .cvs-actions > a.cvs-btn {
  flex: 1 1 0 !important;
  min-width: 0;
  text-align: center;
  justify-content: center;
  white-space: nowrap;
}
html body .cvs-actions form {
  display: flex !important;
  flex: 2 1 0 !important;
  gap: 8px;
  min-width: 0;
}
html body .cvs-actions form select,
html body .cvs-actions form .cvs-btn {
  flex: 1 1 0 !important;
  min-width: 0;
}
html body .cvs-actions .cvs-actions-label { display: none; }
@media (max-width: 820px) {
  html body .cvs-actions { flex-wrap: wrap !important; }
  html body .cvs-actions > .cvs-btn, html body .cvs-actions form { flex: 1 1 45% !important; }
}

/* ============================================================
   ---- 69. [v5.16.245] CV toolbar: truly uniform row ----
   ============================================================
   After Save Default's removal the form (now holding ONLY the
   bullet select) still claimed a DOUBLE share — that was the gap.
   And "Download Template" is an <a>, which sat on the text
   baseline instead of centering like the buttons. Now: five
   controls, five EQUAL shares, identical 30px height, text
   dead-centre in every one, font one step smaller. */
html body .cvs-actions form { flex: 1 1 0 !important; }
html body .cvs-actions > .cvs-btn,
html body .cvs-actions > a.cvs-btn,
html body .cvs-actions form select,
html body .cvs-actions form .cvs-btn {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  height: 30px !important;
  padding: 0 12px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  line-height: 1 !important;
  box-sizing: border-box !important;
  vertical-align: middle;
}
html body .cvs-actions form select {
  text-align: center;
  text-align-last: center;
}
html body .cvs-actions form label { display: contents; }

/* [v5.16.246] toolbar addendum: with the label wrapper gone the
   select is a direct form child and takes the FULL share; anchor
   text centring hardened (line-height locked to the 30px box). */
html body .cvs-actions form > select {
  flex: 1 1 auto !important;
  width: 100% !important;
}
html body .cvs-actions > a.cvs-btn {
  line-height: 30px !important;
  text-align: center !important;
}

/* ============================================================
   ---- 70. [v5.16.247] STANDING RULE: one gray for the row ----
   ============================================================
   Per direction (remembered): action/toolbar buttons all wear the
   SAME gray — #6b7280 with white text — no mixed white/outline
   pills in a row. Applied to all five CV toolbar controls,
   dropdown included. */
html body .cvs-actions > .cvs-btn,
html body .cvs-actions > a.cvs-btn,
html body .cvs-actions form > select,
html body .cvs-actions form .cvs-btn {
  background: #6b7280 !important;
  color: #ffffff !important;
  border: 1px solid #6b7280 !important;
}
html body .cvs-actions > .cvs-btn:hover,
html body .cvs-actions > a.cvs-btn:hover,
html body .cvs-actions form > select:hover {
  background: #4b5563 !important;
  border-color: #4b5563 !important;
}
html body .cvs-actions form > select option { background: #ffffff; color: #111827; }

/* ============================================================
   ---- 71. [v5.16.260] Breathing room BETWEEN posts ----
   ============================================================
   Consecutive post cards were touching — one card's engagement
   bar sat directly on the next card's header (screenshot). Each
   post is now its own separated card: a 14px spacing band between
   cards lets the page background show through, every card gets
   its own rounded corners and a hairline border so the separation
   reads clearly. Applied to the WRAPPER, so it holds for text,
   media, polls and forwards alike — on the feed and engagements
   pages both. */
html body .center-content .post-card,
html body .center-content .feed-post {
  margin-bottom: 14px !important;
  border-radius: 10px !important;
  border: 1px solid #e5e7eb !important;
  box-shadow: 0 1px 2px rgba(17, 24, 39, 0.05);
}
html body .center-content .post-card:last-child,
html body .center-content .feed-post:last-child {
  margin-bottom: 0 !important;
}

/* ============================================================
   ---- 72. [v5.16.262] Discover polish: reviews & salaries ----
   ============================================================
   The reviews/salaries lists rendered as bare text (screenshot).
   Every direct child of .cr-list becomes a proper card; toolbar
   fields follow the white-fields rule; cr buttons follow the
   uniform-gray + pill standards. Companies directory cards get
   the same hairline+radius treatment. */
html body .cr-list > div,
html body .cr-list > article {
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
  padding: 12px 14px;
  margin-bottom: 12px;
  box-shadow: 0 1px 2px rgba(17,24,39,0.05);
}
html body .cr-list > div:last-child { margin-bottom: 0; }
html body .cr-toolbar input[type="text"],
html body .cr-toolbar select,
html body .cr-search-row input[type="text"],
html body .cr-search-row select {
  background: #fff !important;
  border: 1px solid #d1d5db !important;
  border-radius: 999px !important;
  height: 30px;
  font-size: 12px;
  padding: 0 12px;
  box-sizing: border-box;
}
html body .cr-btn {
  background: #6b7280 !important;
  color: #fff !important;
  border: 1px solid #6b7280 !important;
  border-radius: 999px !important;
  padding: 7px 18px !important;
  font-size: 12px !important;
  font-weight:500 !important;
}
html body .cr-btn:hover { background: #4b5563 !important; }
html body .company-directory-card,
html body .comp-card {
  border: 1px solid #e5e7eb !important;
  border-radius: 10px !important;
  box-shadow: 0 1px 2px rgba(17,24,39,0.05);
}

/* ============================================================
   ---- 73. [v5.16.263] Companies / Reviews / Salaries layouts ----
   ============================================================
   Implements the user's two wireframes. The .cr-card/.cr-sal-card
   item classes existed in JS but had NO stylesheet at all — the
   bare-text look. Now:
   (1) COMPANIES: 3-column card grid, logo block top-left.
   (2) REVIEWS: 2-column grid; each card = logo left + content
       lines right + full-width footer band.
   (3) SALARIES: same 2-column grid, led by DESIGNATION + COMPANY,
       amount as the highlight line, footer band below. */

/* -- (1) companies directory: 3-up grid, logo top-left -- */
html body .dir-grid {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
}
html body .dir-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
  background: #fff;
  border: 1px solid #e5e7eb !important;
  border-radius: 10px !important;
  padding: 14px;
  box-shadow: 0 1px 2px rgba(17,24,39,0.05) !important;
}
html body .dir-card .dir-logo-wrap { margin: 0 0 10px; }
html body .dir-card .dir-logo,
html body .dir-card .dir-logo-placeholder {
  width: 54px; height: 54px;
  border-radius: 8px;
  object-fit: cover;
}
html body .dir-card .dir-card-name { font-size: 13.5px; font-weight:500; color: #111827; }
html body .dir-card .dir-card-subtitle,
html body .dir-card .dir-card-location { font-size: 12px; color: #6b7280; }
html body .dir-card .dir-card-desc { font-size: 12px; color: #374151; text-align: justify; }
@media (max-width: 1100px) { html body .dir-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 700px)  { html body .dir-grid { grid-template-columns: 1fr; } }

/* -- (2)+(3) reviews & salaries: 2-up card grid -- */
html body .cr-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
html body .cr-list > .cr-loading,
html body .cr-list > .cr-empty { grid-column: 1 / -1; }
html body .cr-card,
html body .cr-sal-card {
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
  padding: 14px;
  margin: 0 !important;
  box-shadow: 0 1px 2px rgba(17,24,39,0.05);
  display: flex;
  flex-direction: column;
  gap: 8px;
}
/* review card: logo left, lines right */
html body .cr-card .cr-card-head {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}
html body .cr-card-avatar,
html body .cr-card-avatar-anon {
  width: 48px; height: 48px;
  flex: 0 0 48px;
  border-radius: 8px;
  object-fit: cover;
  background: #eef2f7;
  display: flex; align-items: center; justify-content: center;
  color: #6b7280;
}
html body .cr-card-title { font-size: 13.5px; font-weight:500; color: #111827; }
html body .cr-card-company { font-size: 12px; color: #4b5563; font-weight:500; }
html body .cr-card-meta, html body .cr-card-date, html body .cr-card-user { font-size: 12px; color: #6b7280; }
html body .cr-card-stars { color: #f59e0b; font-size: 13px; }
html body .cr-card-badge { font-size: 10.5px; border-radius: 999px; padding: 2px 10px; background: #f3f4f6; color: #374151; white-space: nowrap; display: inline-block; vertical-align: middle; } /* [v5.20.628] pills never wrap mid-text; sit on the meta line cleanly */
html body .cr-card-head > div:last-child { flex: 0 0 auto; margin-left: auto; } /* stars pinned right, never squeezed */
html body .cr-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 3px 6px; } /* [v5.20.628] meta chips align and wrap as whole pills */
html body .cr-badge-recommend { background: #ecfdf5; color: #047857; }
html body .cr-badge-not-recommend { background: #fef2f2; color: #b91c1c; }
html body .cr-pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; font-size: 12px; }
/* [v5.16.405] Inside a half-width review card, two prose columns would be
   ~150px each. Stacked instead so the text stays readable. */
/* [v5.20.492] one review = one full-width ROW: header inline, ratings
   inline (v489), pros/cons/advice side by side on one line. */
html body #reviewsList .cr-pros-cons { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 16px; margin: 6px 0; }
html body #reviewsList .cr-pros-cons.has-advice { grid-template-columns: 1fr 1fr 1.4fr; }
@media (max-width: 800px){ html body #reviewsList .cr-pros-cons, html body #reviewsList .cr-pros-cons.has-advice { grid-template-columns: 1fr; } }
html body #reviewsList .cr-card { padding: 12px 16px; }
html body #reviewsList .cr-card-head { display: flex; align-items: center; gap: 10px; }
html body #reviewsList .cr-card-user { display: flex; align-items: center; gap: 10px; min-width: 0; }
html body #reviewsList .cr-card-avatar,
html body #reviewsList .cr-card-avatar-ph { width: 34px !important; height: 34px !important; font-size: 15px; flex: 0 0 auto; }
html body #reviewsList .cr-card-name { display: inline; font-size: 13px; }
html body #reviewsList .cr-card-company { display: inline; margin-left: 6px; font-size: 12px; }
html body #reviewsList .cr-card-meta { font-size: 11px; margin-top: 1px; }
html body #reviewsList .cr-card-title { margin: 6px 0 4px; }
html body #reviewsList .cr-pc-block { margin: 0; }
html body #reviewsList .cr-pc-text { font-size: 11.5px; }
html body #reviewsList .cr-card-footer { margin-top: 6px; padding-top: 6px; }
html body .cr-card-footer,
html body .cr-sal-footer {
  margin-top: auto;
  border-top: 1px solid #e5e7eb;
  padding-top: 8px;
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 12px;
  color: #6b7280;
}
/* salary card: designation + company lead, amount highlighted */
html body .cr-sal-head { display: flex; align-items: flex-start; gap: 12px; }
html body .cr-sal-title { font-size: 13.5px; font-weight:500; color: #111827; }
html body .cr-sal-company { font-size: 12px; font-weight:500; color: #4b5563; }
html body .cr-sal-dept { font-size: 12px; color: #6b7280; }
html body .cr-sal-amount { font-size: 16px; font-weight:500; color: #065f46; }
html body .cr-sal-period, html body .cr-sal-bonus { font-size: 12px; color: #6b7280; }
html body .cr-sal-chip { font-size: 12px; background: #f3f4f6; color: #374151; border-radius: 999px; padding: 2px 10px; margin-right: 4px; }
html body .cr-sal-details, html body .cr-sal-benefits, html body .cr-sal-notes { font-size: 12px; color: #374151; }
@media (max-width: 900px) { html body .cr-list { grid-template-columns: 1fr; } }

/* ============================================================
   ---- 74. [v5.16.405] Reviews: TWO per row + colored bars ----
   ============================================================
   Per direction: each review card takes half the width, two side by
   side. (Superseded v5.16.264, which made them full-width rows.)
   Every rating parameter still renders as its own COLORED BAR
   (Work-Life blue, Culture violet, Management amber, Compensation
   green, Growth red, Overall purple — the colors the JS emits) with
   the score beside it. Salaries keep the 3-up grid from section 75. */
/* [v5.20.491] PK: each review takes the FULL row — one card per line,
   so the six single-row rating chips fit on one line inside it.
   (Supersedes the half-width direction above.) */
html body #reviewsList.cr-list {
  grid-template-columns: 1fr;
}
html body #reviewsList .cr-card { width: 100%; min-width: 0; }

/* The rating bars CANNOT stay two-per-line inside a half-width card.
   The card is ~320px of content; two columns leaves ~155px each, and the
   label (96px) plus the score (34px) plus gaps already consume ~146px —
   the bar itself would be about 9px wide. One parameter per line inside
   the reviews list; the 1fr 1fr default below still applies elsewhere. */
/* [v5.20.489] PK: the six category ratings sit in a SINGLE row of compact
   label+bar+score chips (wrapping only when the card is too narrow). */
html body #reviewsList .cr-breakdown,
html body .cr-breakdown {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 5px 14px;
  margin: 4px 0;
}
html body .cr-bar-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  flex: 0 0 auto;
}
html body .cr-bar-label {
  flex: 0 0 auto;
  font-size: 11px;
  color: #6b7280;
  white-space: nowrap;
}
html body .cr-bar-track {
  flex: 0 0 46px;
  width: 46px;
  height: 7px;
  background: #eef0f3;
  border-radius: 999px;
  overflow: hidden;
}
html body .cr-bar-fill {
  height: 100%;
  border-radius: 999px;
  display: block;
}
html body .cr-bar-val {
  flex: 0 0 auto;
  font-size: 11px;
  font-weight:500;
  color: #111827;
}
/* [v5.20.489] single-row layout wraps naturally on narrow cards */

/* ---- 75. [v5.16.265] Salaries: THREE per row ---- */
html body #salariesList.cr-list {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
@media (max-width: 1100px) { html body #salariesList.cr-list { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 700px)  { html body #salariesList.cr-list { grid-template-columns: 1fr; } }

/* ============================================================
   ---- 76. [v5.16.266] Companies page: queued four fixes ----
   ============================================================
   (1) FILTERS IN ONE ROW: search field + Clear + Industry + Size
       become a single flex row, equal heights, white fields.
   (2) count text removed (markup) — nothing reserved for it.
   (3) FOLLOW ROW IDENTICAL on every card: the card is a flex
       column; the follow wrapper is pinned with margin-top:auto
       to the same bottom line regardless of description length;
       description clamps to 4 lines so heights stay even.
   (4) LOGOS in the site-logo style: white tile, rounded corners,
       hairline border; missing logos show the company INITIAL in
       the same tile (purple on white, like the site logo chip). */
html body .dir-filters {
  display: flex !important;
  flex-wrap: nowrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
}
html body .dir-filters .dir-search-row,
html body .dir-filters .dir-filter-row {
  display: contents;
}
html body .dir-filters .dir-search-input {
  flex: 1.6 1 0;
  min-width: 0;
  height: 30px;
  border: 1px solid #d1d5db !important;
  border-radius: 999px !important;
  background: #fff !important;
  font-size: 12px;
  padding: 0 12px;
  box-sizing: border-box;
}
html body .dir-filters .dir-filter-select {
  flex: 1 1 0;
  min-width: 0;
  height: 30px;
  border: 1px solid #d1d5db !important;
  border-radius: 999px !important;
  background: #fff !important;
  font-size: 12px;
  padding: 0 10px;
  box-sizing: border-box;
}
html body .dir-filters .dir-clear-btn {
  flex: 0 0 auto;
  height: 30px;
  background: #6b7280 !important;
  color: #fff !important;
  border: none !important;
  border-radius: 999px !important;
  padding: 0 18px !important;
  font-size: 12px;
  font-weight:500;
  cursor: pointer;
}
@media (max-width: 820px) { html body .dir-filters { flex-wrap: wrap; } }
html body .dir-card { height: 100%; }
html body .dir-card .dir-card-desc {
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
html body .dir-card .pl-follow-wrapper {
  margin-top: auto !important;
  padding-top: 10px;
  border-top: 1px solid #f3f4f6;
  width: 100%;
}
html body .dir-card .dir-logo,
html body .dir-card .dir-logo-placeholder {
  width: 54px !important;
  height: 54px !important;
  border-radius: 10px !important;
  background: #ffffff;
  border: 1px solid #e5e7eb;
  object-fit: contain !important;
  padding: 4px;
  box-sizing: border-box;
}
html body .dir-card .dir-logo-initial {
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  font-weight:500;
  color: #5f5d58;
  padding: 0;
}

/* ============================================================
   ---- 77. [v5.16.267] Toolbars single-row; clipping fixed;
        salary card rows tidied; grids enforced ----
   ============================================================
   (a) SELECT CLIPPING (companies + reviews + salaries): labels
       were hidden under the dropdown arrow — room reserved with
       padding-right, font stepped to 11.5px.
   (b) EVERY TOOLBAR IS ONE ROW: reviews (search, ratings, sort,
       Search, Write a Review) and salaries (company, job title,
       sort, Search, Share Your Salary) — inner rows flattened
       with display:contents so ALL controls share one flex row.
   (c) SALARY CARD: details chips hold on one wrapping line
       without mid-word breaks; the footer (Helpful + author +
       date) is ONE row; fonts adapted down to fit 3-up cards.
   (d) Grids enforced: reviews 1-per-row, salaries 3-per-row. */
html body .dir-filters .dir-filter-select,
html body .cr-toolbar select,
html body .cr-select {
  padding: 0 28px 0 10px !important;
  font-size: 12px !important;
  line-height: 28px !important;
  text-overflow: ellipsis;
}
html body .cr-toolbar {
  display: flex !important;
  flex-wrap: nowrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
}
html body .cr-toolbar .cr-search-row,
html body .cr-toolbar .cr-toolbar-right {
  display: contents;
}
html body .cr-toolbar .cr-input {
  flex: 1.3 1 0;
  min-width: 0;
  height: 30px !important;
  font-size: 12px !important;
  padding: 0 12px !important;
}
html body .cr-toolbar select { flex: 1 1 0; min-width: 0; height: 30px !important; }
html body .cr-toolbar .cr-btn {
  flex: 0 0 auto;
  white-space: nowrap;
  height: 30px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12px !important;
  padding: 0 16px !important;
}
@media (max-width: 900px) { html body .cr-toolbar { flex-wrap: wrap; } }
html body .cr-list { display: grid !important; }
/* [v5.16.405] TWO per row. This is the rule that actually governs the
   reviews grid: it carries !important and sits later in the file than
   section 74, so it overrides it. Both are now consistent. */
html body #reviewsList.cr-list { grid-template-columns: repeat(2, minmax(0,1fr)) !important; }
@media (max-width: 900px) { html body #reviewsList.cr-list { grid-template-columns: 1fr !important; } }
html body #salariesList.cr-list { grid-template-columns: repeat(3, minmax(0,1fr)) !important; }
@media (max-width: 1100px) { html body #salariesList.cr-list { grid-template-columns: repeat(2, minmax(0,1fr)) !important; } }
@media (max-width: 700px)  { html body #salariesList.cr-list { grid-template-columns: 1fr !important; } }
html body .cr-sal-card { font-size: 12px; }
html body .cr-sal-title { font-size: 12.5px; }
html body .cr-sal-amount { font-size: 15px; }
html body .cr-sal-details {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 8px;
  align-items: center;
  font-size: 12px;
}
html body .cr-sal-details > * { white-space: nowrap; }
html body .cr-sal-chip { font-size: 12px; padding: 2px 8px; }
html body .cr-sal-footer {
  flex-wrap: nowrap !important;
  justify-content: space-between;
  font-size: 12px;
  gap: 6px;
  overflow: hidden;
}
html body .cr-sal-footer .cr-btn,
html body .cr-btn-helpful {
  flex: 0 0 auto;
  font-size: 12px !important;
  padding: 4px 12px !important;
  white-space: nowrap;
}
html body .cr-sal-user {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* ============================================================
   ---- 78. [v5.16.268] Salaries: container un-shrunk, 3-up real ----
   ============================================================
   The 3-column grid WAS applying — to a container that had shrunk
   to card width (~200px), which is also the "outer rect window"
   the user circled. The wrapper chain is now forced to the full
   column width with its own box stripped (no border, no bg, no
   padding) so ONLY the cards draw boxes, and the grid finally has
   room to lay three per row. */
html body .cr-page,
html body .cr-section {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  float: none !important;
}
html body .cr-list {
  width: 100% !important;
  max-width: 100% !important;
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}
html body .cr-sal-card,
html body .cr-card { min-width: 0; width: auto !important; }
html body .cr-toolbar { width: 100% !important; }

/* ============================================================
   ---- 79. [v5.16.269] The wrapper divs DISSOLVED: real 3-up ----
   ============================================================
   Console-diagnosed with the user: the grid container was fine
   (555px, display:grid) but the JS injects all cards inside ONE
   wrapper div (.cr-salary-grid / .cr-reviews-wrap), so the grid
   saw a single child occupying one 185px column — the cards
   stacked inside it, and that wrapper's card-styled box was the
   circled "outer rect window". display:contents dissolves the
   wrappers so every card becomes a DIRECT grid item: salaries lay
   3-up exactly like the approved wireframe, reviews stay one per
   row, and the outer box ceases to exist. */
html body .cr-list > .cr-salary-grid,
html body .cr-list > .cr-reviews-wrap,
html body .cr-list > .cr-reviews-list,
html body .cr-list > .cr-review-grid {
  display: contents !important;
  background: none !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
}

/* ============================================================
   ---- 80. [v5.16.272] Trigger: 75% of container, WHITE box ----
   ============================================================
   Per direction: the Post / Search field is exactly 75% of the
   CENTRE CONTAINER's width (tracks the same var chain the layout
   uses, so it scales with every screen tier), centered in the
   header middle, and its background is guaranteed WHITE — this
   override lives here (loads after header.php's inline styles)
   so nothing can gray it out again. */
html body .site-header .hdr-composer {
  /* [v5.17.72] was flex:1 1 auto + max-width:none — with this selector's
     higher specificity it beat every cap set in header.php, which is why
     the pill kept expanding no matter what the inline CSS said. Now the
     same viewport-proportional clamp as header.php's fallback. */
  flex: 0 1 clamp(220px, 28vw, 520px);
  display: flex;
  justify-content: center;
  max-width: clamp(220px, 28vw, 520px);
}
html body .site-header .hdr-composer button {
  /* [v5.17.72] THE ACTUAL GIANT BAR. This was width: calc(container *
     0.75) — the button itself was sized to 75% of the WHOLE PAGE
     container (~1250px on a 1669px screen), overflowing whatever size
     the wrapper was clamped or pinned to. The button now simply fills
     its wrapper, and the wrapper (above / header.php / the JS clamp)
     decides the size. */
  flex: 1 1 auto;
  width: 100%;
  max-width: 100%;
  background: #ffffff !important;
  color: #6b7280 !important;
  border: 1px solid #d1d5db !important;
  border-radius: 999px !important;
  font-weight: 500 !important;
  text-align: center;
  height: 26px;
  padding: 0 14px !important;
}
html body .site-header .hdr-composer button:hover {
  border-color: #9ca3af !important;
  color: #4b5563 !important;
  background: #ffffff !important;
}

/* ============================================================
   ---- 81. [v5.16.273] Feed gaps show the BANNER color ----
   ============================================================
   The post cards sit inside .feed-container.profile-form — a
   WHITE card — so the v5.16.260 gaps existed but showed white
   and the posts read as one continuous sheet. The wrapper's box
   is stripped (transparent, no border/shadow/padding) so the
   page/banner color shows between posts, and the gap is set to
   the requested 1-2mm (6px). Cards keep their own borders. */
html body .center-content .feed-container.profile-form,
html body .center-content .feed-container {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}
html body .center-content .post-card,
html body .center-content .feed-post {
  margin-bottom: 6px !important;
}

/* ---- 82. [v5.16.274] Post cards: minute visible boundary line ---- */
html body .center-content .post-card,
html body .center-content .feed-post {
  border: 1px solid #d1d5db !important;   /* one shade darker so the
     fine line is actually visible against white, per direction */
}

/* ---- 83. [v5.16.275] Boundary VISIBLE: darker minute line ----
   Console session proved the 1px #d1d5db border was computed and
   painted — just too faint to perceive on white. Darkened to
   #9ca3af: still a minute 1px line, now clearly visible. The 6px
   banner gap is restated here (something later pushed it to 8px). */
html body .center-content .post-card,
html body .center-content .feed-post {
  border: 1px solid #9ca3af !important;
  margin-bottom: 6px !important;
}

/* ---- 84. [v5.16.276] Media fills the card edge-to-edge ----
   The minute boundary revealed the card's 8px side padding: posted
   images stopped short of the left/right edges (screenshot). The
   media block now bleeds across the padding to sit flush against
   the border on both sides. */
html body .center-content .post-card .post-media-grid,
html body .center-content .post-card .post-media,
html body .center-content .feed-post .post-media-grid,
html body .center-content .feed-post .post-media {
  margin-left: -8px !important;
  margin-right: -8px !important;
  width: calc(100% + 16px) !important;
  max-width: none !important;
}
html body .center-content .post-card .post-media-grid img,
html body .center-content .post-card .post-media img {
  width: 100% !important;
}

/* ---- 85. [v5.16.277] Media blank space = BLACK (cinema frame) ----
   Per direction (mockup approved): the full-bleed media band gets a
   black backing. Wide media covers it entirely; tall/narrow media
   centers with BLACK filling the leftover space out to the minute
   boundary — never white gaps. */
html body .center-content .post-card .post-media,
html body .center-content .post-card .post-media-grid,
html body .center-content .post-card .post-media-item,
html body .center-content .feed-post .post-media,
html body .center-content .feed-post .post-media-grid,
html body .center-content .feed-post .post-media-item {
  /* [v5.16.335] Was #000 ("cinema frame", v5.16.277). Per current
     direction the black backing is dropped — tall/narrow media now
     letterboxes onto the card surface, not a black slab. This is the
     (0,3,2) rule that out-ranked the earlier override; fixed at source. */
  background: var(--post-media-bg, #fff) !important;
}
html body .center-content .post-card .post-media-item img,
html body .center-content .post-card .post-media-item video {
  width: auto !important;
  max-width: 100% !important;
  margin: 0 auto;
  display: block;
}

/* ---- 86. [v5.16.278] Boundary line REMOVED (job done) ----
   The minute line (v274/275) served its purpose: it exposed the
   media width gap, which is now fixed with full-bleed + black
   backing. Per direction the line is retired — cards separate by
   the 6px banner gap and their soft shadow alone. */
html body .center-content .post-card,
html body .center-content .feed-post {
  border: none !important;
}

/* ============================================================
   ---- 87. [v5.16.282] Connections tabs: clean, low, justified ----
   ============================================================
   Per direction: number badges REMOVED (blink signals new
   activity instead — see the page script), tab height reduced,
   and the six tabs JUSTIFIED edge-to-edge across the container
   as equal shares. Pill + gray standards apply. */
html body .conn-tabs {
  display: flex !important;
  width: 100%;
  gap: 6px;
  flex-wrap: nowrap;
  margin-bottom: 10px;
}
html body .conn-tabs .conn-tab {
  flex: 1 1 0;
  min-width: 0;
  height: 26px;
  padding: 0 10px !important;
  font-size: 12px;
  font-weight:500;
  border-radius: 999px !important;
  background: #f3f4f6;
  color: #4b5563;
  border: 1px solid #e5e7eb;
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
html body .conn-tabs .conn-tab.active {
  background: #6b7280;
  color: #fff;
  border-color: #6b7280;
}
html body .conn-tabs .conn-tab-badge { display: none !important; }
html body .conn-tabs .conn-tab.pl-blink {
  animation: plConnBlink 1.1s ease-in-out infinite;
}
@keyframes plConnBlink {
  0%, 100% { background: #f3f4f6; color: #4b5563; box-shadow: none; }
  50% { background: #ede9fe; color: #3f3d39; box-shadow: 0 0 0 2px rgba(95,93,88,0.25); }
}
html body .conn-tabs .conn-tab.active.pl-blink { animation: none; }
@media (max-width: 700px) { html body .conn-tabs { flex-wrap: wrap; } html body .conn-tabs .conn-tab { flex: 1 1 30%; } }

/* ---- 88. [v5.16.283] Connection rows are WHITE ----
   The rows were picking up a tinted background (banner color).
   They now render as clean white cards with a hairline border,
   matching the feed's card treatment. */
html body .conn-card,
html body .conn-list .conn-card,
html body .conn-card:hover {
  background: #ffffff !important;
  background-image: none !important;
  border: 1px solid #e5e7eb !important;
  border-radius: 10px !important;
}

/* ---- 89. [v5.16.284] Functional Testing card spans the full width ----
   The card sat inset from the right (its .profile-form styling adds
   its own max-width/margins) while the Bug Testing sections below
   run edge to edge. It now matches them exactly: full container
   width, same left and right alignment, transparent-free box. */
html body .pl-page-head + .profile-form,
html body #pl-td-accounts,
html body .profile-form:has(#pl-seed-btn) {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  box-sizing: border-box !important;
}
html body .profile-form:has(#pl-seed-btn) {
  padding: 12px 14px !important;
  border-radius: 10px !important;
}

/* ---- 90. [v5.16.286] Post header: Follow + wider dots menu ---- */
html body .post-header .pl-post-follow { margin-left: auto; display: inline-flex; align-items: center; }
html body .pl-postfollow-btn {
  height: 22px;
  padding: 0 14px;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px));
  border: 1px solid #5f5d58;
  background: #fff;
  color: #5f5d58;
  font-size: 12px;
  font-weight:500;
  cursor: pointer;
  white-space: nowrap;
}
html body .pl-postfollow-btn:hover { background: #f5f0ff; }
html body .pl-postfollow-btn.following { background: #6b7280; border-color: #6b7280; color: #fff; }
html body .post-header .post-actions-menu { margin-left: 6px; }
html body .post-dropdown.pl-dd-wide { min-width: 176px; }
html body .post-dropdown.pl-dd-wide .dropdown-item {
  display: flex !important;
  align-items: center;
  gap: 8px;
  width: 100%;
  justify-content: flex-start !important;
  padding: 7px 12px !important;
  font-size: 12px;
  color: #111827 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  cursor: pointer;
  text-align: left;
}
html body .post-dropdown.pl-dd-wide .dropdown-item:hover { background: #f5f0ff !important; }
html body .post-dropdown.pl-dd-wide .dropdown-item.delete { color: #dc2626 !important; }
html body .post-dropdown.pl-dd-wide .dropdown-item.delete:hover { background: #fef2f2 !important; }

/* ---- 91. [v5.16.287] Dots menu = vertical stack of pill buttons ----
   Per the approved mockup: opening the three dots drops a white
   panel holding each action as its OWN pill button (same family as
   the Follow button), stacked vertically with gaps — not plain text
   rows. Block stays red. */
html body .post-dropdown.pl-dd-wide {
  min-width: 196px;
  background: #fff !important;
  border: 1px solid #e5e7eb !important;
  border-radius: 12px !important;
  box-shadow: 0 10px 28px rgba(17,24,39,0.16) !important;
  padding: 8px !important;
  display: none;
  flex-direction: column;
  gap: 6px;
}
html body .post-dropdown.pl-dd-wide.show,
html body .post-dropdown.pl-dd-wide.active,
html body .post-dropdown.pl-dd-wide[style*="block"] {
  display: flex !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item {
  display: flex !important;
  align-items: center;
  gap: 8px;
  width: 100%;
  height: 26px;
  padding: 0 14px !important;
  border-radius: 999px !important;
  background: #f3f4f6 !important;
  border: 1px solid #e5e7eb !important;
  color: #374151 !important;
  -webkit-text-fill-color: #374151 !important;
  font-size: 12px !important;
  font-weight:500 !important;
  justify-content: flex-start !important;
  white-space: nowrap;
  cursor: pointer;
}
html body .post-dropdown.pl-dd-wide .dropdown-item:hover {
  background: #ede9fe !important;
  border-color: #c4b5fd !important;
  color: #3f3d39 !important;
  -webkit-text-fill-color: #3f3d39 !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item.delete {
  background: #fef2f2 !important;
  border-color: #fca5a5 !important;
  color: #b91c1c !important;
  -webkit-text-fill-color: #b91c1c !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item.delete:hover { background: #fee2e2 !important; }
html body .post-dropdown.pl-dd-wide .dropdown-item svg { flex: 0 0 13px; }

/* ---- 92. [v5.16.288] Menu buttons: one uniform colour ----
   Report post removed (it already exists on the engagement bar) and
   every remaining item wears the SAME gray pill — no red, no mixed
   colours (standing uniform-button rule). */
html body .post-dropdown.pl-dd-wide .dropdown-item,
html body .post-dropdown.pl-dd-wide .dropdown-item.delete {
  background: #6b7280 !important;
  border-color: #6b7280 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item:hover,
html body .post-dropdown.pl-dd-wide .dropdown-item.delete:hover {
  background: #4b5563 !important;
  border-color: #4b5563 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item svg { stroke: #ffffff !important; }

/* ============================================================
   ---- 93. [v5.16.289] Two menu styles, correctly scoped ----
   ============================================================
   Section 28's rule (from when the menu held only Edit/Delete)
   forced EVERY dropdown into a horizontal icon strip beside the
   dots — which is why the new labelled menu came out as a row of
   circles. That behaviour now applies ONLY to the own-post menu;
   the other-post menu (.pl-dd-wide) is pinned as a vertical panel
   BELOW the dots with full-width labelled pill buttons. */
html body .post-dropdown.pl-dd-wide {
  top: 100% !important;
  right: 0 !important;
  left: auto !important;
  transform: none !important;
  white-space: normal !important;
  margin-top: 6px !important;
  position: absolute !important;
}
html body .post-dropdown.pl-dd-wide.active,
html body .post-dropdown.pl-dd-wide.show {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  gap: 6px !important;
}
html body .post-dropdown.pl-dd-wide a,
html body .post-dropdown.pl-dd-wide button {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  width: 100% !important;
  padding: 0 14px !important;
  margin: 0 !important;
  height: 26px !important;
  white-space: nowrap !important;
}

/* ============================================================
   ---- 94. [v5.16.290] Menu panel: labels visible, free to overlap ----
   ============================================================
   The panel had collapsed to icon width (labels clipped) because
   nothing gave it a width and the card was clipping it. Per
   direction it may overlap this post and the next: the panel takes
   its natural label width, floats above everything, and every
   ancestor stops clipping it. */
html body .post-dropdown.pl-dd-wide {
  min-width: 208px !important;
  width: max-content !important;
  max-width: 260px !important;
  z-index: 99999 !important;
  overflow: visible !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item {
  width: 100% !important;
  min-width: 0 !important;
  overflow: visible !important;
  text-overflow: clip !important;
  font-size: 12px !important;
  gap: 8px !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item svg { flex: 0 0 13px !important; }
html body .post-card:has(.pl-dd-wide.active),
html body .post-card:has(.pl-dd-wide.show),
html body .post-card .post-header,
html body .post-card .post-actions-menu,
html body .feed-post .post-header,
html body .feed-post .post-actions-menu {
  overflow: visible !important;
}
html body .center-content .post-card:has(.pl-dd-wide.active),
html body .center-content .post-card:has(.pl-dd-wide.show) {
  z-index: 9999 !important;
  position: relative !important;
}

/* ============================================================
   ---- 95. [v5.16.291] Panel sizing fixed at the source ----
   ============================================================
   Console session: the panel measured 44px with min-width 0 —
   because the items carried width:100%, which contributes NOTHING
   to a shrink-to-fit parent, so the panel sized to padding alone
   and the labels were squeezed out (the "circles" look). Items now
   stretch instead of claiming a percentage width, and the panel
   carries an explicit width so it can never collapse again. */
html body .post-dropdown.pl-dd-wide,
html body .post-dropdown.pl-dd-wide.active,
html body .post-dropdown.pl-dd-wide.show {
  width: 216px !important;
  min-width: 216px !important;
  max-width: 260px !important;
  box-sizing: border-box !important;
}
html body .post-dropdown.pl-dd-wide .dropdown-item,
html body .post-dropdown.pl-dd-wide a,
html body .post-dropdown.pl-dd-wide button {
  width: auto !important;
  align-self: stretch !important;
  flex: 0 0 auto !important;
  min-width: 0 !important;
  justify-content: flex-start !important;
  font-size: 12px !important;
  line-height: 26px !important;
}

/* ============================================================
   ---- 96. [v5.16.298] CV toolbar: five identical buttons ----
   ============================================================
   Download Template (an <a>) and the bullet <select> were still
   wearing their own colours. All five controls now share ONE
   uniform gray, and the select is stripped of its native arrow so
   it reads as a normal button — clicking it still expands the
   list natively. */
html body .cvs-actions > .cvs-btn,
html body .cvs-actions > a.cvs-btn,
html body .cvs-actions > button.cvs-btn,
html body .cvs-actions form > select,
html body .cvs-actions form > .cvs-btn {
  background: #6b7280 !important;
  background-color: #6b7280 !important;
  background-image: none !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border: 1px solid #6b7280 !important;
  /* [v5.16.309] was 999px !important, which beat the Buttons slider.
     Now a DEFAULT: Site Settings > Buttons governs the shape. */
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px));
  height: 30px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  text-align: center !important;
  text-decoration: none !important;
  opacity: 1 !important;
  box-shadow: none !important;
}
html body .cvs-actions > .cvs-btn:hover,
html body .cvs-actions > a.cvs-btn:hover,
html body .cvs-actions form > select:hover {
  background: #4b5563 !important;
  background-color: #4b5563 !important;
  border-color: #4b5563 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}
html body .cvs-actions form > select {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  text-align-last: center !important;
  padding: 0 12px !important;
  cursor: pointer;
}
html body .cvs-actions form > select::-ms-expand { display: none !important; }
html body .cvs-actions form > select option {
  background: #ffffff !important;
  color: #111827 !important;
  -webkit-text-fill-color: #111827 !important;
  text-align: left;
}

/* ---- 97. [v5.16.301] Purple title bars: rounded, not elliptical ----
   The page-head bars (Feed, Connections, Salaries...) were rendering
   as full ellipses because the headings radius defaulted to 21px with
   an elongated vertical ratio. They now default to a clean 10px
   rounded bar; the Site Settings slider still overrides freely. */
html body .center-content .dir-header.pl-page-head h2,
html body .center-content .dir-header.pl-cv-head h2,
html body .center-content .profile-form .dir-header h2 {
  border-radius: var(--pl-r-headings, 10px);
}

/* ---- 98. [v5.16.302] Profile sections: no gap between them ----
   Each section (Contact, Profile Details, Profile Summary...) is its
   own card, so the page background showed as a strip BETWEEN them.
   The sections now run continuously: no gap, no double edge — one
   hairline divider marks where a section ends and the next begins. */
html body .profile-form .entry-block {
  margin-bottom: 0 !important;
  margin-top: 0 !important;
  /* [v5.16.309] radius now follows Site Settings > Cards; only the
     JOINS between stacked sections are squared so the panel still
     reads as one continuous block. */
  border-radius: var(--pl-r-cards, 10px);
  border-bottom: none !important;
}
html body .profile-form .entry-block:not(:first-of-type) {
  border-top-left-radius: 0 !important;
  border-top-right-radius: 0 !important;
}
html body .profile-form .entry-block:not(:last-of-type) {
  border-bottom-left-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}
html body .profile-form .entry-block + .entry-block {
  border-top: 1px solid #e5e7eb !important;
}
html body .profile-form .entry-block:first-of-type {
  border-top-left-radius: var(--pl-r-cards, 10px) !important;
  border-top-right-radius: var(--pl-r-cards, 10px) !important;
}
html body .profile-form .entry-block:last-of-type {
  border-bottom: 1px solid rgba(0,0,0,0.08) !important;
  border-bottom-left-radius: var(--pl-r-cards, 10px) !important;
  border-bottom-right-radius: var(--pl-r-cards, 10px) !important;
}

/* ---- 99. [v5.16.303] Account buttons: no white strip behind them ----
   The Pause / Change Password / Delete row sat on its own white
   card. The strip is removed — the three buttons now sit directly
   on the page background. */
html body .center-content .acc-cards {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 0 12px !important;
}

/* ============================================================
   ---- 100. [v5.16.304] Settings tabs match Privacy Settings ----
   ============================================================
   Console-identified: #acct-settings.profile-form is a white,
   shadowed 60px strip carrying only the title bar and the action
   buttons — the background behind Pause / Change Password / Delete.
   Privacy Settings has no such wrapper (title bar and buttons sit on
   the page, content in white cards below), so Account Management now
   follows the same pattern, and any other settings screen using a
   header+buttons wrapper inherits it. */
html body .center-content #acct-settings.profile-form,
html body .center-content .profile-form:has(> .acc-cards) {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}
html body .center-content #acct-settings .acc-cards {
  display: flex !important;
  justify-content: center;
  gap: 10px;
  margin: 0 0 14px !important;
}
html body .center-content #acct-settings .acc-sec,
html body .center-content #acct-settings .pl-sec-card {
  background: #fff !important;
  border: 1px solid #e5e7eb !important;
  /* [v5.16.309] follows Site Settings > Cards */
  border-radius: var(--pl-r-cards, 10px);
  padding: 14px !important;
  margin-bottom: 12px !important;
}

/* ---- 101. [v5.16.305] Profile tabs: same pattern as Settings ----
   Per direction, the Privacy/Account treatment now applies to the
   profile tabs: the OUTER form wrapper is transparent, so the purple
   title bar and the Save button sit directly on the page background,
   while the content sections keep their white panel (continuous,
   per v5.16.302). Scoped with :has(.entry-block) so the Functional
   Testing card and feed containers are untouched. */
html body .center-content .profile-form:has(.entry-block) {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}
html body .center-content .profile-form:has(.entry-block) > .dir-header {
  margin-bottom: 10px !important;
}
html body .center-content .profile-form:has(.entry-block) .entry-block {
  background: #ffffff !important;
  border-left: 1px solid #e5e7eb !important;
  border-right: 1px solid #e5e7eb !important;
  padding: 14px !important;
}
html body .center-content .profile-form:has(.entry-block) .entry-block:first-of-type {
  border-top: 1px solid #e5e7eb !important;
}

/* ---- 102. [v5.16.306] Other Information: middle box removed ----
   Inside each panel (Interests, References) an .entry-block card
   wrapped the textarea — a box inside the panel inside the page.
   That middle box is now transparent and padding-free: the panel
   holds the field directly. */
html body .center-content .op-panel .op-body .entry-block,
html body .center-content .op-body > .entry-block {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
  border-radius: 0 !important;
}

/* ============================================================
   ---- 103. [v5.16.307] Profile tabs: compact 1-2mm spacing ----
   ============================================================
   Per direction, across EVERY profile tab: the gap between any two
   isolated pieces (section heading and its first field, one field
   and the next, a field and its checkbox, panel edges) is capped at
   1-2mm (4-6px). Fields keep a comfortable height; only the dead
   air between them is removed. */
html body .center-content .profile-form .form-row,
html body .center-content .profile-form .form-row-half,
html body .center-content .profile-form .op-body > *,
html body .center-content .profile-form .entry-block > * {
  margin-bottom: 6px !important;
}
html body .center-content .profile-form .form-row:last-child,
html body .center-content .profile-form .entry-block > *:last-child { margin-bottom: 0 !important; }
html body .center-content .profile-form .form-row label,
html body .center-content .profile-form .op-body label:not(.cv-toggle) {
  margin-bottom: 3px !important;
  line-height: 1.25 !important;
}
html body .center-content .profile-form .entry-block { padding: 10px 12px !important; }
html body .center-content .profile-form .entry-block > h3,
html body .center-content .profile-form .op-head h3 {
  margin: 0 0 6px !important;
  padding-bottom: 4px !important;
}
html body .center-content .profile-form .op-panel .op-body { padding: 8px 10px !important; }
html body .center-content .profile-form .op-body input[type="text"],
html body .center-content .profile-form .op-body input[type="url"] {
  margin: 0 0 5px !important;
}
html body .center-content .profile-form .cv-toggle { margin-top: 5px !important; }
html body .center-content .profile-form .form-row input,
html body .center-content .profile-form .form-row select,
html body .center-content .profile-form .form-row textarea { margin-bottom: 0 !important; }
html body .center-content .profile-form p { margin: 4px 0 !important; }
html body .center-content .profile-form .op-col-wrap { gap: 6px !important; }

/* ============================================================
   ---- 104. [v5.16.308] ONE spacing value for every panel ----
   ============================================================
   The platform already defines --column-gap (6px) as the air
   between the sidebars and the content column. Isolated panels
   (Languages, Interests/References, Social Links, entry blocks,
   settings sections...) each carried their own margins, so the
   vertical rhythm and the side gutters disagreed. They now all use
   --column-gap: same distance panel-to-panel, same gutter between
   side-by-side panels, and every panel spans the column edge to
   edge so all left and right edges line up down the page. */
html body .center-content .profile-form .op-panel,
html body .center-content .profile-form .entry-block,
html body .center-content .profile-form .pl-sec-card,
html body .center-content #acct-settings .acc-sec,
html body .center-content .profile-form > .save-msg,
html body .center-content .profile-form > .success-message {
  margin-left: 0 !important;
  margin-right: 0 !important;
  width: auto !important;
  max-width: none !important;
  box-sizing: border-box !important;
}
html body .center-content .profile-form .op-panel,
html body .center-content .profile-form .pl-sec-card,
html body .center-content #acct-settings .acc-sec {
  margin-bottom: var(--column-gap, 6px) !important;
}
html body .center-content .profile-form .op-col-wrap,
html body .center-content .profile-form .form-row-half,
html body .center-content .profile-form .cvs-actions {
  gap: var(--column-gap, 6px) !important;
}
html body .center-content .profile-form > .dir-header {
  margin: 0 0 var(--column-gap, 6px) !important;
}
html body .center-content .profile-form { padding: 0 !important; }
html body .center-content .op-col-wrap > .op-panel { margin-bottom: 0 !important; }

/* ============================================================
   ---- 105. [v5.16.310] Repeatable records = separate windows ----
   ============================================================
   The v5.16.302 rule joined every .entry-block into one continuous
   panel — right for the Personal Info SECTIONS, wrong for REPEATABLE
   RECORDS (each experience, university, school, certification,
   project, award, volunteer entry), which must read as its own
   window. A record is identified by its Remove button, so records
   separate themselves in every profile tab automatically. */
html body .center-content .profile-form .entry-block:has(.remove-entry),
html body .center-content .profile-form .entry-block:has(> [id^="exp-"]),
html body .center-content .profile-form .entry-block[data-index] {
  border: 1px solid #e5e7eb !important;
  border-radius: var(--pl-r-cards, 10px) !important;
  margin-bottom: var(--column-gap, 6px) !important;
  padding: 12px !important;
  background: #ffffff !important;
  box-shadow: 0 1px 2px rgba(17,24,39,0.05);
  position: relative;
}
html body .center-content .profile-form .entry-block:has(.remove-entry) + .entry-block:has(.remove-entry) {
  border-top: 1px solid #e5e7eb !important;
}
html body .center-content .profile-form .entry-block:has(.remove-entry):first-of-type,
html body .center-content .profile-form .entry-block:has(.remove-entry):last-of-type {
  border-radius: var(--pl-r-cards, 10px) !important;
}

/* ---- 106. [v5.16.311] Personal Info: every section has round corners ----
   The continuous-panel rule (v5.16.302) squared the joins so the
   sections would read as one block — which left the middle sections
   (Contact, Profile Details) with sharp corners. Per direction each
   section is now its own rounded window: all four corners rounded,
   full border, standard gap between them. */
html body .center-content .profile-form .entry-block {
  border: 1px solid #e5e7eb !important;
  border-radius: var(--pl-r-cards, 10px) !important;
  margin-bottom: var(--column-gap, 6px) !important;
  background: #ffffff !important;
}
html body .center-content .profile-form .entry-block:not(:first-of-type) {
  border-top-left-radius: var(--pl-r-cards, 10px) !important;
  border-top-right-radius: var(--pl-r-cards, 10px) !important;
  border-top: 1px solid #e5e7eb !important;
}
html body .center-content .profile-form .entry-block:not(:last-of-type) {
  border-bottom-left-radius: var(--pl-r-cards, 10px) !important;
  border-bottom-right-radius: var(--pl-r-cards, 10px) !important;
  border-bottom: 1px solid #e5e7eb !important;
}
html body .center-content .profile-form .op-body > .entry-block,
html body .center-content .op-panel .op-body .entry-block {
  border: none !important;
  background: transparent !important;
  margin-bottom: 0 !important;
}

/* ---- 107. [v5.16.312] Add/Save rows identical on every tab ----
   Certifications (and the other tabs using .btn-row) rendered a
   squared button strip, while Projects — which uses a plain flex row
   — looked right. The .btn-row rows now match the Projects pattern:
   no strip background, buttons follow the standard shape, gray for
   Add and purple for Save. */
html body .center-content .profile-form .btn-row {
  display: flex !important;
  gap: 8px !important;
  align-items: center !important;
  margin: 10px 0 !important;
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
}
html body .center-content .profile-form .btn-row button {
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 5px 16px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  border: none !important;
  cursor: pointer;
}
html body .center-content .profile-form .btn-row button[type="button"] {
  background: #6b7280 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}
html body .center-content .profile-form .btn-row button[type="submit"] {
  background: #5f5d58 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}

/* ============================================================
   ---- 108. [v5.16.313] EVERY tab's action row, once and for all ----
   ============================================================
   Applies the Projects pattern to every action row in every profile
   AND settings tab, whatever wrapper it uses (.btn-row, .form-actions,
   .cv-actions, a bare div, or the form itself): no strip background,
   no border, buttons take the standard shape — gray for secondary
   (+ Add / Cancel / Remove) and purple for the primary Save. Written
   generically so new tabs inherit it without another request. */
html body .center-content .profile-form .btn-row,
html body .center-content .profile-form .form-actions,
html body .center-content .profile-form .cv-actions,
html body .center-content .profile-form .save-row,
html body .center-content .profile-form form > div:has(> button[type="submit"]),
html body .center-content #acct-settings form > div:has(> button[type="submit"]) {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 10px 0 0 !important;
  display: flex !important;
  align-items: center;
  gap: 8px !important;
}
html body .center-content .profile-form button[type="submit"],
html body .center-content .profile-form .save-btn,
html body .center-content #acct-settings button[type="submit"] {
  background: #5f5d58 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border: none !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 18px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  cursor: pointer;
}
html body .center-content .profile-form button[type="submit"]:hover,
html body .center-content #acct-settings button[type="submit"]:hover { background: #3f3d39 !important; }
html body .center-content .profile-form button[type="button"]:not(.remove-entry):not(.cvs-btn):not(.acc-card),
html body .center-content .profile-form .add-entry {
  background: #6b7280 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border: none !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 16px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  cursor: pointer;
}
html body .center-content .profile-form .remove-entry {
  background: #6b7280 !important;
  color: #ffffff !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 3px 12px !important;
  font-size: 12px !important;
  border: none !important;
}

/* ---- 109. [v5.16.314] The white block under the Save button ----
   The remaining square-cornered white area is the <form> itself
   (and any generic wrapper) inside the profile tabs — it paints
   white behind the button row with no radius. Forms and plain
   wrappers are now transparent: only the section cards carry white,
   so the Save button sits on the page background with nothing
   squared behind it. */
html body .center-content .profile-form > form,
html body .center-content .profile-form form,
html body .center-content #acct-settings form,
html body .center-content .profile-form > div:not(.entry-block):not(.op-panel):not(.dir-header):not(.pl-sec-card):not(.op-col-wrap):not(.pl-sug-head):not(.pl-sug-job):not(.pl-adcard) {
  /* [v5.16.422] .pl-sug-head and .pl-sug-job exempted. This rule was written
     for the PROFILE TABS, but .profile-form is also the class on the feed
     container (.feed-container.profile-form), and the feed suggestion heading
     and job rows are its DIRECT children — so at (0,7,3) this was silently
     flattening them while the profile cards (nested inside .pl-sug-people)
     escaped. This is the rule v5.16.418 hunted for and could not find: it
     never names the class, so grepping for "head" missed it. */
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
}

/* ============================================================
   ---- 110. [v5.16.315] Console findings fixed ----
   ============================================================
   (a) The active sidebar item measured radius 0 — the highlight
       behind Experience / Technical Skills was a hard rectangle.
       It now follows the Buttons shape like every other pill.
   (b) The tab's inner white blocks (.skills-panel, .entry-block)
       carried mismatched radii (10px vs 24px) — both now read the
       Cards slider so every window in a tab bends identically. */
html body .left-sidebar .nav-submenu li.active,
html body .left-sidebar .nav-submenu li.active > a,
html body .left-sidebar .nav-menu > li.active > a {
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  overflow: hidden;
}
html body .center-content .profile-form .skills-panel,
html body .center-content .profile-form .op-panel,
html body .center-content .profile-form .entry-block,
html body .center-content .profile-form .pl-sec-card {
  border-radius: var(--pl-r-cards, 10px) !important;
}
html body .center-content .profile-form .skills-panel-body { border-radius: 0 !important; }

/* ============================================================
   ---- 111. [v5.16.316] University's row is the reference ----
   ============================================================
   Comparison: University wraps Add + Save in .btn-row — a plain
   flex row on the page, which is why it looks right. Skills (and
   the tabs like it) put the Save button inside a .form-row and the
   Add button loose inside a panel, so they inherited field spacing
   and panel padding instead. Those rows now reproduce the .btn-row
   reference exactly: flex row, 8px gap, 10px top margin, no
   background, gray Add + purple Save in the standard shape. */
html body .center-content .profile-form .form-row:has(> button[type="submit"]),
html body .center-content .profile-form .form-row:has(> .save-btn),
html body .center-content .profile-form .skills-panel-body > button[type="button"],
html body .center-content .profile-form form > button[type="submit"] {
  display: flex !important;
  gap: 8px !important;
  align-items: center !important;
  margin: 10px 0 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
}
html body .center-content .profile-form .form-row > button[type="submit"],
html body .center-content .profile-form .form-row > .save-btn,
html body .center-content .profile-form .save-btn {
  background: #5f5d58 !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border: none !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 18px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  width: auto !important;
  display: inline-flex !important;
  align-items: center;
  gap: 6px;
  cursor: pointer;
}
html body .center-content .profile-form .skills-panel-body > button[type="button"],
html body .center-content .profile-form .skills-panel button[type="button"] {
  background: #6b7280 !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 16px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  width: auto !important;
  border: none !important;
}

/* ---- 112. [v5.16.317] .btn-row guaranteed on tabs that lack it ----
   Personal Info's save row is now a .btn-row (markup fix), but that
   tab never defined the class locally — so the styling is provided
   here for every tab, matching the University reference. */
html body .center-content .profile-form .btn-row {
  display: flex !important;
  gap: 8px !important;
  align-items: center !important;
  margin: 10px 0 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  max-width: none !important;
  width: auto !important;
}
html body .center-content .profile-form .btn-row button[type="submit"] {
  background: #5f5d58 !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border: none !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 18px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  width: auto !important;
  cursor: pointer;
}
html body .center-content .profile-form .btn-row button[type="submit"]:hover { background: #3f3d39 !important; }

/* ---- 113. [v5.16.318] The invisible box: 700px form cap removed ----
   Six profile tabs declared `.profile-form { max-width:700px; margin:
   0 auto }` locally. Inside a 614px column that reserved a centred
   block wider than the content, leaving invisible empty space beside
   and below the sections — the box the user could feel but not see.
   The form now fills its column exactly. */
html body .center-content .profile-form {
  max-width: 100% !important;
  width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* ---- 114. [v5.16.319] Breathing room after the action row ----
   With the 700px cap gone the content sits flush to the column edge
   and the Add/Save row ends hard against the footer. A little air is
   restored: side padding inside the column and space below the last
   action row. */
html body .center-content .profile-form,
html body .center-content #acct-settings {
  padding: 0 10px 18px !important;
  box-sizing: border-box !important;
}
html body .center-content .profile-form .btn-row,
html body .center-content .profile-form .form-row:has(> button[type="submit"]),
html body .center-content .profile-form form > div:has(> button[type="submit"]) {
  margin: 12px 0 6px !important;
}

/* ---- 115. [v5.16.320] Middle container: square, and more air ----
   Per direction the centre column never bends — it is removed from
   the Side panels corner group and pinned square here, so no Site
   Settings slider can round it. Padding is also increased a step so
   the content clears the column edges comfortably. */
html body .center-content {
  border-radius: 0 !important;
  /* [v5.16.321] overflow:visible broke the column's scrolling — the
     centre column scrolls its own content. Vertical scrolling is
     restored; horizontal stays hidden. */
  overflow-y: auto !important;
  overflow-x: hidden !important;
}
html body .center-content .profile-form,
html body .center-content #acct-settings {
  padding: 0 16px 24px !important;
}
html body .center-content .profile-form .btn-row,
html body .center-content .profile-form .form-row:has(> button[type="submit"]),
html body .center-content .profile-form form > div:has(> button[type="submit"]) {
  margin: 16px 0 10px !important;
}

/* ---- 116. [v5.16.321] Sidebar hover/active = the gray pill ----
   Per direction (reference: the Remove button): the left sidebar's
   hover and active states now use the SAME gray pill as the
   platform's buttons — no lavender tint, no purple text, no odd
   variant styling. */
html body .left-sidebar .nav-submenu li > a:hover,
html body .left-sidebar .nav-menu > li > a:hover {
  background: #6b7280 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
}
html body .left-sidebar .nav-submenu li.active > a,
html body .left-sidebar .nav-menu > li.active > a {
  background: #6b7280 !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  border-left: none !important;
  box-shadow: none !important;
}
html body .left-sidebar .nav-submenu li.active,
html body .left-sidebar .nav-menu > li.active {
  background: transparent !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
}
html body .left-sidebar .nav-submenu li > a:hover svg,
html body .left-sidebar .nav-submenu li.active > a svg {
  stroke: #ffffff !important;
}

/* ---- 117. [v5.16.322] Connections starts like Engagements ----
   Engagements wraps its page in .feed-container.profile-form — a
   transparent shell, so the purple heading bar is the first thing on
   the page and the cards follow beneath it. Connections used the
   boxed .conn-page shell, so its heading sat inside a white block.
   The wrapper now matches, and the shell is guaranteed transparent. */
html body .center-content .conn-page,
html body .center-content #engagements-page {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 16px 24px !important;
}
html body .center-content .conn-page > .dir-header.pl-page-head,
html body .center-content #engagements-page > .dir-header.pl-page-head {
  margin: 0 0 var(--column-gap, 6px) !important;
}

/* ============================================================
   ---- 118. [v5.16.323] Registration tabs get the same treatment ----
   ============================================================
   Same corrections the profile and settings tabs received:
   (a) the outer .company-page/.profile-form wrapper is transparent
       so the purple heading bar sits first on the page;
   (b) each .reg-form-section is its own rounded white window that
       follows the Cards slider, with the standard gap between them;
   (c) forms and plain wrappers paint nothing behind the buttons;
   (d) action rows use the University pattern — gray secondary,
       purple Save, standard shape, sized to their text;
   (e) the same side padding and bottom air as the other tabs. */
html body .center-content .profile-form.company-page {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  /* [v5.16.326] Was `0 16px 24px`, which — because this selector carries
     BOTH .profile-form and .company-page (0,3,2) — out-ranked the v5.16.325
     gutter-zeroing rule `.center-content .company-page` (0,2,2) and left a
     16px (~4.2mm) gutter each side, the one the other tabs don't have. Now
     zeroed like every other wrapper; the column's own --pl-gap is the only
     inset, so registration matches and no gap exceeds 2mm. */
  padding: 0 !important;
  max-width: 100% !important;
  width: 100% !important;
  margin: 0 !important;
}
html body .center-content .company-page > .dir-header {
  margin: 0 0 var(--column-gap, 6px) !important;
}
html body .center-content .company-page .reg-form-section {
  background: #ffffff !important;
  border: 1px solid #e5e7eb !important;
  border-radius: var(--pl-r-cards, 10px) !important;
  margin-bottom: var(--column-gap, 6px) !important;
  padding: 12px 14px !important;
  box-sizing: border-box !important;
}
html body .center-content .company-page form,
html body .center-content .company-page form > div:not(.reg-form-section) {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
}
html body .center-content .company-page .reg-row,
html body .center-content .company-page .form-row { margin-bottom: 6px !important; }
html body .center-content .company-page label { margin-bottom: 3px !important; }
html body .center-content .company-page button[type="submit"],
html body .center-content .company-page .reg-submit {
  background: #5f5d58 !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border: none !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 18px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  width: auto !important;
  cursor: pointer;
}
html body .center-content .company-page button[type="button"] {
  background: #6b7280 !important;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  border: none !important;
  border-radius: var(--pl-r-buttons,var(--pl-btn-radius,999px)) !important;
  padding: 6px 16px !important;
  font-size: 12px !important;
  font-weight:500 !important;
  width: auto !important;
  cursor: pointer;
}
html body .center-content .company-page form > div:has(> button[type="submit"]) {
  display: flex !important;
  gap: 8px !important;
  align-items: center !important;
  margin: 16px 0 10px !important;
  padding: 0 !important;
  background: transparent !important;
}
html body .center-content .company-page input[type="text"],
html body .center-content .company-page input[type="email"],
html body .center-content .company-page input[type="url"],
html body .center-content .company-page input[type="tel"],
html body .center-content .company-page select,
html body .center-content .company-page textarea {
  background: #ffffff !important;
  border: 1px solid #d1d5db !important;
}

/* ============================================================
   ---- 119. [v5.16.324] STANDING RULE: nothing over 2mm apart ----
   ============================================================
   Platform-wide cap, per direction: the gap between ANY two
   elements — vertical or horizontal, sidebar to content, card to
   card, field to field, button to button — never exceeds 2mm.
   One token governs it all: --pl-gap (6px ~ 1.6mm). Change that
   single value and the entire platform re-spaces. Container inner
   padding is capped at twice the gap so content never touches an
   edge while staying tight. */
html body {
  --pl-gap: 6px;
  --column-gap: var(--pl-gap);
}
/* columns and the grid frame */
html body .dashboard-grid {
  gap: var(--pl-gap) !important;
  padding: var(--pl-gap) !important;
}
/* every stacked block inside the content column */
html body .center-content > *,
html body .center-content .profile-form > *,
html body .center-content .conn-page > *,
html body .center-content #engagements-page > *,
html body .center-content .cr-page > *,
html body .center-content .company-page > * {
  margin-bottom: var(--pl-gap) !important;
}
html body .center-content > *:last-child,
html body .center-content .profile-form > *:last-child { margin-bottom: 0 !important; }
/* cards, sections, panels */
html body .center-content .post-card,
html body .center-content .feed-post,
html body .center-content .conn-card,
html body .center-content .cr-card,
html body .center-content .cr-sal-card,
html body .center-content .dir-card,
html body .center-content .job-card,
html body .center-content .entry-block,
html body .center-content .op-panel,
html body .center-content .reg-form-section,
html body .center-content .acc-sec,
html body .center-content .pl-sec-card,
html body .center-content .skills-panel {
  margin-bottom: var(--pl-gap) !important;
}
/* grids and flex rows */
html body .dir-grid,
html body .cr-list,
html body .cr-breakdown,
html body .op-col-wrap,
html body .form-row-half,
html body .btn-row,
html body .cvs-actions,
html body .conn-tabs,
html body .cr-toolbar,
html body .dir-filters,
html body .eng-tabs,
html body .search-tabs {
  gap: var(--pl-gap) !important;
}
/* fields and their labels */
html body .center-content .form-row,
html body .center-content .reg-row { margin-bottom: var(--pl-gap) !important; }
html body .center-content .form-row label,
html body .center-content .reg-row label { margin-bottom: 3px !important; }
/* inner padding: never more than 2x the gap */
html body .center-content .entry-block,
html body .center-content .op-panel .op-body,
html body .center-content .reg-form-section,
html body .center-content .acc-sec,
html body .center-content .pl-sec-card,
html body .center-content .post-card {
  padding: calc(var(--pl-gap) * 2) !important;
}
html body .center-content .profile-form,
html body .center-content .conn-page,
html body .center-content #engagements-page,
html body .center-content .company-page,
html body .center-content #acct-settings {
  padding: 0 var(--pl-gap) calc(var(--pl-gap) * 2) !important;
}
/* headings and page bars */
html body .center-content .dir-header { margin-bottom: var(--pl-gap) !important; padding-bottom: 4px !important; }
html body .center-content h3 { margin: 0 0 var(--pl-gap) !important; }

/* ============================================================
   ---- 120. [v5.16.325] The real gutter culprit: column margins ----
   ============================================================
   Each column carries its own margin variables (--col1-margin-*,
   --col2-margin-* ...) from Site Settings, which ADD to the grid's
   column-gap — so the visible gutter was the gap PLUS two margins,
   well over 2mm. Every column margin is now zero and the single
   --pl-gap provides the only spacing, horizontally and vertically.
   Column inner padding is capped at the gap too, so the white panel
   fills its column and content sits one gap from the edge. */
html body .dashboard-grid {
  column-gap: var(--pl-gap, 6px) !important;
  row-gap: var(--pl-gap, 6px) !important;
  padding: var(--pl-gap, 6px) !important;
}
html body .left-sidebar,
html body .center-content,
html body .users-panel,
html body .right-sidebar {
  margin: 0 !important;
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  padding: var(--pl-gap, 6px) !important;
}
html body .info-banner {
  margin: var(--pl-gap, 6px) var(--pl-gap, 6px) 0 !important;
}
html body .dashboard-center { padding: 0 !important; }
/* the content column's own children already carry --pl-gap spacing,
   so they must not add a second inset */
html body .center-content .profile-form,
html body .center-content .conn-page,
html body .center-content #engagements-page,
html body .center-content .company-page,
html body .center-content #acct-settings,
html body .center-content .cr-page,
html body .center-content .feed-container {
  padding: 0 !important;
  margin: 0 !important;
}

/* [v5.17.29] The v5.17.21 sticky "Feed" heading was removed — it collided
   with the fixed top banner/timeline structure above the feed (the header rode
   up into the banner as the feed scrolled). The page's fixed structure
   (banner, columns, heading) must stay untouched, so the Feed heading now
   scrolls normally with the content like every other tab's header. */

/* [v5.17.30] Platform-wide boundary gap. Requirement: no letter/content may
   start flush against a panel's left or right edge — a minimum ~1mm (4px) gap
   must always exist on both sides, everywhere. Implemented with max() so it
   only ever RAISES padding to the 4px floor and never shrinks any existing
   larger padding, so no layout is disturbed. Applied to the three scroll
   columns and the common card/panel/row containers. */
html body .left-sidebar,
html body .center-content,
html body .right-sidebar {
  padding-left:  max(var(--col1-padding-left, 6px), 4px) !important;
  padding-right: max(var(--col1-padding-right, 6px), 4px) !important;
}
html body .center-content {
  padding-left:  max(var(--col2-padding-left, 15px), 4px) !important;
  padding-right: max(var(--col2-padding-right, 15px), 4px) !important;
}
html body .right-sidebar {
  padding-left:  max(var(--col4-padding-left, 5px), 4px) !important;
  padding-right: max(var(--col4-padding-right, 5px), 4px) !important;
}
/* Card containers that can legitimately be padding:0 (their inner rows do the
   insetting) still get the column-level gap above, so no extra rule is needed
   here — flooring the columns guarantees the boundary gap without doubling any
   card/row padding. */

/* [v5.20.16] Rain-city / animated banner: soften the card corners a little.
   .info-banner already has overflow:hidden inline, so the canvas clips to the
   rounded corners automatically. */
html body .banner-row,
html body .banner-row .info-banner {
    border-radius: var(--pl-r-banner, 6px) !important; /* [v5.20.760] Site Settings → Corners → Top banner (was a fixed 12px) */
    overflow: hidden !important;
}
html body .banner-row .info-banner > canvas {
    border-radius: var(--pl-r-banner, 6px);
}

/* ============================================================
   [v5.20.171] Forward Post dialog — compact desktop style
   Dense, Windows-app-like: small controls, tight spacing.
   ============================================================ */
html body .forward-overlay{background:rgba(20,19,17,.45);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:fwdFade .15s ease}
@keyframes fwdFade{from{opacity:0}to{opacity:1}}
html body .forward-modal{border-radius:8px;overflow:hidden;width:340px;max-width:92vw;box-shadow:0 10px 38px rgba(0,0,0,.26),0 2px 8px rgba(0,0,0,.12);animation:fwdPop .16s ease-out}
@keyframes fwdPop{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* Header — slim title bar */
html body .forward-header{padding:9px 12px;border-bottom:1px solid var(--c-border)}
html body .forward-header h3{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;color:var(--c-text-primary)}
html body .forward-header h3 svg{width:12px;height:12px}
html body .forward-modal .forward-close{width:24px;height:24px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:15px;color:var(--c-text-muted);transition:background .12s,color .12s}
html body .forward-modal .forward-close:hover{background:var(--c-danger);color:#fff}

/* Tabs — small segmented control */
html body .fwd-tabs{border-bottom:none;margin:8px 10px 0;background:var(--c-bg-muted);border-radius:6px;padding:3px;gap:3px}
html body .fwd-tab{border:none;margin:0;border-radius:4px;padding:5px 4px;font-size:12px;font-weight:500;color:var(--c-text-muted);display:flex;align-items:center;justify-content:center;gap:5px;transition:background .12s,color .12s}
html body .fwd-tab svg{width:11px;height:11px}
html body .fwd-tab:hover{color:var(--c-text-dark)}
html body .fwd-tab.active{background:#fff;color:var(--c-text-primary);border:none;box-shadow:0 1px 2px rgba(0,0,0,.12)}

/* Panels — tight */
html body .fwd-panel{padding:8px 12px 12px}
html body .fwd-repost-info{font-size:12px;color:var(--c-text-muted);padding:2px 0;line-height:1.45}

/* Preview card — slim */
html body .fwd-repost-preview{border-radius:5px;border:1px solid var(--c-border);border-left:3px solid var(--c-primary);background:#fbfaf8;padding:7px 10px;margin:8px 0 2px;max-height:64px}
html body .fwd-repost-preview .fwd-rp-author{font-weight:600;color:var(--c-text-primary);font-size:12px;margin-bottom:1px}
html body .fwd-repost-preview #fwd-rp-content{font-size:11.5px;color:var(--c-text-muted);line-height:1.4}

/* Buttons — small, solid */
html body .fwd-repost-btn,html body .fwd-send-btn{border-radius:5px;padding:6px 12px;font-size:12.5px;font-weight:600;background:var(--c-primary);color:#fff;box-shadow:none;transition:background .12s;margin-top:10px}
html body .fwd-repost-btn:hover:not(:disabled),html body .fwd-send-btn:hover:not(:disabled){background:var(--c-primary-dark)}
html body .fwd-repost-btn:active:not(:disabled),html body .fwd-send-btn:active:not(:disabled){background:var(--c-primary-darkest)}
html body .fwd-repost-btn:disabled,html body .fwd-send-btn:disabled{background:var(--c-border-dark);color:#fff;opacity:.85}

/* Connections list — dense rows */
html body .fwd-conn-search{border-radius:5px;padding:6px 10px;font-size:12.5px;border:1px solid var(--c-border-dark);margin-bottom:6px;transition:border-color .12s,box-shadow .12s}
html body .fwd-conn-search:focus{outline:none;border-color:var(--c-primary);box-shadow:0 0 0 2px rgba(95,93,88,.15)}
html body .fwd-conn-list{max-height:220px}
html body .fwd-conn-item{border-radius:5px;padding:4px 6px;transition:background .1s}
html body .fwd-conn-item:hover{background:var(--c-bg-muted)}
html body .fwd-conn-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover}
html body .fwd-conn-name{font-weight:500;font-size:12.5px}
html body .fwd-conn-hl{font-size:11px;color:var(--c-text-muted)}
html body .fwd-send-bar{border-top:1px solid var(--c-border);margin-top:8px;padding-top:8px;display:flex;align-items:center;justify-content:space-between}
html body .fwd-send-bar .fwd-send-btn{margin-top:0;padding:5px 18px}
html body .fwd-selected-count{font-size:11.5px;color:var(--c-text-muted)}
html body .fwd-conn-empty{text-align:center;color:var(--c-text-muted);font-size:12.5px;padding:16px 8px;line-height:1.5}

/* Status messages */
html body .fwd-msg{margin:8px 12px 0;border-radius:5px;font-size:12px}
html body .fwd-msg.error{background:var(--c-danger-bg);color:var(--c-danger-deep);padding:6px 10px}
html body .fwd-msg.success{background:var(--c-success-bg-vivid);color:var(--c-success-deep);padding:6px 10px}

/* Mini profile popup — matching compact look */
html body .fwd-profile-card{border-radius:8px;overflow:hidden;box-shadow:0 10px 38px rgba(0,0,0,.26)}

/* Mobile: keep bottom sheet */
@media (max-width:520px){
  html body .forward-overlay{align-items:flex-end}
  html body .forward-modal{width:100%;max-width:100% !important;margin:0 !important;border-radius:10px 10px 0 0;max-height:85vh}
}

/* [v5.20.172] Guarantee viewport centering for the Forward dialog */
html body .forward-overlay{position:fixed !important;inset:0 !important}
html body .forward-overlay.active{display:flex !important}

/* [v5.20.173] When anchored to a post, the modal uses its own fixed coordinates */
html body .forward-overlay.fwd-anchored{justify-content:flex-start;align-items:flex-start}
html body .forward-overlay.fwd-anchored .forward-modal{position:fixed;margin:0}

/* ============================================================
   [v5.20.176] Compact button & tag standard
   ~1mm (4px) vertical padding, 6px horizontal; text perfectly
   centred; uniform height; aligned multi-button rows.
   ============================================================ */
html body button,html body .btn,html body input[type="submit"],html body input[type="button"],
html body .post-btn,html body .comment-submit-btn,html body .reply-submit-btn,html body .conn-btn,
html body .conn-tab,html body .jobs-tab,html body .reg-tab,html body .pj-tab,
html body .privacy-quick-btn,html body .privacy-save-btn,html body .sv-unsave,html body .sv-footer-btn{
  padding:4px 6px !important;
  font-size:12px !important;
  line-height:1 !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  text-align:center !important;
  gap:4px;
  vertical-align:middle;
  box-sizing:border-box;
}
/* Primary/save actions: same height, slightly wider so labels breathe */
html body .save-btn,html body .btn-save,html body button[name^="save_"],
html body .fwd-repost-btn,html body .fwd-send-btn{
  padding:4px 10px !important;
  font-size:12px !important;
  line-height:1 !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  gap:4px !important;
}
html body .hero a.button{padding:4px 10px;font-size:12px;line-height:1;display:inline-flex;align-items:center;justify-content:center}

/* Icons inside buttons: sized to the text, centred with it */
html body button svg,html body .btn svg,html body .save-btn svg{width:12px;height:12px;flex:none}
html body button img.btn-ico{width:12px;height:12px}

/* Tags (cpv-tag etc.): same 1mm rhythm, centred text */
html body .cpv-tag{display:inline-flex !important;align-items:center !important;justify-content:center !important;padding:3px 6px !important;line-height:1 !important;vertical-align:middle}

/* Multi-button rows: even 6px gaps, one baseline, no stray offsets */
html body .form-actions,html body .modal-actions,html body .cz-row,
html body .fwd-send-bar,html body .card-actions,html body .btn-row{
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;
}
html body .form-actions>button,html body .modal-actions>button,html body .card-actions>button,
html body .btn-row>button,html body .form-actions>.btn,html body .modal-actions>.btn{
  margin-top:0 !important;margin-bottom:0 !important;
}

/* ═══════════════════════════════════════════════════════════════════════════
   [v5.20.629] SALARIES — ROW LAYOUT (PK). One full-width row per salary
   replaces the 3-tile grid; figures right-aligned behind a divider so they
   line up and compare at a glance. Late in the file on purpose: outranks the
   earlier 3-column !important rules by order at equal specificity.
   ═══════════════════════════════════════════════════════════════════════════ */
html body #salariesList.cr-list { display: block !important; grid-template-columns: none !important; }
html body #salariesList .cr-sal-card.cr-sal-row { width: 100%; margin: 0 0 10px; padding: 14px 18px; font-size: 12.5px; }
html body .cr-sal-row .cr-sal-rowmain { display: flex; align-items: flex-start; gap: 12px; }
html body .cr-sal-row .cr-sal-coavatar {
  flex: 0 0 auto; width: 38px; height: 38px; border-radius: 9px;
  background: #ede9fe; color: #5b21b6; font-weight: 700; font-size: 16px;
  display: flex; align-items: center; justify-content: center;
}
html body .cr-sal-row .cr-sal-rowleft { flex: 1 1 auto; min-width: 0; }
html body .cr-sal-row .cr-sal-title { font-size: 14px; font-weight: 600; color: #111827; line-height: 1.3; }
html body .cr-sal-row .cr-sal-company { font-size: 12px; color: #4b5563; font-weight: 500; margin-top: 1px; }
html body .cr-sal-row .cr-sal-dept-inline { color: #6b7280; font-weight: 400; }
html body .cr-sal-row .cr-sal-details { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 5px; }
html body .cr-sal-row .cr-sal-benefits,
html body .cr-sal-row .cr-sal-notes { margin-top: 7px; font-size: 11.5px; color: #6b7280; }
html body .cr-sal-row .cr-sal-rowright {
  flex: 0 0 auto; text-align: right; min-width: 160px; max-width: 220px;
  padding-left: 16px; border-left: 1px solid var(--c-border, #eef0f3); align-self: stretch;
}
html body .cr-sal-row .cr-sal-amount { font-size: 19px; font-weight: 700; color: #047857; margin: 0; line-height: 1.2; white-space: nowrap; }
html body .cr-sal-row .cr-sal-period { font-size: 11px; color: #9ca3af; margin-top: 1px; }
html body .cr-sal-row .cr-sal-bonus { font-size: 11.5px; color: #b45309; margin-top: 5px; white-space: nowrap; }
html body .cr-sal-row .cr-sal-footer {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--c-border, #f0f0f0);
}
html body .cr-sal-row .cr-sal-user { font-size: 11px; color: #9ca3af; white-space: nowrap; }
/* phones: money drops under the text block, left-aligned, no divider */
@media (max-width: 640px) {
  html body .cr-sal-row .cr-sal-rowmain { flex-wrap: wrap; }
  html body .cr-sal-row .cr-sal-rowright { border-left: 0; padding-left: 50px; text-align: left; min-width: 0; width: 100%; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   [v5.20.630] COMPANY & RECRUITER DIRECTORY — ROW LAYOUT (PK). One full-width
   row per company instead of the 3-up tile grid, matching the Salaries rows:
   logo + name block left, chips/location/site flowing after, Follow pinned
   right, description clamped to two lines underneath. Late in the file so it
   outranks the earlier grid rules by order.
   ═══════════════════════════════════════════════════════════════════════════ */
html body .dir-grid { display: block !important; grid-template-columns: none !important; }
html body #dir-grid .dir-card {
  height: auto; width: 100%;
  margin: 0 0 10px; padding: 13px 18px;
  flex-direction: row !important; flex-wrap: wrap; align-items: center;
  gap: 6px 14px; position: relative;
}
html body #dir-grid .dir-card .dir-card-top { order: 1; display: flex; align-items: center; gap: 12px; flex: 0 0 280px; min-width: 220px; margin: 0; }
html body #dir-grid .dir-card .dir-logo-wrap { margin: 0; flex: 0 0 auto; }
html body #dir-grid .dir-card .dir-logo,
html body #dir-grid .dir-card .dir-logo-placeholder { width: 44px !important; height: 44px !important; font-size: 18px; }
html body #dir-grid .dir-card .dir-card-info { min-width: 0; }
html body #dir-grid .dir-card .dir-card-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
html body #dir-grid .dir-card .dir-card-tags { order: 2; display: flex; flex-wrap: wrap; gap: 5px; margin: 0; }
html body #dir-grid .dir-card .dir-card-tags .dir-tag { white-space: nowrap; }
html body #dir-grid .dir-card .dir-card-location { order: 3; margin: 0; white-space: nowrap; }
html body #dir-grid .dir-card .dir-card-web { order: 4; margin: 0; white-space: nowrap; }
html body #dir-grid .dir-card .pl-follow-wrapper {
  order: 5; margin: 0 0 0 auto !important; padding: 0; border: 0; width: auto; flex: 0 0 auto;
  display: flex; align-items: center; gap: 8px;
}
html body #dir-grid .dir-card .dir-card-desc {
  order: 6; flex: 1 1 100%;
  margin: 2px 0 0; text-align: left;
  -webkit-line-clamp: 2;
}
html body #dir-grid .dir-card .dir-badge-paused { position: absolute; top: 10px; right: 14px; }
/* phones: name block takes the full first line, the rest wraps under it */
@media (max-width: 760px) {
  html body #dir-grid .dir-card .dir-card-top { flex: 1 1 100%; min-width: 0; }
  html body #dir-grid .dir-card .pl-follow-wrapper { margin-left: 0 !important; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   [v5.20.631] REVIEW & SALARY TEXT — ROWS, BULLETS, PERFECT ALIGNMENT (PK).
   Pros / Cons / Advice / Comments stack as full-width rows (no more three
   cramped columns), their free text renders as justified bullet points, and
   the right-hand rating bars align exactly: fixed label column, bars all the
   same length, scores right-aligned. Late in the file to outrank earlier
   grid rules by order.
   ═══════════════════════════════════════════════════════════════════════════ */
/* Pros / Cons / Advice: one row each, full width */
html body #reviewsList .cr-pros-cons,
html body #reviewsList .cr-pros-cons.has-advice {
  grid-template-columns: 1fr !important;
  gap: 8px !important;
  margin: 6px 0 0 !important;
}
html body #reviewsList .cr-pc-block {
  padding: 8px 10px;
  background: var(--c-bg-soft, #fafafa);
  border: 1px solid var(--c-border, #f0f0f1);
  border-radius: 8px;
}
html body #reviewsList .cr-pc-label { font-size: 11.5px; font-weight: 600; color: #374151; margin-bottom: 3px; }
/* Bulleted, justified free text */
html body .cr-pc-bullets {
  margin: 0; padding: 0 0 0 16px;
  list-style: disc outside;
}
html body .cr-pc-bullets li {
  font-size: 12px; color: #374151; line-height: 1.5;
  text-align: justify; text-justify: inter-word;
  margin: 0 0 2px; padding: 0;
}
html body .cr-pc-bullets li::marker { color: #9ca3af; }
html body .cr-sal-benefits .cr-pc-bullets li,
html body .cr-sal-notes .cr-pc-bullets li { font-size: 11.5px; color: #6b7280; }
html body .cr-sal-benefits strong { display: block; font-size: 11.5px; color: #374151; margin-bottom: 2px; }
/* Rating bars: label column fixed, bars equal length, scores right-aligned */
html body #reviewsList .cr-breakdown .cr-bar-label { flex: 0 0 96px !important; }
html body #reviewsList .cr-breakdown .cr-bar-track { flex: 1 1 auto !important; width: auto !important; min-width: 40px; }
html body #reviewsList .cr-breakdown .cr-bar-val { flex: 0 0 30px !important; text-align: right; }

/* [v5.20.640] Company/recruiter profile → Jobs search: the magnifier sat on top
   of the placeholder. A later site-wide input rule reset the 32px left padding
   reserved for the icon; re-assert it at higher specificity and centre the icon. */
html body .cpv-page .cpv-jobs-search-wrap{position:relative!important;display:flex!important;align-items:center}
html body .cpv-page .cpv-jobs-search-wrap svg{position:absolute!important;left:12px!important;top:50%!important;transform:translateY(-50%)!important;z-index:1;pointer-events:none;color:#6b7280}
html body .cpv-page .cpv-jobs-search-wrap input{padding-left:36px!important;text-indent:0!important}

/* ═══════════════════════════════════════════════════════════════════════════
   [v5.20.660] JUSTIFIED BODY TEXT — platform-wide (PK). Every description and
   paragraph of running text is justified: job descriptions, posts, comments,
   company / recruiter about text, news, reviews, bios, CV entries, cards.
   Short UI text (buttons, labels, chips, headings) is untouched; centred
   empty-state messages stay centred. Last line of a paragraph stays left.
   ═══════════════════════════════════════════════════════════════════════════ */
html body .center-content p:not([style*="text-align"]),
html body .plsf-wrap p:not([style*="text-align"]),
html body .fjd-section-text,
html body .fjd-co-about,
html body .job-desc,
html body .cpv-job-desc,
html body .js-card-desc,
html body .dir-card-desc,
html body .cpv-about,
html body .cpv-news-content,
html body .post-content-full,
html body .post-content,
html body .gv2-post-body,
html body .comment-text,
html body .comment-body,
html body .cr-pc-text,
html body .cr-pc-bullets li,
html body .jco-p,
html body .vp-bio-text,
html body .vp-item-desc,
html body .cv-desc,
html body .cvs-card-desc,
html body .fwd-profile-bio,
html body .hp-cell-desc,
html body .cr-sal-notes,
html body .cr-sal-benefits,
html body .sj-desc,
html body .description,
html body .desc{
  text-align: justify !important;
  text-justify: inter-word;
  text-align-last: left;
}
/* keep centred messages centred */
html body .center-content [class*="empty"] p,
html body .center-content [class*="empty"],
html body .center-content [style*="text-align:center"] p,
html body .center-content [style*="text-align: center"] p,
html body .jobs-detail-empty p{
  text-align: center !important;
  text-align-last: center;
}

/* [v5.20.777] PK: on a member's profile the engagement buttons showed a dark
   fill — the theme's global button{background:var(--c-btn)} was painting them
   because the feed's inline "transparent" rule isn't emitted on the profile
   page. Make engagement buttons transparent everywhere, like the feed. */
html body .engagement-bar .engagement-btn,
html body .engagement-bar button.engagement-btn,
html body .vp-section .engagement-btn,
html body .vp-section .engagement-bar button{
  background:none !important;
  background-color:transparent !important;
  background-image:none !important;
  border:none !important;
  box-shadow:none !important;
}

/* [v5.20.786] Right-sidebar notifications / Updates panel: grow to fit its
   content instead of a fixed 220/180/150px box that hid items behind an inner
   scroll ("something is hiding"). Capped at 460px so a very long notifications
   list still scrolls rather than pushing the whole sidebar down. */
html body .notif-dashboard { height: auto !important; max-height: 460px !important; }

/* [v5.20.795] Consistent dropdowns site-wide. The native OS <select> widget drew
   the selected label off-centre (lower) on Windows, so dropdowns never matched
   the text inputs. Drop the native widget and draw our own chevron, so every
   dropdown's label is positioned by CSS and lines up with the inputs. Applies to
   single selects only; .pl-cs custom dropdowns (Jobs) are unaffected (not <select>). */
html body select:not([multiple]):not([size]){
  -webkit-appearance:none !important; -moz-appearance:none !important; appearance:none !important;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>") !important;
  background-repeat:no-repeat !important;
  background-position:right 10px center !important;
  background-size:12px !important;
  padding-right:30px !important;
}

/* [v5.20.797] Uniform field text across the whole platform (PK): every text
   input, select and textarea uses the same 13px text and line box, so dropdowns,
   text boxes and fields read the same size everywhere. Font + line-height only —
   padding/width are left to each field so search-icon inputs and fixed-width
   controls don't break. Checkboxes/radios/range/file/colour are excluded. */
html body input[type="text"], html body input[type="email"], html body input[type="password"],
html body input[type="search"], html body input[type="tel"], html body input[type="url"],
html body input[type="number"], html body input[type="date"], html body input[type="month"],
html body input[type="time"], html body input[type="datetime-local"], html body input[type="week"],
html body input:not([type]), html body select, html body textarea {
  font-size: 13px !important;
  line-height: normal !important;   /* [v5.20.798] normal line box so the single line self-centres vertically on every browser */
  vertical-align: middle !important;
}

/* [v5.20.950] POST ⋮ MENU — one definitive layout (PK: items were overlapping the dots and each other).
   Closed = not in the page at all. Open = a white panel hanging BELOW the dots, right-aligned, one row per item.
   Specificity (0,3,2) beats every older rule above (the left-of-the-dots row, the inline pl-dd-wide block). */
html body .post-card .post-actions-menu { position: relative !important; overflow: visible !important; }
html body .post-card .post-dropdown:not(.active):not(.show) { display: none !important; }
html body .post-card .post-dropdown.active,
html body .post-card .post-dropdown.show {
  display: flex !important; flex-direction: column !important; align-items: stretch !important; gap: 2px !important;
  position: absolute !important; top: calc(100% + 4px) !important; right: 0 !important; left: auto !important; bottom: auto !important;
  transform: none !important; margin: 0 !important; width: 160px !important; min-width: 160px !important; max-width: 160px !important;
  padding: 4px !important; background: #fff !important; border: 1px solid var(--c-border, #e5e7eb) !important; border-radius: 8px !important;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .14) !important; z-index: 100000 !important; white-space: nowrap !important; overflow: visible !important;
}
html body .post-card .post-dropdown .dropdown-item {
  display: flex !important; align-items: center !important; gap: 8px !important; width: 100% !important; min-width: 0 !important; max-width: none !important;
  height: 26px !important; line-height: 26px !important; padding: 0 10px !important; margin: 0 !important; flex: 0 0 26px !important; text-align: left !important;
  font-size: 12px !important; border-radius: 6px !important; box-sizing: border-box !important; opacity: 1 !important;
}
html body .post-card .post-dropdown .dropdown-item svg { width: 14px !important; height: 14px !important; flex: 0 0 14px !important; }
html body .post-card .post-dropdown .dropdown-item.delete { color: #dc2626 !important; -webkit-text-fill-color: #dc2626 !important; }

/* [v5.20.951] "Forwarded from" — one small line at the bottom of a forwarded post, same size everywhere */
html body .pl-fwd-from { display: flex !important; align-items: center !important; gap: 6px !important; margin: 8px 0 6px !important; padding: 6px 10px !important; font-size: 12px !important; line-height: 1.3 !important; color: var(--c-text-secondary, #6b7280) !important; background: var(--c-bg-muted, #f9fafb) !important; border: 1px solid var(--c-border, #e5e7eb) !important; border-radius: 8px !important; }
html body .pl-fwd-from a { display: inline-flex !important; align-items: center !important; gap: 6px !important; color: var(--c-text-primary, #111827) !important; font-weight: 600 !important; text-decoration: none !important; }
html body .pl-fwd-from img { width: 20px !important; height: 20px !important; border-radius: 50% !important; object-fit: cover !important; }
html body .pl-fwd-from .pl-fwd-ic { font-size: 13px !important; }
html body .pl-fwd-from .pl-fwd-date { font-size: 11px !important; color: var(--c-text-muted, #9ca3af) !important; }
html body .post-card .fwd-badge, html body .post-card .repost-label, html body .post-card .repost-card-header { display: none !important; }

/* [v5.20.952] no animation on the post menu, ever */
html body .post-dropdown, html body .post-dropdown .dropdown-item { transition: none !important; animation: none !important; }

/* [v5.20.976] forwarded post: the original inside a card (as in the app) */
html body .pl-fwdc{margin:6px 12px 8px;border:1px solid var(--c-border,#e5e7eb);border-radius:10px;background:#f8f7fb;overflow:hidden}
html body .pl-fwdc .pl-fwdc-head{display:flex;align-items:center;gap:10px;padding:10px 12px 8px;text-decoration:none!important;color:inherit}
html body .pl-fwdc .pl-fwdc-head img{width:36px;height:36px;border-radius:8px;object-fit:cover;flex:0 0 36px}
html body .pl-fwdc .pl-fwdc-head b{display:block;font-size:14px;color:var(--c-text-primary,#111827)}
html body .pl-fwdc .pl-fwdc-head small{display:block;font-size:12px;color:var(--c-text-secondary,#6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
html body .pl-fwdc .pl-fwdc-head span{min-width:0}
html body .pl-fwdc .post-media{margin:0!important}
html body .pl-fwdc .post-content-full{padding:8px 12px 10px!important;margin:0!important}
html body .pl-fwdc .post-media-item img{border-radius:0!important}
html body .post-card .pl-fwd-from{display:none!important}
