.root-header .publish-button {
  display: none;
}

.show-publish-button .root-header .publish-button {
  display: inline-block;
}
/* Ported from Greyhive Design/greyhive-homepage-mockup.html
   Transforms applied:
   1. App-shell rules deleted (header, sidebar, brand, nav, viewas/mocknote controls,
      topbar/catnav) — the plugin renders only its own content inside #gh-home.
   2. Every remaining content selector prefixed with `ghh-` and nested under #gh-home;
      :root custom properties scoped to #gh-home.
   3. Rail/hero layout replaced with the feed grid + shelf layout (task 9) — the
      old hero, value band, greeting and conversion-band rules are gone. */

#gh-home{
  /* Colour comes from peertube-theme-greyhive (stage 5). Only layout locals live here. */
  --ease:cubic-bezier(0.16,1,0.3,1);
  --pad:26px; --card-w:288px; --header:56px;

  position:relative;
  background:var(--bg); color:var(--fg);
  font-family:'DM Sans',system-ui,sans-serif; font-size:15px; line-height:1.5;
  -webkit-font-smoothing:antialiased;
  padding:26px 0 10px;
}
/* The reset stops at the edge of a card core renders. `#gh-home *` carries id
   specificity, so it beat the miniature component's own
   `.video-miniature:not(.display-as-row) my-video-thumbnail` block-ratio rule and
   flattened the 16:9 padding box to nothing — measured on staging: padding-top 0px on
   Home against 145.969px on Trending, so the card drew its text and no thumbnail at all.
   It took the component's internal spacing with it (the 0.35rem under the thumbnail, the
   1rem under the card, the 0.75rem beside the avatar).
   Do not "fix" this by restating those values here: the whole point of rendering core's
   component is that its measurements are not ours to keep in sync.

   The exclusion is wrapped in :where() because :where() contributes NO specificity. Written
   as `*:not(.ghh-native-card):not(.ghh-native-card *)` the reset climbs from (1,0,0) to
   (1,2,0) and starts beating this file's OWN section rules at (1,1,0) — measured on
   staging: the CTA collapsed 204px to 88px, shelf headers lost their 12px, tracks lost
   their padding, and the page flattened into one undifferentiated strip of videos. Adding
   an exclusion must not change what the rule already outranked. */
/* ⚠️ .gh-exclusive-badge joins the exemption because this reset was ZEROING ITS PADDING:
   measured against production, every other property matched and the padding came out 0px
   against its own 4.25px 9.35px. The badge is another plugin's element borrowed whole, so
   the fix is to stop overriding it rather than to restate its padding here and drift.
   Added INSIDE the existing :where(), which contributes no specificity — see the note
   above about what happens when this selector's weight changes. */
#gh-home *:not(:where(.ghh-native-card,.ghh-native-card *,.gh-exclusive-badge,.gh-exclusive-badge *)){box-sizing:border-box;margin:0;padding:0}
#gh-home a{color:inherit;text-decoration:none}
#gh-home button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
#gh-home img{max-width:100%;display:block}
#gh-home :focus-visible{outline:2px solid var(--gh-blue);outline-offset:2px;border-radius:4px}
#gh-home ::-webkit-scrollbar{width:10px;height:0}
#gh-home ::-webkit-scrollbar-thumb{background:#26262e;border-radius:100px;border:3px solid var(--bg)}

/* state visibility — logged-in vs logged-out content, toggled via #gh-home[data-state] */
#gh-home [data-when]{display:none}
#gh-home[data-state="out"] [data-when="out"]{display:var(--d,revert)}
#gh-home[data-state="in"]  [data-when="in"]{display:var(--d,revert)}

/* ============ CHIP BAR ============ */
/* Just a mount point now: the carousel it hosts brings its own layout, and the sticky
   blurred bar this used to be belonged to the chip row that no longer exists. */
/* The anchor sits outside .ghh-feed, so it carries the feed's own horizontal padding or
   the carousel runs edge to edge: measured, the first pill was clipped at x<0 and the last
   ran under the scroll arrow. Matching --pad lines the pill row up with the grid beneath it,
   which is the whole reason it sits there. */
/* ⚠️ Reserve what custom-menu is about to draw here. The pill row belongs to that plugin and
   arrives after this page has painted; 64px of it landing on top of the feed was 0.06 of the
   phone's CLS. The row measures 40px (52 with the desktop padding) plus its own 24px bottom
   margin, which collapses with the margin below rather than adding to it. */
#gh-home .ghh-chipbar{min-height:40px;margin-bottom:24px}
#gh-home .ghh-menu-anchor{display:block;padding:12px var(--pad) 0}
#gh-home .ghh-chipbar::-webkit-scrollbar{display:none}

/* ============ SHELVES ============ */
#gh-home .ghh-shelf-head .ghh-rule{flex:1;height:1px;background:var(--gh-line);margin-bottom:6px}
#gh-home .ghh-shelf-head .ghh-viewall{font-size:13px;color:var(--gh-mid);font-weight:500;white-space:nowrap;transition:.2s var(--ease);align-self:center}
#gh-home .ghh-shelf-head .ghh-viewall:hover{color:var(--primary)}
#gh-home .ghh-track{display:flex;gap:16px;overflow-x:auto;padding:2px var(--pad) 6px;scroll-snap-type:x proximity;scroll-padding-left:var(--pad)}

/* video card */
#gh-home .ghh-card{flex:none;width:var(--card-w);scroll-snap-align:start;transition:transform .3s var(--ease)}
#gh-home .ghh-card:hover{transform:translateY(-4px)}
#gh-home .ghh-thumb{position:relative;aspect-ratio:16/9;border-radius:4px;overflow:hidden;background:radial-gradient(120% 120% at 30% 0,#1b1b22,#0e0e12);border:1px solid rgba(255,255,255,.04)}
#gh-home .ghh-thumb .ghh-reticle{position:absolute;inset:0;margin:auto;width:44%;opacity:.09;stroke:var(--fg);fill:none}
#gh-home .ghh-thumb .ghh-badge{position:absolute;bottom:0;right:0;background:rgba(17,17,17,.8);color:var(--fg);font-size:12px;padding:2px 8px;border-radius:4px 0 0 0}
#gh-home .ghh-thumb .ghh-progress{position:absolute;left:0;right:0;bottom:0;height:4px;background:rgba(0,0,0,.5)}
#gh-home .ghh-thumb .ghh-progress i{display:block;height:100%;background:var(--primary)}
/* The avatar is content-box on purpose: core's is 34px of image inside a 2px ring, 38px
   overall, and this file's reset makes everything border-box, which shrank the whole mark
   to 34px and left the channel name starting exactly at the avatar's right edge — no gap,
   which is what Dan caught in Continue Watching. 12px (meta) + 42px = 54px puts the name
   6px past a 48px avatar edge, the same gap core leaves.

   Card metrics are core's my-video-miniature, read off a live Trending card at 1440px
   rather than guessed: thumbnail radius 4px, duration flush to the bottom-right corner
   with only its top-left rounded, text column inset 12px, avatar 34px at radius 5px in a
   2px black ring overlapping the thumbnail's bottom-left by 14px, channel 14px beside it,
   title 16px/700/24px in gold, meta 12px. Trending and Latest render the Angular
   component; this is the same card by measurement, because a plugin cannot instantiate a
   view-encapsulated component. If core's card changes, re-measure — do not eyeball. */
#gh-home .ghh-card-meta{position:relative;padding:6px 0 0 12px;font-family:'Lato',sans-serif}
#gh-home .ghh-card-meta .ghh-ch-av{position:absolute;left:10px;top:-14px;z-index:2;box-sizing:content-box;width:34px;height:34px;border-radius:5px;border:2px solid #000;background:linear-gradient(135deg,var(--gh-line),var(--input-bg));display:grid;place-items:center;font-family:'Space Mono';font-weight:700;font-size:12px;color:var(--primary);object-fit:cover}
#gh-home .ghh-card-ch{min-height:21px;padding-left:42px;font-size:14px;line-height:21px;color:var(--gh-mid);display:flex;align-items:center;gap:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#gh-home .ghh-card-ch .ghh-verif{color:var(--gh-blue);flex:none}
#gh-home .ghh-card-title{margin-top:2px;font-size:16px;font-weight:700;line-height:24px;color:var(--primary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#gh-home .ghh-card-stats{margin-top:5px;font-size:12px;line-height:18px;color:var(--gh-mid)}

/* shop card (VAPR™) */
#gh-home .ghh-shop-card{flex:none;width:210px;scroll-snap-align:start;background:var(--bg-secondary);border:1px solid rgba(255,255,255,.05);border-radius:12px;overflow:hidden;transition:.3s var(--ease)}
#gh-home .ghh-shop-card:hover{border-color:rgba(187,167,119,.35)}
/* overflow:hidden on the card already clips this, so the image grows INTO the frame
   rather than spilling over the name and price below it. */
#gh-home .ghh-shop-thumb .ghh-thumb-img{width:100%;height:100%;object-fit:cover;transition:transform .35s var(--ease)}
#gh-home .ghh-shop-card:hover .ghh-shop-thumb .ghh-thumb-img{transform:scale(1.12)}
@media (prefers-reduced-motion:reduce){
  #gh-home .ghh-shop-card:hover .ghh-shop-thumb .ghh-thumb-img{transform:none}
}
#gh-home .ghh-shop-thumb{position:relative;aspect-ratio:1/1;background:radial-gradient(120% 120% at 30% 10%,#20202a,#0f0f13);display:grid;place-items:center}
#gh-home .ghh-shop-thumb .ghh-reticle{width:44%;opacity:.1;stroke:var(--fg);fill:none}
#gh-home .ghh-shop-info{padding:12px}
#gh-home .ghh-shop-info .ghh-sh-name{font-size:13.5px;font-weight:500;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.6em}
#gh-home .ghh-shop-info .ghh-sh-seen{font-family:'Space Mono';font-size:10px;color:var(--gh-dim);margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#gh-home .ghh-shop-buy{display:flex;align-items:center;justify-content:space-between;margin-top:10px}
#gh-home .ghh-shop-buy .ghh-price{font-family:'Space Mono';font-weight:700;font-size:15px;color:var(--primary)}
#gh-home .ghh-shop-buy .ghh-shopbtn{display:inline-block;background:var(--gh-blue);color:#04121a;font-weight:700;font-size:12px;padding:6px 12px;border-radius:6px;transition:.2s var(--ease);text-decoration:none;cursor:pointer}
#gh-home .ghh-shop-buy .ghh-shopbtn:hover{background:var(--gh-blue-hi)}

/* real thumbnail images (task 4: render.js emits <img class="ghh-thumb-img"> when vm.thumbnailUrl is set) */
#gh-home .ghh-thumb-img{width:100%;height:100%;object-fit:cover}

/* skeleton loading state */
#gh-home .ghh-skel{background:#17171D;aspect-ratio:16/9;border-radius:10px}

/* responsive */
@media(max-width:760px){
  #gh-home{--pad:16px;--card-w:250px}
}
@media(prefers-reduced-motion:reduce){#gh-home *{transition:none!important;scroll-behavior:auto!important;animation:none!important}}

/* ---- feed grid ---- */
#gh-home .ghh-feed { display: flex; flex-direction: column; gap: 28px; padding-left: var(--pad); padding-right: var(--pad); }
#gh-home .ghh-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 24px 16px;
}
@media (max-width: 599px)  { #gh-home .ghh-grid { grid-template-columns: 1fr; } }
@media (min-width: 600px) and (max-width: 899px)  { #gh-home .ghh-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 900px) and (max-width: 1299px) { #gh-home .ghh-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1300px) { #gh-home .ghh-grid { grid-template-columns: repeat(4, 1fr); } }
/* grid cards stretch to fill their column instead of pinning to the shelf card's fixed width */
#gh-home .ghh-grid .ghh-card { width: auto; }

/* ---- shelves ---- */
#gh-home .ghh-shelf { position: relative; }
#gh-home .ghh-shelf-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 12px; }
#gh-home .ghh-shelf-head h2 { font-family: 'Bebas Neue', sans-serif; font-size: 28px; letter-spacing: 0.03em; margin: 0; }
#gh-home .ghh-shelf-scroller { position: relative; }
#gh-home .ghh-shelf .ghh-track {
  display: flex; gap: 16px; overflow-x: auto; scroll-behavior: smooth;
  scrollbar-width: none; -webkit-overflow-scrolling: touch;
  /* .ghh-feed already gutters the shelf; zero out the base .ghh-track rule's
     own padding/scroll-padding here so the gutter isn't applied twice. */
  padding-left: 0; padding-right: 0; scroll-padding-left: 0;
}
#gh-home .ghh-shelf .ghh-track::-webkit-scrollbar { display: none; }
/* shelf cards keep the file's one card width (var(--card-w)) via the base .ghh-card rule — no override needed */
#gh-home .ghh-shelf-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 44px; height: 44px; border-radius: 100px; border: 1px solid var(--gh-line);
  background: rgba(11, 11, 13, 0.85); color: var(--fg); cursor: pointer;
  display: grid; place-items: center;
}
#gh-home .ghh-shelf-arrow.ghh-prev { left: -8px; }
#gh-home .ghh-shelf-arrow.ghh-next { right: -8px; }
/* Arrows are a pointer affordance; touch users scroll the track directly. */
@media (hover: none) { #gh-home .ghh-shelf-arrow { display: none; } }
/* shorts shelf: portrait cards, tighter gap than the 16:9 shelves */
/* Six across, filling the row, rather than ten at a fixed 160px in a scroller nobody
   scrolled. 1fr columns mean the card grows with the content width instead of being
   pinned to a number that only looked right at one viewport — the shelf reads like
   YouTube's, where the cards are the shelf rather than a filmstrip inside it.
   The feed sends exactly six (feed.js shortsShelfSize), so this never wraps. */
#gh-home .ghh-shorts-shelf .ghh-track {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 12px;
  overflow-x: visible;
}

/* Nothing to scroll once the row holds everything it was sent. */
#gh-home .ghh-shorts-shelf .ghh-shelf-arrow { display: none; }

/* On a phone the shelf is a 2x2 block, the way YouTube's mobile web shorts row reads —
   Dan's call. It used to fall back to a horizontal filmstrip here, which put four of the six
   shorts off-screen behind a swipe most people never make. Two columns at 390px give each
   card a real thumbnail instead of six slivers.
   ⚠️ The feed sends SIX (feed.js shortsShelfSize); the last two would make a lopsided third
   row, so they are dropped on this breakpoint only. Anyone wanting the rest has "View all",
   which is the same promise the row made before. */
@media (max-width: 900px) {
  #gh-home .ghh-shorts-shelf .ghh-track {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    overflow-x: visible;
  }
  #gh-home .ghh-shorts-shelf .ghh-short-card:nth-child(n + 5) { display: none; }
  /* nothing to scroll any more */
  #gh-home .ghh-shorts-shelf .ghh-shelf-arrow { display: none; }
}

/* Featured products, two columns on a phone for the same reason: the rail's cards are a
   fixed 210px, which at 390px shows one and a sliver. `width:auto` lets the grid size them;
   the fixed width is a filmstrip measurement and means nothing inside a grid. */
@media (max-width: 900px) {
  #gh-home .ghh-shop-rail .ghh-track {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    overflow-x: visible;
  }
  #gh-home .ghh-shop-rail .ghh-shop-card { width: auto; }
  #gh-home .ghh-shop-rail .ghh-shelf-arrow { display: none; }
}

/* ---- shorts ---- */
/* min-width:0 so a long title cannot push a grid column wider than its share. The
   160px basis is for the filmstrip fallback only — a grid container ignores `flex` on
   its items, so it needs no undoing here. Undoing it anyway (`flex: initial`) collapsed
   the cards to 50px in the mobile fallback, where the flex basis is what sizes them. */
#gh-home .ghh-short-card { flex: 0 0 160px; min-width: 0; display: block; text-decoration: none; color: inherit; }
#gh-home .ghh-short-thumb {
  position: relative; aspect-ratio: 9 / 16; border-radius: 8px; overflow: hidden;
  background: var(--bg-secondary);
}
#gh-home .ghh-short-thumb .ghh-thumb-img { width: 100%; height: 100%; object-fit: cover; }
#gh-home .ghh-short-title {
  margin-top: 8px; font-family: 'Lato', sans-serif; font-size: 13px; line-height: 1.3;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
/* Whose short it is. Smaller than the video card's owner row because the card is 160px
   wide — the same 34px mark would leave the name about six characters. No overlap onto
   the thumbnail either: a 9:16 thumbnail's bottom-left is where the subject usually is. */
#gh-home .ghh-short-owner { display: flex; align-items: center; gap: 6px; margin-top: 6px; min-width: 0; }
#gh-home .ghh-short-owner .ghh-short-av {
  width: 20px; height: 20px; border-radius: 4px; flex: none; object-fit: cover;
  background: linear-gradient(135deg, var(--gh-line), var(--input-bg));
  display: grid; place-items: center;
  font-family: 'Space Mono', monospace; font-weight: 700; font-size: 9px; color: var(--primary);
}
#gh-home .ghh-short-ch {
  font-family: 'Lato', sans-serif; font-size: 12px; line-height: 18px; color: var(--gh-mid);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ---- signup CTA ---- */
#gh-home .ghh-cta {
  position: relative; border: 1px solid var(--primary); border-radius: 12px;
  background: var(--bg); padding: 32px 24px; text-align: center;
}
#gh-home .ghh-cta h2 { font-family: 'Bebas Neue', sans-serif; font-size: 34px; margin: 0 0 8px; color: var(--fg); }
#gh-home .ghh-cta p { font-family: 'DM Sans', sans-serif; color: var(--gh-mid); margin: 0 0 20px; }
#gh-home .ghh-cta-btn {
  display: inline-block; background: var(--primary); color: var(--bg); text-decoration: none;
  font-weight: 700; padding: 12px 28px; border-radius: 6px;
}
#gh-home .ghh-cta-btn:hover { background: var(--gh-gold-hi); }
#gh-home .ghh-cta-dismiss {
  /* In the corner, not floating near it — the 44px tap target is centred on the glyph, so
     the box is pulled out to the card's edge rather than inset by its own padding. */
  position: absolute; top: 0; right: 0; background: none; border: 0;
  color: var(--gh-dim); font-size: 22px; line-height: 1; cursor: pointer;
  /* 44px minimum touch target, per the community app's tab-bar fix. */
  min-width: 44px; min-height: 44px;
  display: grid; place-items: center;
}

#gh-home .ghh-sentinel { height: 1px; }

/* Shown when page 1 comes back failed or genuinely empty — the feed container
   already gutters horizontally, so this only needs vertical breathing room. */
#gh-home .ghh-empty { padding: 48px var(--pad); color: var(--gh-mid); text-align: center; }

/* ---------------------------------------------------------------------------------
   Native cards

   The box core's my-video-miniature is rendered into (peertubeHelpers.renderVideoMiniature).
   The component brings its own card styling — that is the entire point of using it — so
   nothing here touches its insides. These rules only give the box the same footprint the
   plugin's own card had, in the grid and along a shelf, so swapping one for the other does
   not move the layout.
   ------------------------------------------------------------------------------- */
#gh-home .ghh-grid .ghh-native-card { min-width: 0; }

#gh-home .ghh-shelf-scroller .ghh-native-card {
  flex: none;
  width: var(--card-w);
  scroll-snap-align: start;
}

/* Until the component mounts the box is empty and zero-height, which would let the grid
   collapse and then jump. Reserve a card's worth of height for one frame. */
#gh-home .ghh-native-card:empty {
  aspect-ratio: 16 / 9;
  border-radius: 4px;
  background: var(--bg-secondary);
}

/* Greyhive Exclusives: one video per row on a phone, so the badge and the title are legible
   rather than four thumbnails wide. The shelf's cards are sized for a filmstrip, so they take
   width:auto and the grid decides. Desktop keeps the filmstrip. */
/* The phone starts where every other page starts. Core's broadcast banner already leaves 32px
   below itself; this page was adding 26px of its own plus 12px under the chip row, so the
   first thing a reader saw was 70px of empty screen. Measured on production: chips at 208px
   here against 170px on Trending. Desktop keeps the breathing room. */
@media (max-width: 900px) {
  #gh-home { padding-top: 0; }
  #gh-home .ghh-menu-anchor { padding-top: 0; }

  /* Dan: halve the vertical space around the 16:9 cards on a phone. Measured per card, the
     empty space below one was 41px (core's miniature carries 16px of padding and 25px of
     margin) on top of the grid's own 24px row gap — 65px between one card's text and the
     next card's thumbnail, against YouTube's ~16. Halved here, and only here: Latest and
     Trending are core's own pages and keep core's spacing. */
  #gh-home .ghh-grid { row-gap: 12px; }
  #gh-home .ghh-native-card .video-miniature { padding-bottom: 8px; margin-bottom: 12px; }

  /* ⚠️ Hold the taller height. The heading is Bebas Neue, and until it arrives the fallback
     font wraps it to two lines — measured on staging, the card was 267px and then snapped to
     226px the moment the font loaded, taking the whole feed up 41px with it (0.024 of the
     phone's CLS). The content is centred, so the held height reads as air rather than a gap.
     Desktop needs none of this: the heading fits one line in both fonts there (204px, flat). */
  #gh-home .ghh-cta { min-height: 267px; }
}

@media (max-width: 900px) {
  #gh-home .ghh-exclusives-shelf .ghh-track {
    display: grid;
    grid-template-columns: 1fr;
    overflow-x: visible;
  }
  #gh-home .ghh-exclusives-shelf .ghh-card { width: auto; }
  #gh-home .ghh-exclusives-shelf .ghh-shelf-arrow { display: none; }
  /* Four here, as before. The feed sends six for the desktop scroller and one payload
     serves both widths, so the last two are hidden rather than re-fetched. */
  #gh-home .ghh-exclusives-shelf .ghh-card:nth-child(n + 5) { display: none; }
}

/* Desktop: three across, the other three a scroll away. The track is a flex scroller with a
   16px gap, so a third of the row less its two gaps puts exactly three in view and leaves
   the arrows something to scroll to. */
@media (min-width: 901px) {
  #gh-home .ghh-exclusives-shelf .ghh-card { width: calc((100% - 32px) / 3); }
  /* The row is 12px taller here — the anchor's own top padding. */
  #gh-home .ghh-chipbar { min-height: 52px; }
}

/* /p/exclusives — the listing behind the shelf's "View all". Everything else it needs is
   already scoped to #gh-home, which is why the page mounts under that id. */
#gh-home .ghx-foot { display: flex; justify-content: center; padding: 28px 0 48px; }
#gh-home .ghx-more {
  padding: 11px 22px;
  border: 1px solid var(--gh-line);
  border-radius: var(--input-border-radius, 6px);
  background: transparent;
  color: var(--primary);
  font-weight: 700;
  font-size: 14px;
  cursor: pointer;
}
#gh-home .ghx-more:hover { background: var(--bg-secondary); }
#gh-home .ghh-note { color: var(--gh-mid); text-align: center; padding: 20px 0; }

/**
 * Video watch page action bar tweaks (Greyhive).
 * Active when body has class gh-video-page (set by client plugin on /w/* and /videos/watch/* routes).
 */

body.gh-video-page .video-actions .action-dropdown.gh-save-in-menu {
  position: fixed;
  width: 1px;
  height: 1px;
  opacity: 0;
  overflow: visible;
  pointer-events: none;
  z-index: -1;
}

body.gh-video-page .video-actions .action-dropdown.gh-save-in-menu .dropdown-menu {
  pointer-events: auto;
}

body.gh-video-page my-subscribe-button .dropdown-toggle-split,
body.gh-video-page my-subscribe-button button[aria-label="Open subscription dropdown"] {
  display: none !important;
}

body.gh-video-page my-subscribe-button .btn-group > .btn.peertube-button.primary-button:not(.dropdown-toggle-split) {
  border-radius: var(--input-border-radius);
}

@media screen and (max-width: 800px) {
  body.gh-video-page .video-actions .action-button {
    padding: 4px 6px;
  }
}
/* Hide My Library menu by default */
.is-logged-in .top-menu .logged-in-menu a[href="/my-library"] {
    display: none;
}
/* Hide My Library menu by default */
.is-logged-in .top-menu .logged-in-menu a[href="/my-library"] {
    display: none;
}

/* Show My Library menu when `show-my-library` class is added */
.show-my-library .is-logged-in .top-menu .logged-in-menu a[href="/my-library"] {
    display: flex !important;
}

/* Hide video channels, videos, and playlists by default */
.in-my-library a[href="/my-library/video-channels"],
.in-my-library a[href="/my-library/videos"],
.in-my-library a[href="/my-library/video-playlists"] {
    display: none;
}

/* Show specific sections when respective classes are added */
.show-channels-in-my-library a[href="/my-library/video-channels"] {
    display: flex;
}

.show-videos-in-my-library a[href="/my-library/videos"] {
    display: flex;
}

.show-playlists-in-my-library a[href="/my-library/video-playlists"] {
    display: flex;
}

/* Hide sub-menu by default */
.root .sub-menu a[href="/my-library/video-channels"],
.root .sub-menu a[href="/my-library/videos"],
.root .sub-menu a[href="/my-library/video-playlists"] {
    display: none;
}

/* Show sub-menu when `show-root` class is added */
.show-root .sub-menu a[href="/my-library/video-channels"],
.show-root .sub-menu a[href="/my-library/videos"],
.show-root .sub-menu a[href="/my-library/video-playlists"] {

    display: flex;
}

/* Plugin Scoped Styles */

/* Match PeerTube core's collapsed menu-link behavior for our injected menu item */
.menu-container.collapsed #plugin-all-channels-menu-item .label {
  display: none;
}

.peertube-plugin-page-all-channels-container {
  width: 100%;
  background: var(--mainBackgroundColor);
  padding: 2rem 1rem;
}

.peertube-plugin-page-all-channels-content {
  width: 100%;
  max-width: 95%;
  margin: 0 auto;
  transition: max-width 0.3s ease;
}

/* Header */
.peertube-plugin-page-all-channels-header {
  margin-bottom: 2rem;
  text-align: center;
}

.peertube-plugin-page-all-channels-header h1 {
  color: var(--mainForegroundColor);
  font-size: 2.5rem;
  margin: 0;
  font-weight: 700;
}

/* Grid Layout */
.peertube-plugin-page-all-channels-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1.5rem;
  width: 100%;
  justify-content: center;
}

/* Channel Card */
.peertube-plugin-page-all-channels-card {
  display: flex;
  flex-direction: column;
  background: var(--menuBackgroundColor);
  border: 1px solid var(--inputBorderColor);
  border-radius: 8px;
  overflow: hidden;
  padding: 10px;
  height: auto;
  box-sizing: border-box;
  transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}

.peertube-plugin-page-all-channels-card-content {
  display: flex;
  margin-top: 10px;
}

.peertube-plugin-page-all-channels-card:hover {
  transform: translateY(-4px);
  border-color: var(--mainColor);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

/* Card Image */
.peertube-plugin-page-all-channels-card-image {
  flex: 0 0 120px;
  margin-right: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.peertube-plugin-page-all-channels-avatar {
  width: 120px;
  height: 120px;
  object-fit: cover;
  border-radius: 8px;
  border: 1px solid var(--inputBorderColor);
  transition: transform 0.3s ease;
}

.peertube-plugin-page-all-channels-card:hover .peertube-plugin-page-all-channels-avatar {
  transform: scale(1.05);
}

/* Card Info */
.peertube-plugin-page-all-channels-card-content {
  display: flex;
  margin-top: 10px;
}

.peertube-plugin-page-all-channels-section-label {
  display: none;
}

.peertube-plugin-page-all-channels-card-info {
  display: flex;
  flex-direction: column;
  justify-content: center;
  flex: 1;
}

.peertube-plugin-page-all-channels-actor-display-name {
  width: 100%;
  text-align: center;
  margin: 0;
  padding: 0;
  position: relative;
  z-index: 1;
}

.peertube-plugin-page-all-channels-actor-handle {
  display: none;
}

/* Only target links within our plugin's cards */
.peertube-plugin-page-all-channels-card .peertube-plugin-page-all-channels-name-link {
  color: var(--mainForegroundColor);
  text-decoration: none;
  transition: color 0.2s ease;
  display: block;
}

.peertube-plugin-page-all-channels-card .peertube-plugin-page-all-channels-name-link:hover {
  color: var(--mainHoverColor);
}

/* Stats */
.peertube-plugin-page-all-channels-actor-counters {
  display: flex;
  gap: 15px;
  font-size: 13px;
  color: var(--mainForegroundColor);
  margin-bottom: 5px;
  justify-content: flex-start;
}

.peertube-plugin-page-all-channels-channel-buttons {
  display: flex;
  justify-content: flex-start;
}

/* Subscribe Button */
.peertube-plugin-page-all-channels-subscribe-btn {
  padding: 5px 10px;
  border-radius: 4px;
  border: 1px solid var(--mainColor);
  background-color: var(--mainColor);
  color: white;
  cursor: pointer;
  font-size: 13px;
  transition: all 0.2s ease;
  max-width: 120px;
}

.peertube-plugin-page-all-channels-subscribe-btn:hover {
  background-color: transparent;
  color: var(--mainColor);
}

.peertube-plugin-page-all-channels-subscribe-btn.subscribed {
  background-color: transparent;
  color: var(--mainColor);
}

.peertube-plugin-page-all-channels-subscribe-btn.subscribed:hover {
  background-color: var(--mainColor);
  color: white;
}

/* Bold Header Template Styles */
.peertube-plugin-page-all-channels-card.bold-header {
  padding: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  height: 100%;
  transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
  border: 1px solid var(--mainColor);
}

.peertube-plugin-page-all-channels-card.bold-header:hover {
  transform: translateY(-4px);
  border-color: var(--mainColor);
  border-width: 2px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

.peertube-plugin-page-all-channels-card.bold-header .card-header {
  background: var(--menuBackgroundColor);
  padding: 10px 15px;
  width: 100%;
  border-bottom: 1px solid var(--mainColor);
}

.peertube-plugin-page-all-channels-card.bold-header .card-header h3 {
  color: var(--bs-heading-color);
  text-align: center;
  width: 100%;
  margin: 0;
  font-size: 17px;
  font-weight: 600;
}

.peertube-plugin-page-all-channels-card.bold-header .card-header a {
  color: var(--bs-heading-color);
  text-decoration: none;
}

.peertube-plugin-page-all-channels-card.bold-header .card-body {
  padding: 5px;
  padding-bottom: 5px;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.peertube-plugin-page-all-channels-card.bold-header .card-layout {
  display: flex;
  margin-bottom: 0;
  padding: 10px;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-card-image {
  flex: 0 0 120px;
  margin-right: 15px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.peertube-plugin-page-all-channels-card.bold-header .card-details {
  flex: 1;
  margin-left: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  height: 100%;
  padding: 5px 0;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-actor-counters {
  display: flex;
  flex-direction: column;
  width: 100%;
  margin: 0;
  gap: 3px;
  padding-left: 0;
  height: 100%;
  justify-content: space-between;
}

.peertube-plugin-page-all-channels-card.bold-header .stat-line {
  display: flex;
  align-items: center;
  width: 100%;
  position: relative;
  margin-bottom: 0;
  padding-left: 10%;
}

.peertube-plugin-page-all-channels-card.bold-header .stat-value {
  font-weight: 600;
  font-size: 15px;
  color: var(--mainForegroundColor);
  display: inline-block;
  min-width: 30px;
  width: 30px;
  text-align: right;
  margin-left: 10%;
  margin-right: 0;
}

.peertube-plugin-page-all-channels-card.bold-header .stat-label {
  font-size: 14px;
  color: var(--mainForegroundColor);
  text-align: left;
  padding-left: 8px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-channel-buttons {
  display: flex;
  justify-content: flex-start;
  margin-top: 0;
  width: 100%;
  padding-left: 10%;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-subscribe-btn {
  width: 80%;
  max-width: none;
  display: block;
  text-align: center;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-avatar {
  width: 100%;
  height: auto;
  aspect-ratio: 1/1;
  border-radius: 8px;
  transition: transform 0.3s ease;
}

/* Processing state for subscription button */
.peertube-plugin-page-all-channels-subscribe-btn.processing {
  position: relative;
  overflow: hidden;
}

.peertube-plugin-page-all-channels-subscribe-btn.processing::after {
  content: "";
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.2),
    transparent
  );
  animation: processing-animation 1.5s infinite;
}

@keyframes processing-animation {
  0% {
    left: -100%;
  }
  50% {
    left: 100%;
  }
  100% {
    left: 100%;
  }
}

/* Responsive Design */
@media screen and (min-width: 1800px) {
  .peertube-plugin-page-all-channels-content {
    max-width: 98%;
  }
  
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  }
}

@media screen and (max-width: 1800px) and (min-width: 1400px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 1.5rem;
  }
}

@media screen and (max-width: 1400px) and (min-width: 1200px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 1.5rem;
  }
}

@media screen and (max-width: 1200px) and (min-width: 800px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 1.5rem;
  }
}

@media screen and (max-width: 800px) {
  .peertube-plugin-page-all-channels-container {
    padding: 1.5rem var(--horizontalMarginContent);
  }

  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: 1fr;
    gap: 1rem;
  }
  
  .peertube-plugin-page-all-channels-card {
    flex-direction: column;
    height: auto !important;
    max-height: none !important;
    min-height: auto !important;
    padding: 10px;
  }
  
  .peertube-plugin-page-all-channels-card-image {
    margin-right: 0;
    margin-bottom: 10px;
    justify-content: center;
  }
  
  .peertube-plugin-page-all-channels-card-info {
    height: auto;
    max-height: none;
  }
  
  .peertube-plugin-page-all-channels-header h1 {
    font-size: 2rem;
  }
  
  /* Bold Header mobile styles */
  .peertube-plugin-page-all-channels-card.bold-header {
    padding: 0;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .card-layout {
    flex-direction: column;
    align-items: center;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-card-image {
    margin-right: 0;
    margin-bottom: 10px;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .card-details {
    margin-left: 0;
    width: 100%;
    padding: 5px;
  }
  
  /* Reduced spacing in card details for mobile only */
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-actor-counters {
    width: 100%;
    margin-bottom: 0;
    flex-direction: column;
    gap: 6px;
    padding-left: 0;
    align-items: center;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .stat-line,
  .peertube-plugin-page-all-channels-card.bold-header .date-line,
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-channel-buttons {
    width: 80%;
    padding-left: 0;
    justify-content: center;
    margin: 0;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .date-label {
    font-size: 13px;
    text-align: center;
  }
}

@media screen and (max-width: 500px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: 1fr;
  }
  
  .peertube-plugin-page-all-channels-card {
    flex-direction: column;
    height: auto !important;
    max-height: none !important;
    min-height: auto !important;
  }
  
  .peertube-plugin-page-all-channels-card-image {
    margin-right: 0;
    margin-bottom: 10px;
    justify-content: center;
  }
  
  .peertube-plugin-page-all-channels-card-info {
    height: auto;
    max-height: none;
  }
}

/* Add new styles for pagination, loading, search, and responsive layout */

/* Loading state */
.loading-page {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 300px;
  width: 100%;
}

.loader {
  border: 5px solid var(--inputBorderColor);
  border-top: 5px solid var(--mainColor);
  border-radius: 50%;
  width: 50px;
  height: 50px;
  animation: spin 1s linear infinite;
  margin-bottom: 20px;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

.loading-text {
  font-size: 18px;
  color: var(--mainForegroundColor);
}

/* Error state */
.error-page {
  text-align: center;
  padding: 50px 20px;
}

.retry-button {
  background-color: var(--mainColor);
  color: #fff;
  border: none;
  padding: 8px 16px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 14px;
  margin-top: 20px;
}

.retry-button:hover {
  background-color: var(--mainHoverColor);
}

/* Filters and search */
.peertube-plugin-page-all-channels-filters {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 20px;
  flex-wrap: wrap;
  gap: 15px;
  background: var(--submenuBackgroundColor);
  padding: 15px;
  border-radius: 8px;
}

.peertube-plugin-page-all-channels-search {
  flex: 1;
  min-width: 200px;
}

.peertube-plugin-page-all-channels-search input {
  padding: 8px 12px;
  border: 1px solid var(--inputBorderColor);
  border-radius: 4px;
  font-size: 14px;
  width: 100%;
  max-width: 300px;
  background-color: var(--inputBackgroundColor);
  color: var(--inputForegroundColor);
}

.peertube-plugin-page-all-channels-sort {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.peertube-plugin-page-all-channels-sort label {
  font-size: 14px;
  color: var(--mainForegroundColor);
  font-weight: 500;
}

.peertube-plugin-page-all-channels-sort select {
  padding: 8px 12px;
  border: 1px solid var(--inputBorderColor);
  border-radius: 4px;
  font-size: 14px;
  background-color: var(--inputBackgroundColor);
  color: var(--inputForegroundColor);
  min-width: 150px;
}

/* Enhanced sorting UI */
.sort-options-container {
  display: flex;
  flex-wrap: wrap;
  gap: 15px;
  align-items: center;
}

.sort-option {
  display: flex;
  align-items: center;
  gap: 5px;
}

.sort-direction {
  margin-left: 10px;
}

/* Pagination */
.peertube-plugin-page-all-channels-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 30px 0;
  gap: 10px;
}

.pagination-pages {
  display: flex;
  align-items: center;
  gap: 5px;
}

.pagination-button {
  background-color: var(--mainBackgroundColor);
  color: var(--mainForegroundColor);
  border: 1px solid var(--inputBorderColor);
  border-radius: 4px;
  padding: 6px 12px;
  font-size: 14px;
  cursor: pointer;
  min-width: 40px;
  text-align: center;
}

.pagination-button.page-number.active {
  background-color: var(--mainColor);
  color: white;
  border-color: var(--mainColor);
}

.pagination-button:hover:not(.disabled):not(.active) {
  background-color: var(--inputBorderColor);
}

.pagination-button.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.pagination-ellipsis {
  padding: 0 5px;
}

.channels-count {
  margin-bottom: 15px;
  font-size: 14px;
  color: var(--greyForegroundColor);
}

/* Improved responsive layout */
@media (max-width: 1200px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  }
}

@media (max-width: 768px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: 1fr;
  }
  
  .peertube-plugin-page-all-channels-filters {
    flex-direction: column;
    align-items: flex-start;
  }
  
  .peertube-plugin-page-all-channels-search input {
    width: 100%;
    max-width: none;
  }
  
  .peertube-plugin-page-all-channels-sort {
    width: 100%;
  }
  
  .sort-options-container {
    width: 100%;
    flex-direction: column;
    align-items: flex-start;
  }
  
  .sort-option {
    width: 100%;
  }
}

/* Empty state */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 50px 20px;
  text-align: center;
}

/* Existing style improvements */
.peertube-plugin-page-all-channels-container {
  width: 100%;
  max-width: none;
  margin: 0 auto;
  padding: 20px 1rem;
}

.peertube-plugin-page-all-channels-title {
  font-size: 24px;
  margin-bottom: 25px;
  color: var(--mainForegroundColor);
}

/* Fix for the channel card stats with the new styles */
.peertube-plugin-page-all-channels-card.bold-header .stat-line {
  display: flex;
  align-items: center;
  width: 100%;
  position: relative;
  padding-left: 0;
  gap: 2px;

}

.peertube-plugin-page-all-channels-card.bold-header .stat-value {
  font-weight: 600;
  font-size: 15px;
  color: var(--mainForegroundColor);
  display: inline-block;
  min-width: 30px;
  width: 30px;
  text-align: right;
  margin-left: 10%;
  margin-right: 0;
}

.peertube-plugin-page-all-channels-card.bold-header .stat-label {
  font-size: 14px;
  color: var(--mainForegroundColor);
  text-align: left;
  padding-left: 8px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-actor-counters {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: flex-start;
  width: 100%;
  margin: 0;
  gap: 6px;
}

/* Mobile view adjustments */
@media screen and (max-width: 800px) {
  .peertube-plugin-page-all-channels-grid {
    grid-template-columns: 1fr;
    gap: 1rem;
  }

  .peertube-plugin-page-all-channels-card.bold-header {
    max-width: 100%;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .card-layout {
    flex-direction: column;
    align-items: center;
    padding: 10px;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-card-image {
    margin-right: 0;
    margin-bottom: 10px;
    width: 120px;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .card-details {
    width: 100%;
    align-items: center;
    padding: 0;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-actor-counters {
    align-items: flex-start;
    width: 100%;
    padding: 0;
    gap: 6px;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .stat-line,
  .peertube-plugin-page-all-channels-card.bold-header .date-line,
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-channel-buttons {
    width: 80%;
    padding-left: 0;
    justify-content: center;
    margin: 0;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .date-label {
    font-size: 13px;
  }
}

/* Add styles for button and RSS icon */
.peertube-plugin-page-all-channels-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 8px 12px;
  border-radius: 4px;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  text-decoration: none;
  transition: all 0.2s ease;
}

.peertube-plugin-page-all-channels-button.primary {
  background-color: var(--mainColor);
  color: white;
  border: 1px solid var(--mainColor);
  min-width: 100px;
}

.peertube-plugin-page-all-channels-button.primary:hover {
  background-color: var(--mainHoverColor);
  border-color: var(--mainHoverColor);
}

.peertube-plugin-page-all-channels-button.secondary {
  background-color: transparent;
  color: var(--mainForegroundColor);
  border: 1px solid var(--inputBorderColor);
  margin-left: 8px;
  padding: 8px;
}

.peertube-plugin-page-all-channels-button.secondary:hover {
  background-color: var(--inputBorderColor);
}

/* Add styles for date statistics */
.peertube-plugin-page-all-channels-card.bold-header .date-line {
  margin-top: 0;
  margin-bottom: 0;
  width: 100%;
  justify-content: flex-start;
  padding-left: 10%;
}

.peertube-plugin-page-all-channels-card.bold-header .date-label {
  font-size: 14px;
  color: var(--mainForegroundColor);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-left: 0;
  padding-left: 8px;
}

/* Mobile view adjustments for date elements */
@media screen and (max-width: 800px) {
  .peertube-plugin-page-all-channels-card.bold-header .date-line {
    margin-top: 1px;
    margin-bottom: 0;
    padding-left: 0;
    justify-content: center;
    width: 80%;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .date-label {
    font-size: 13px;
  }
}

/* Go To Channel button - similar styling to subscribe button */
.peertube-plugin-page-all-channels-goto-btn {
  padding: 5px 10px;
  border-radius: 4px;
  border: 1px solid var(--mainColor);
  background-color: transparent;
  color: var(--mainColor);
  cursor: pointer;
  font-size: 13px;
  transition: all 0.2s ease;
  display: block;
  text-align: center;
  text-decoration: none;
  width: 80%;
  max-width: none;
}

.peertube-plugin-page-all-channels-goto-btn:hover {
  background-color: var(--mainColor);
  color: white;
}

/* Bold Header Template Styles - Actor counters */
.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-actor-counters {
  display: flex;
  flex-direction: column;
  width: 100%;
  margin: 0;
  gap: 10px; /* Slightly increased gap for better spacing */
  padding-left: 0;
  height: 100%;
  justify-content: center; /* Center vertically */
  align-items: center; /* Center horizontally */
}

.peertube-plugin-page-all-channels-card.bold-header .stat-line {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  position: relative;
  margin-bottom: 0;
  padding-left: 0;
}

.peertube-plugin-page-all-channels-card.bold-header .stat-value {
  font-weight: 600;
  font-size: 15px;
  color: var(--mainForegroundColor);
  display: inline-block;
  min-width: 30px;
  width: 30px;
  text-align: right;
  margin-right: 8px;
}

.peertube-plugin-page-all-channels-card.bold-header .stat-label {
  font-size: 14px;
  color: var(--mainForegroundColor);
  text-align: left;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Standardize spacing for buttons */
.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-channel-buttons {
  display: flex;
  justify-content: center;
  margin: 0;
  width: 100%;
  padding: 0;
}

.peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-subscribe-btn {
  width: 80%;
  max-width: none;
  display: block;
  text-align: center;
}

/* Mobile view adjustments */
@media screen and (max-width: 800px) {
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-actor-counters {
    gap: 8px;
    align-items: center;
    justify-content: center;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .stat-line,
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-channel-buttons {
    width: 80%;
    justify-content: center;
    align-items: center;
    margin: 0 auto;
  }
  
  .peertube-plugin-page-all-channels-card.bold-header .card-details {
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
  }
  
  .peertube-plugin-page-all-channels-goto-btn,
  .peertube-plugin-page-all-channels-card.bold-header .peertube-plugin-page-all-channels-subscribe-btn {
    width: 100%;
  }
}

/* Centered videos stat */
.peertube-plugin-page-all-channels-card.bold-header .centered-stat {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  margin-bottom: 5px;
}

.peertube-plugin-page-all-channels-card.bold-header .centered-stat .stat-value {
  font-weight: 600;
  font-size: 16px;
  color: var(--mainForegroundColor);
  display: inline-block;
  margin: 0;
  margin-right: 4px; /* Reduced space between number and text */
}

.peertube-plugin-page-all-channels-card.bold-header .centered-stat .stat-label {
  font-size: 14px;
  color: var(--mainForegroundColor);
  white-space: nowrap;
  margin-left: 0px;
  padding-left: 0px;
}

/* Left menu: match native icons' collapsed non-selected color for the All Channels link */
.menu-container.collapsed .menu-link.ghv-all-channels-menu-link:not(.active) my-global-icon {
  color: var(--menu-fg-400, #e0e0e0);
}
.shop-button {
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  cursor: pointer !important;
  color: var(--mainColor, #bba777) !important;
  font-weight: 500 !important;
  padding: 0 6px !important;
  border-radius: 4px !important;
  transition: opacity 0.2s ease !important;
  vertical-align: middle !important;
  line-height: 1 !important;
}

.shop-button:hover {
  opacity: 0.8 !important;
}

.shop-button svg {
  width: 14px !important;
  height: 14px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  position: relative !important;
  top: -1px !important;
}

.shop-button .shop-text {
  position: relative !important;
  top: -1px !important;
}

.mobile-products-modal {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
  background-color: rgba(0,0,0,0.7) !important;
  z-index: 19000 !important;
  display: flex !important;
  align-items: flex-start !important;
  justify-content: center !important;
  padding-top: 60px !important;
}

.mobile-products-container {
  width: 95% !important;
  max-width: 600px !important;
  max-height: 80vh !important;
  background-color: var(--mainBackgroundColor, #121212) !important;
  border-radius: 8px !important;
  overflow: hidden !important;
  display: flex !important;
  flex-direction: column !important;
  margin-top: 10px !important;
}

/* Desktop shop modal: fixed position from top (doesn't shift with content) */
.desktop-shop-modal {
  align-items: flex-start !important;
  justify-content: center !important;
  padding-top: 4vh !important;
}

.desktop-shop-modal .mobile-products-container {
  width: 50vw !important;
  max-width: 600px !important;
  max-height: 80vh !important;
  margin-top: 0 !important;
  overflow: hidden !important;
}

.desktop-shop-modal .mobile-products-body {
  overflow-y: auto !important;
  overflow-x: hidden !important;
  max-height: calc(80vh - 60px) !important;
  display: flex !important;
  flex-direction: column !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  gap: 16px !important;
}

.desktop-shop-modal .mobile-product-card {
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}

/* Desktop shop button - match action button hover */
.desktop-shop-button:hover {
  opacity: 0.7 !important;
}

.mobile-products-header {
  display: flex !important;
  justify-content: space-between !important;
  align-items: center !important;
  padding: 12px 16px !important;
  border-bottom: 1px solid var(--mainColorLighter, #52525b) !important;
}

.mobile-products-title {
  margin: 0 !important;
  font-size: 18px !important;
}

.mobile-products-close {
  border: none !important;
  background: none !important;
  font-size: 24px !important;
  cursor: pointer !important;
  color: var(--mainForegroundColor, #ffffff) !important;
}

@media screen and (max-width: 768px) {
  .mobile-products-modal {
    z-index: 2147483647 !important;
  }
}

.mobile-products-body {
  padding: 16px !important;
  overflow-y: auto !important;
  max-height: calc(90vh - 60px) !important;
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 16px !important;
}

.mobile-product-card {
  display: flex !important;
  width: 100% !important;
  border: 1px solid var(--mainColorLighter, #52525b) !important;
  border-radius: 8px !important;
  padding: 8px !important;
  text-decoration: none !important;
  color: inherit !important;
  background-color: var(--mainBackgroundColor, #121212) !important;
  transition: transform 0.2s !important;
}

.mobile-product-card:hover {
  transform: translateY(-2px) !important;
}

.mobile-product-image {
  width: 80px !important;
  height: 80px !important;
  object-fit: cover !important;
  border-radius: 4px !important;
  margin-right: 12px !important;
}

.mobile-product-info {
  flex: 1 !important;
  min-width: 0 !important;
  display: flex !important;
  flex-direction: column !important;
  justify-content: space-between !important;
}

.mobile-product-title {
  font-weight: 500 !important;
  font-size: 15px !important;
  margin-bottom: 4px !important;
  line-height: 1.2 !important;
  display: -webkit-box !important;
  -webkit-line-clamp: 2 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
}

.mobile-product-price {
  font-weight: bold !important;
  color: var(--mainColor, #bba777) !important;
  font-size: 16px !important;
}

.mobile-product-site {
  font-size: 12px !important;
  color: var(--greyForegroundColor, #52525b) !important;
}

.mobile-auto-ads-container {
  width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
  background-color: var(--mainBackgroundColor, #121212) !important;
  margin-top: 10px !important;
  margin-bottom: 30px !important;
  border-radius: 4px !important;
  padding-top: 10px !important;
  box-sizing: border-box !important;
  display: block !important;
  position: relative !important;
  z-index: 10 !important;
  height: auto !important;
  min-height: 190px !important;
  overflow: visible !important;
}

.rotating-product-card {
  display: flex !important;
  align-items: center !important;
  width: 100% !important;
  max-width: 600px !important;
  border: 1px solid var(--mainColorLighter, #52525b) !important;
  border-radius: 8px !important;
  padding: 0 !important;
  text-decoration: none !important;
  color: inherit !important;
  background-color: var(--mainBackgroundColor, #121212) !important;
  position: absolute !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  height: 110px !important;
  box-sizing: border-box !important;
  overflow: hidden !important;
  will-change: transform, opacity !important;
  transition: opacity 0.3s ease, transform 0.3s ease !important;
}

.rotating-product-container {
  position: relative !important;
  height: 110px !important;
  overflow: visible !important;
  width: 100% !important;
  display: block !important;
}

.product-indicator-dots {
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  gap: 12px !important;
  margin-top: 15px !important;
  padding: 5px 0 !important;
  position: relative !important;
  bottom: 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
  z-index: 9999 !important;
}

.carousel-pagination {
  display: flex !important;
  justify-content: center !important;
  gap: 12px !important;
  margin: 0 auto !important;
  margin-top: 0 !important;
  margin-bottom: 10px !important;
  width: 90% !important;
  z-index: 99999 !important;
  position: relative !important;
  padding: 5px 0 !important;
  pointer-events: auto !important;
  background-color: rgba(0, 0, 0, 0.2) !important;
  border-radius: 10px !important;
  height: 20px !important;
  min-height: 20px !important;
  max-height: 20px !important;
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.3) !important;
  opacity: 1 !important;
  visibility: visible !important;
}

/* Make pagination dots extremely visible */
.pagination-dot {
  width: 12px !important;
  height: 12px !important;
  min-width: 12px !important;
  min-height: 12px !important;
  border-radius: 50% !important;
  background-color: #888 !important;
  transition: all 0.3s ease !important;
  display: block !important;
  border: 2px solid white !important;
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.5) !important;
  pointer-events: auto !important;
  opacity: 1 !important;
  visibility: visible !important;
  margin: 0 4px !important;
}

.pagination-dot.active {
  background-color: #bba777 !important; /* Changed to gold theme color */
  transform: scale(1.3) !important;
  opacity: 1 !important;
  border-color: white !important;
  box-shadow: 0 0 8px rgba(187, 167, 119, 0.8) !important; /* Updated glow to match gold color */
}

/* Keyframe animations for modal */
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

@keyframes slideIn {
  from { transform: translateY(50px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

@keyframes slideOut {
  from { transform: translateY(0); opacity: 1; }
  to { transform: translateY(50px); opacity: 0; }
}

/* Mobile button styles */
.mobile-shop-button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  background-color: #bba777 !important;
  color: white !important;
  border: none !important;
  border-radius: 20px !important;
  padding: 6px 12px !important;
  margin-left: 10px !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  cursor: pointer !important;
  z-index: 99999 !important;
  font-family: 'Lato', sans-serif !important;
  line-height: 1.2 !important;
  height: auto !important;
  max-height: none !important;
  transform: none !important;
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto !important;
  width: auto !important;
  min-width: 70px !important;
  position: relative !important;
}

/* Auto-ads indicator dots */
.rotating-product-indicator-dots {
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  gap: 12px !important;
  margin-top: 110px !important;
  margin-bottom: 10px !important;
  padding: 10px 0 !important;
  width: 100% !important;
  box-sizing: border-box !important;
  position: relative !important;
  z-index: 9999 !important;
  background-color: transparent !important;
}

.rotating-dot {
  width: 10px !important;
  height: 10px !important;
  border-radius: 50% !important;
  background-color: var(--greyForegroundColor, #52525b) !important;
  opacity: 0.5 !important;
  transition: all 0.2s ease !important;
  min-width: 10px !important;
  min-height: 10px !important;
  border: 1px solid rgba(255,255,255,0.2) !important;
}

.rotating-dot.active {
  background-color: var(--mainColor, #bba777) !important;
  opacity: 1 !important;
  transform: scale(1.2) !important;
}

/* Desktop carousel styles based on desktop plugin */
.product-carousel-container {
  position: relative;
  width: 100%;
  max-width: 100%;
  padding: 0 40px;
  overflow: hidden;
  box-sizing: border-box;
  margin-bottom: 20px;
  margin-right: 0;
  margin-left: 0;
}

.product-carousel {
  display: flex;
  gap: 15px;
  width: 100%;
  overflow-x: auto;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -ms-overflow-style: none;
  -webkit-overflow-scrolling: touch;
  padding: 0;
  margin: 0;
  position: relative;
  z-index: 1;
}

.product-carousel::-webkit-scrollbar {
  display: none;
}

.nav-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  background-color: var(--mainBackgroundColor);
  border: 1px solid var(--mainForegroundColor);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.3s ease;
  z-index: 2;
  font-size: 24px;
  line-height: 1;
  padding: 0;
  color: var(--mainForegroundColor);
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.nav-arrow.prev {
  left: 0px;
}

.nav-arrow.next {
  right: 0px;
}

.nav-arrow:hover {
  background-color: var(--submenuBackgroundColor);
  color: var(--mainColor);
}

.nav-arrow:focus {
  outline: 2px solid var(--mainColor);
  outline-offset: 2px;
}

.nav-arrow:disabled {
  cursor: not-allowed;
  opacity: 0.5;
}

.product-card {
  flex: 0 0 225px;
  width: 225px;
  min-width: 225px;
  max-width: 225px;
  height: 110px;
  display: flex;
  align-items: center;
  border: 1px solid var(--mainForegroundColor);
  border-radius: 8px;
  padding: 10px;
  transition: transform 0.3s ease;
  text-decoration: none;
  color: inherit;
  background: var(--mainBackgroundColor);
  position: relative;
  z-index: 1;
}

.product-card:hover {
  border-color: var(--mainColor);
}

.product-image {
  width: 90px;
  height: 90px;
  object-fit: cover;
  border-radius: 4px 0 0 4px;
}

.product-info {
  padding: 8px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: calc(100% - 90px);
}

.product-title {
  font-size: 12px;
  line-height: 1.2;
  margin: 0;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  white-space: normal;
}

.product-price {
  font-size: 12px;
  font-weight: bold;
  color: var(--mainColor);
  margin: 0;
}

.product-site {
  font-size: 11px;
  color: var(--greyForegroundColor);
  margin: 0;
}

@media screen and (max-width: 1100px) {
  .product-carousel-container {
    padding: 0 70px;
  }
}

@media screen and (max-width: 600px) {
  .product-carousel-container {
    padding: 0 60px;
  }

  .product-carousel {
    gap: 10px;
  }

  .nav-arrow.prev {
    left: 0px;
  }

  .nav-arrow.next {
    right: 0px;
  }
}
/**
 * Channel page layout — YouTube-style compact spacing (Greyhive).
 * Active when body has class gh-channel-page-layout (set by client plugin on /c/* routes).
 */

body.gh-channel-page-layout .root:has(.channel-info) {
  --co-channel-img-margin: 20px;
  --x-margin-content: 1rem;
  overflow-x: clip;
  max-width: 100%;
}

/* Banner: ~10% shorter than default 1:6 ratio (16.67% → 15% padding-top) */
body.gh-channel-page-layout .root:has(.channel-info) .banner {
  padding-top: 15% !important;
}

body.gh-channel-page-layout .root:has(.channel-info) .banner.mb-4 {
  margin-bottom: 25px !important;
}

body.gh-channel-page-layout {
  overflow-x: clip;
}

body.gh-channel-page-layout .channel-info {
  margin-bottom: 0px !important;
  min-width: 0;
  width: 100%;
  max-width: 100%;
  overflow-x: clip;
  box-sizing: border-box;
}

body.gh-channel-page-layout .margin-content {
  max-width: 100%;
  box-sizing: border-box;
}

body.gh-channel-page-layout .channel-avatar-row {
  margin-bottom: 25px !important;
}

body.gh-channel-page-layout .channel-description {
  margin-bottom: 15px !important;
  max-height: none !important;
  min-width: 0 !important;
  width: 100%;
  max-width: 100%;
  overflow: hidden;
  box-sizing: border-box;
}

/* Single line + ... More overlaid on the right (no extra flex/grid width) */
body.gh-channel-page-layout .gh-channel-desc-row {
  position: relative;
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  overflow: hidden;
  box-sizing: border-box;
}

body.gh-channel-page-layout .gh-channel-desc-row .description-html {
  display: block !important;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  overflow: hidden;
  text-overflow: clip;
  white-space: nowrap;
  box-sizing: border-box;
  contain: inline-size;
  -webkit-line-clamp: unset !important;
  -webkit-box-orient: unset !important;
  word-break: normal;
}

body.gh-channel-page-layout .bottom-owner {
  display: none !important;
}

/* Desktop grid: minmax(0,1fr) lets column 1 shrink; width:0 was hiding all text */
@media screen and (min-width: 1101px) {
  body.gh-channel-page-layout .channel-info {
    grid-template-columns: minmax(0, 1fr) auto !important;
  }

  body.gh-channel-page-layout .channel-avatar-row,
  body.gh-channel-page-layout .channel-description,
  body.gh-channel-page-layout .channel-info .channel-buttons.bottom {
    grid-column: 1;
    min-width: 0;
    max-width: 100%;
  }
}

body.gh-channel-page-layout .gh-channel-desc-row .description-html > * {
  display: inline;
  white-space: nowrap;
}

body.gh-channel-page-layout .gh-channel-desc-row .description-html p {
  display: inline;
  margin: 0;
}

body.gh-channel-page-layout .gh-channel-desc-row .description-html p::after {
  content: ' ';
}

body.gh-channel-page-layout .gh-channel-desc-row .description-html br {
  display: none;
}

/* Hide PeerTube inline expand; plugin uses modal instead */
body.gh-channel-page-layout .channel-info .show-more {
  display: none !important;
}

body.gh-channel-page-layout .gh-channel-desc-more {
  display: none;
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 2;
  margin: 0;
  padding: 0 0 0 0.75rem;
  border: 0;
  background: black;
  color: var(--fg-300, var(--mainForegroundColor, #000));
  font-size: inherit;
  font-family: inherit;
  line-height: 1.4;
  white-space: nowrap;
  cursor: pointer;
}

body.gh-channel-page-layout .gh-channel-desc-more:hover,
body.gh-channel-page-layout .gh-channel-desc-more:focus {
  color: var(--fg, var(--mainForegroundColor, #000));
  text-decoration: underline;
  outline: none;
}

body.gh-channel-page-layout .gh-channel-desc-more.is-visible {
  display: inline-block;
}


body.gh-channel-page-layout .root:has(.channel-info) .margin-content.mb-3 {
  margin-bottom: 25px !important;
}

body.gh-channel-page-layout my-video-channel-videos my-video-filters-header .root {
  margin-top: 25px !important;
  margin-bottom: 25px !important;
  min-height: 0 !important;
}

body.gh-channel-page-layout my-video-channel-videos .videos {
  margin-top: 0 !important;
}

/* Sort dropdown: hide stale PrimeNG focus ring after programmatic sort sync on load */
body.gh-channel-page-layout my-video-channel-videos my-select-videos-sort p-select:not(:focus-within) .p-select.p-focus {
  outline: none !important;
  box-shadow: none !important;
}

body.gh-channel-page-layout my-video-channel-videos my-select-videos-sort p-select:not(:focus-within) .p-select.p-focus .p-select-label {
  outline: none !important;
}

/* Single-click subscribe only — hide RSS/ActivityPub dropdown chevron (matches video watch page) */
body.gh-channel-page-layout my-subscribe-button .dropdown-toggle-split,
body.gh-channel-page-layout my-subscribe-button button[aria-label="Open subscription dropdown"] {
  display: none !important;
}

body.gh-channel-page-layout my-subscribe-button .btn-group > .btn.peertube-button.primary-button:not(.dropdown-toggle-split) {
  border-radius: var(--input-border-radius);
}

/* Description modal */
.gh-channel-desc-modal {
  position: fixed;
  inset: 0;
  z-index: 99999;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}

.gh-channel-desc-modal.is-open {
  display: flex;
}

.gh-channel-desc-modal-backdrop {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: rgba(0, 0, 0, 0.55);
}

.gh-channel-desc-modal-dialog {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 560px;
  max-height: min(80vh, 640px);
  display: flex;
  flex-direction: column;
  background: var(--bg, var(--mainBackgroundColor, #fff));
  color: var(--fg, var(--mainForegroundColor, #000));
  border-radius: 8px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.35);
  overflow: hidden;
}

.gh-channel-desc-modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--border-secondary, rgba(128, 128, 128, 0.25));
}

.gh-channel-desc-modal-title {
  margin: 0;
  font-size: 1.25rem;
  font-weight: 700;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gh-channel-desc-modal-close {
  flex-shrink: 0;
  border: 0;
  background: transparent;
  color: inherit;
  cursor: pointer;
  padding: 0.25rem;
  line-height: 1;
  opacity: 0.75;
}

.gh-channel-desc-modal-close:hover {
  opacity: 1;
}

.gh-channel-desc-modal-body {
  padding: 1rem 1.25rem;
  overflow-y: auto;
  word-break: break-word;
}

.gh-channel-desc-modal-body .description-html {
  display: block !important;
  white-space: normal !important;
  overflow: visible !important;
}

.gh-channel-desc-modal-footer {
  padding: 0.75rem 1.25rem 1rem;
  display: flex;
  justify-content: flex-end;
  border-top: 1px solid var(--border-secondary, rgba(128, 128, 128, 0.25));
}

@media screen and (max-width: 1100px) {
  body.gh-channel-page-layout .margin-content.channel-info {
    overflow-x: clip;
    max-width: 100%;
    box-sizing: border-box;
  }

  body.gh-channel-page-layout .channel-description:not(.expanded) {
    max-height: none !important;
  }

  body.gh-channel-page-layout .gh-channel-desc-more {
    right: 0.65rem;
    font-size: 0.9375rem;
    padding-left: 0.5rem;
  }
}

@media screen and (max-width: 500px) {
  body.gh-channel-page-layout .root:has(.channel-info) {
    --x-margin-content: 0.75rem;
  }

  body.gh-channel-page-layout .gh-channel-desc-more {
    right: 0.75rem;
  }
}
/**
 * Account setup / welcome modal custom plugin
 * Targets the modal whose body was replaced by this plugin (data-account-setup-modal-custom)
 * and centers the footer action buttons.
 */
[data-account-setup-modal-custom] .modal-footer.inputs {
  justify-content: center;
  padding: 2px !important;
  margin-bottom: 15px !important;
}

[data-account-setup-modal-custom] .modal-body {
  display: grid !important;
  text-align: center !important;
  padding: 15px !important;
}

/**
 * Plugin settings: larger, resizable textarea for "Custom modal body HTML"
 */
textarea#customModalBodyHtml {
  resize: both;
  min-height: 280px;
  min-width: 80%;
  box-sizing: border-box;
}
/* Greyhive Select2 + controls for Discover admin panel */

#gh-discover-admin-panel .card-body {
  position: relative;
}

#gh-discover-admin-panel .gh-discover-admin-header {
  position: relative;
}

#gh-discover-admin-panel .gh-discover-memoize-wrap {
  flex-shrink: 0;
  margin-left: auto;
  text-align: right;
  max-width: 30rem;
}

#gh-discover-admin-panel .gh-discover-memoize-input {
  max-width: 100%;
  margin-left: auto;
  text-align: center;
  padding-left: 0.35rem;
  padding-right: 0.35rem;
}

#gh-discover-admin-panel .gh-discover-memoize-wrap .form-text {
  font-size: 0.75rem;
  line-height: 1.2;
  margin-top: 0.2rem;
}

/* Keep hidden admin inputs in DOM for saves */
#gh-discover-admin-panel .gh-discover-admin-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

body.gh-discover-row-drag-active {
  cursor: grabbing !important;
  user-select: none;
}

#gh-discover-admin-panel .gh-drag-handle {
  cursor: grab;
  user-select: none;
  touch-action: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  min-width: 2rem;
  min-height: 2rem;
  padding: 0;
  border-radius: 2px;
  background-color: #e4e4e7;
  border: 1px solid #d4d4d8;
  color: #27272a;
  font-size: 1.25rem;
  line-height: 1;
  flex-shrink: 0;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
}

#gh-discover-admin-panel .gh-drag-handle:hover {
  background-color: #d4d4d8;
  border-color: #a1a1aa;
  color: #09090b;
}

#gh-discover-admin-panel .gh-drag-handle:active {
  cursor: grabbing;
  background-color: #d4d4d8;
}

#gh-discover-admin-panel .gh-discover-row.gh-row-dragging {
  opacity: 0.65;
}

#gh-discover-admin-panel .gh-drop-marker {
  display: block;
  width: 100%;
  height: 18px;
  min-height: 18px;
  margin: 2px 0;
  border-radius: 4px;
  box-sizing: border-box;
  pointer-events: none;
  flex-shrink: 0;
  background: linear-gradient(
    180deg,
    rgba(187, 167, 119, 0.2) 0%,
    rgba(187, 167, 119, 0.45) 100%
  );
  border: 2px solid #bba777;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.12),
    0 0 10px rgba(187, 167, 119, 0.35);
}

#gh-discover-admin-panel .select2-container--default .select2-selection--single,
#gh-discover-admin-panel .select2-container--default .select2-selection--multiple {
  background-color: #2a2a2e;
  border: 1px solid #52525b;
  border-radius: 6px;
  min-height: 42px;
}

#gh-discover-admin-panel .select2-container--default .select2-selection--single {
  height: 38px;
}

#gh-discover-admin-panel .select2-container--default .select2-selection--single .select2-selection__rendered {
  color: #f4f4f5;
  line-height: 36px;
  padding-left: 8px;
}

#gh-discover-admin-panel .select2-container--default .select2-selection--single .select2-selection__arrow {
  height: 36px;
}

#gh-discover-admin-panel .select2-container--default .select2-selection--single .select2-selection__placeholder {
  color: #a1a1aa;
}

#gh-discover-admin-panel .select2-container--default.select2-container--focus .select2-selection--single,
#gh-discover-admin-panel .select2-container--default.select2-container--open .select2-selection--single {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-discover-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice {
  background-color: #3a3a40;
  border: 1px solid #bba777;
  color: #f4f4f5;
}

#gh-discover-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  color: #bba777;
}

#gh-discover-admin-panel .select2-container--default.select2-container--focus .select2-selection--multiple {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-discover-admin-panel .select2-container--default .select2-search--inline .select2-search__field,
#gh-discover-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field {
  color: #f4f4f5;
  background-color: #1e1e22;
  border: 1px solid #52525b;
  border-radius: 4px;
}

#gh-discover-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field:focus {
  border-color: #bba777;
  outline: none;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-discover-admin-panel .select2-container--default .select2-selection__clear {
  color: #bba777;
  margin-right: 4px;
}

/* Dropdown is often rendered under the panel (dropdownParent); scope by panel id */
#gh-discover-admin-panel .select2-dropdown {
  background-color: #2a2a2e !important;
  border: 1px solid #52525b !important;
}

#gh-discover-admin-panel .select2-container--default .select2-results > .select2-results__options {
  background-color: #2a2a2e;
}

#gh-discover-admin-panel .select2-container--default .select2-results__option {
  background-color: #2a2a2e;
  color: #f4f4f5;
}

#gh-discover-admin-panel .select2-container--default .select2-results__option--selectable {
  color: #f4f4f5;
}

#gh-discover-admin-panel .select2-container--default .select2-results__option--highlighted,
#gh-discover-admin-panel .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: #bba777 !important;
  color: #121212 !important;
}

#gh-discover-admin-panel .select2-container--default .select2-results__option--selected,
#gh-discover-admin-panel .select2-container--default .select2-results__option[aria-selected='true'] {
  background-color: #3a3a40 !important;
  color: #f4f4f5 !important;
}

/* Search filter checkbox: clearer on dark admin UI */
#gh-discover-admin-panel .gh-discover-apply-search-wrap .form-check-input {
  width: 1.35rem;
  height: 1.35rem;
  margin-top: 0.2rem;
  border: 2px solid #bba777;
  background-color: #2a2a2e;
  cursor: pointer;
}

#gh-discover-admin-panel .gh-discover-apply-search-wrap .form-check-input:checked {
  background-color: #bba777;
  border-color: #bba777;
}

#gh-discover-admin-panel .gh-discover-apply-search-wrap .form-check-input:focus {
  border-color: #bba777;
  box-shadow: 0 0 0 0.2rem rgba(187, 167, 119, 0.35);
}

#gh-discover-admin-panel .gh-discover-apply-search-wrap .form-check-label {
  padding-left: 0.35rem;
  cursor: pointer;
}
/* Hide language selection elements */
my-select-languages,
div[formcontrolname="language"],
div.form-group:has(label[for="languageOneOf"]),
div.form-group:has(label[for="language"]) {
  display: none !important;
}

/* Hide language settings link */
.update-your-settings {
  display: none !important;
} /* Reorder main tabs - pure CSS, no JS, no API calls */
/* Edit order values below to customize. Paths: /home, /videos/overview, /videos/subscriptions, /videos/browse */

/* Scope to home menu tabs only */
my-home-menu my-list-overflow .root {
  overflow: visible;
  max-width: none;
}

my-home-menu my-list-overflow .list-overflow-parent {
  overflow: visible;
}

/* Show all tabs always - no visibility:hidden, no overflow dropdown/modal */
my-home-menu my-list-overflow .list-overflow-parent li {
  visibility: visible !important;
}

my-home-menu my-list-overflow .list-overflow-parent ul.d-flex {
  flex-wrap: wrap;
}

/* Hide overflow button - all tabs visible so no need for dropdown/modal */
my-home-menu my-list-overflow .list-overflow-menu {
  display: none !important;
}

/* Ensure modal/dropdown uls are flex so order works (main ul has d-flex) */
ul.ul-unstyle:has(> li:has(a[href^="/videos/browse"])):not(.d-flex) {
  display: flex;
  flex-direction: column;
}

/* Tab order: 1=first, 2=second, etc. */
ul.ul-unstyle > li:has(a[href^="/videos/browse"]) { order: 1; }
ul.ul-unstyle > li:has(a[href^="/home"]) { order: 2; }
ul.ul-unstyle > li:has(a[href^="/videos/overview"]) { order: 3; }
ul.ul-unstyle > li:has(a[href^="/videos/subscriptions"]) { order: 4; }
/* Dan's note on the Option D mockup: "These need spaced out more than I have them."
   Starting values, to be tuned against a staging render.

   These rules deliberately set NO display property. peertube-plugin-reorder-main-tabs
   ships unscoped rules of the form
     ul.ul-unstyle > li:has(a[href^="/videos/browse"]) { order: 1 }
   which the rail's lists also match. They are inert only while those lists are not
   flex containers. Introducing flex here would silently reorder Latest and Trending. */

#left-menu .menu-block + .menu-block {
  margin-top: 1.75rem;
}

#left-menu .menu-block .block-title {
  margin-bottom: 0.75rem;
}

/* Hive's .dnav is a flex column with gap:2px. The rows are pills now (theme 0.5.0), and
   8px of air between pills reads as a list of buttons rather than a nav. */
#left-menu .menu-block li + li {
  margin-top: 2px;
}

/* Community badges. The rail's icon box is 20x20 (theme 0.5.1 sets it to Hive's size; core's own
   `.menu-link my-global-icon { width: 22px; height: 22px }`), so the badge is sized to
   fill that box exactly rather than to a number of its own — a badge that disagrees
   with the box shifts the label beside it and only that row's label.

   Scoped to #left-menu because these class names are injected into innerHTML by the
   svg-icons hook, which core also uses everywhere else in the app; nothing outside the
   rail should be able to match. Still no display property on the lists themselves —
   see the note at the top of this file. */
#left-menu my-global-icon .gh-cbadge {
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  border-radius: 6px;
  overflow: hidden;
  flex: 0 0 auto;
  /* Dark ink on the palette's mid-tone fills — the same pairing Hive's own rail uses,
     and readable on all six. */
  color: var(--on-primary);
  font-family: 'Bebas Neue', 'DM Sans', sans-serif;
  font-size: 14px;
  font-weight: 600;
  line-height: 1;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

/* An avatar is almost never square. Cropping to fill keeps every badge the same shape
   as the monogram next to it; letterboxing would make the rail's icon column ragged. */
#left-menu my-global-icon .gh-cbadge-img {
  display: block;
  object-fit: cover;
  background: var(--bg-secondary);
}

/* ---------------------------------------------------------------------------------
   Mobile floating bottom nav (phase 3)

   Values ported from Hive's own TabBar (app/apps/web/src/components/shell/globals.css)
   so a member with Hive open in one tab and PeerTube in another sees one product and
   not two. Keep them agreeing.

   Hidden by DEFAULT and shown only under the breakpoint, rather than the other way
   around: if the media query is ever edited wrongly the failure is a bar nobody sees on
   a phone, not a bar sitting across the bottom of a 27" desktop.
   ------------------------------------------------------------------------------- */
#gh-bottom-nav {
  display: none;
}

/* $small-view from core's _variables.scss — phones and portrait tablets, where there is
   no pinned rail and touch is the only input. Deliberately NOT $menu-overlay-view
   (1200px): a bottom bar on a 1100px laptop reads as a mistake. */
@media (max-width: 800px) {
  #gh-bottom-nav {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    display: flex;
    justify-content: space-around;
    align-items: flex-end;
    /* The safe-area inset is not decoration. Without it the bar sits under the iOS home
       indicator and the labels are unreadable on every notched iPhone. */
    padding: 9px 10px calc(9px + env(safe-area-inset-bottom));
    border-top: 1px solid rgba(232, 230, 225, 0.08);
    background: rgba(11, 11, 13, 0.94);
    -webkit-backdrop-filter: blur(14px);
    backdrop-filter: blur(14px);
    /* 10050 is chosen against the two scales actually in play on this site, not picked
       to win.

       PeerTube core (client/src/sass/include/_variables.scss $zindex):
         overlay 12550   the full-screen menu    menu 12600      modal 19000
         notification 20000
       peertube-plugin-shorts:
         .gh-shorts-root  10000  (fixed, full viewport)

       At 20 the bar was PAINTED OVER by the Shorts feed and looked deleted: it kept
       display:flex, visibility:visible, opacity:1 and its correct rect, but
       elementFromPoint at its own centre returned BUTTON.gh-shorts-tap. Reported as
       "the bottom nav disappears on Shorts"; it had not moved at all.

       So: above the Shorts root, and deliberately BELOW core's overlay at 12550, so the
       full-screen menu still covers the bar (it is a nav — two navs stacked is noise)
       and every modal, dropdown, tooltip and notification keeps its place above it.
       The 50 of headroom is for the shorts plugin adding a layer of its own. */
    z-index: 10050;
  }

  #gh-bottom-nav .gh-bnav-tab {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    flex: 1 1 0;
    min-width: 0;
    padding: 2px 4px;
    color: var(--gh-mid);
    font-family: 'DM Sans', sans-serif;
    font-size: 11px;
    font-weight: 600;
    line-height: 1.1;
    text-decoration: none;
    /* A tap must not paint a grey box over a translucent bar, and a double-tap must not
       select the label. */
    -webkit-tap-highlight-color: transparent;
    -webkit-user-select: none;
    user-select: none;
  }

  #gh-bottom-nav .gh-bnav-tab:hover,
  #gh-bottom-nav .gh-bnav-tab:focus-visible {
    color: var(--fg);
    text-decoration: none;
  }

  /* Gold, the same accent the rail marks its current row with. */
  #gh-bottom-nav .gh-bnav-tab-active,
  #gh-bottom-nav .gh-bnav-tab-active:hover {
    color: var(--primary);
  }

  #gh-bottom-nav .gh-bnav-icon {
    display: block;
    width: 23px;
    height: 23px;
    flex: 0 0 auto;
  }

  /* The glyphs are inline SVGs (see icons.js) drawn in currentColor, so the active
     state costs nothing but the colour above. Sized on the element rather than in the
     markup so one rule moves all five. */
  #gh-bottom-nav .gh-bnav-icon svg {
    display: block;
    width: 100%;
    height: 100%;
  }

  #gh-bottom-nav .gh-bnav-label {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    letter-spacing: 0.01em;
  }

  /* One number for the space the bar occupies, so the two clearances below cannot drift
     apart from each other or from the bar itself. */
  :root {
    --gh-bnav-h: calc(64px + env(safe-area-inset-bottom));
  }

  /* Content clearance. The document is the scrolling element here (body computes to
     `overflow: auto scroll`), so without this the bar covers the last ~64px of every
     page — the footer, the last comment, the final row of a grid. Scoped inside the
     breakpoint so desktop keeps its own spacing exactly. */
  body {
    padding-bottom: var(--gh-bnav-h);
  }

  /* The Shorts feed does not scroll — it is a fixed full-viewport layer, so the body
     padding above does nothing for it and its caption block is pinned to bottom:0.
     Measured with the bar at 10050: .gh-shorts-crow (the channel row, carrying
     Subscribe) ended at y=795 and .gh-shorts-meta at y=820, against a bar starting at
     y=783. Raising the bar over the feed therefore hid the creator's name and the
     Subscribe button — trading an invisible nav for a buried call to action.

     SPECIFICITY, and why these selectors are this long. Plugin stylesheets are
     concatenated into one global.css; ours lands at line ~202 and peertube-plugin-shorts
     at ~6397. A first attempt at a plain `.gh-shorts-bottom` rule changed NOTHING on a
     real render: equal specificity, theirs later, theirs wins. Their two rules are
     `.gh-shorts-bottom` (0,1,0) and
     `.gh-shorts-root[data-layout="mobile"] .gh-shorts-bottom` (0,3,0), so each needs a
     selector that outranks it rather than ties one.

     Extending their padding-bottom instead of fighting their `bottom: 0`, because
     padding is the mechanism they already use to clear the iOS safe area — the same
     idea, one more obstacle. --gh-bnav-h already carries env(safe-area-inset-bottom),
     so adding it to their 24px leaves 24px of breathing room above the bar without
     counting the inset twice.

     The coupling is real and worth naming: if that plugin renames .gh-shorts-bottom
     these rules silently stop applying. They degrade to the overlap we have today, not
     to a broken page — and raising the bar is what caused that overlap, so the fix
     belongs on this side. */
  body .gh-shorts-root .gh-shorts-bottom {
    padding-bottom: calc(24px + var(--gh-bnav-h));
  }

  body .gh-shorts-root[data-layout="mobile"] .gh-shorts-bottom {
    padding-bottom: calc(24px + var(--gh-bnav-h));
  }
}

/* ---------------------------------------------------------------------------------
   Rail small print (gh-legal)

   Core renders every section as `<ul [ngClass]="[ menuSection.key, 'menu-block' ]">`, so
   the section key IS the class hook and this block needs no injected DOM of its own.

   The separator above the group is drawn HERE, and it has to be. Core does draw one
   between menu blocks (`.menu-block:not(:last-child)::after`), but left-menu-hide-about
   injects `.main-menu .on-instance::after { display: none !important }` — so the one
   block this group needs a rule under is precisely the block whose rule that plugin
   removes. Measured on staging, not assumed: on-instance's ::after computes to
   display:none while every other block's computes to block.

   Values are copied from that same plugin's own ::before separator so all the rules on
   the rail are one bar, drawn once, at one weight.

   The flex container below is the ONE exception to the no-flex note at the top of this
   file, and it is safe for a reason worth stating: reorder-main-tabs only reorders li's
   matching `a[href^="/videos/browse"]`, and this list holds four /pages links and one
   github.com link. Do not copy the rule onto a list that carries a browse link.
   ------------------------------------------------------------------------------- */

#left-menu .gh-legal::before {
  content: "";
  display: block;
  height: 2px;
  margin: 0 var(--co-menu-x-padding) 1rem;
  background: var(--gh-line);
}

/* The group is a footer, not a destination. Core renders a .block-title element for the
   empty title regardless; hiding it closes the gap its margin would leave under the rule. */
#left-menu .gh-legal .block-title {
  display: none;
}

/* Signed in, core separates EVERY block (`.logged-in .menu-block::after`), not just the
   ones with a block after them — which would draw a second rule below the small print and
   directly above the site footer. Signed out this selector matches nothing and the rule
   below gh-legal never existed. */
#left-menu .menu-container.logged-in .gh-legal::after {
  display: none;
}

/* The inset lives on the list, not on each link: core pads .menu-link by
   --co-menu-x-padding on both sides, and keeping that here would add 3rem of dead space
   between two links sitting side by side. */
#left-menu .gh-legal > li > ul {
  display: flex;
  flex-wrap: wrap;
  column-gap: 1rem;
  row-gap: 0.4rem;
  padding-left: var(--co-menu-x-padding);
  padding-right: var(--co-menu-x-padding);
}

/* Beats `#left-menu .menu-block li + li { margin-top: 0.5rem }` above, which would fight
   row-gap and stagger the wrapped rows. */
#left-menu .gh-legal > li > ul > li {
  margin-top: 0;
}

/* Hive's .dnav-res: 12px --dim, no weight. --menu-fg-450 was the stage-1 stand-in; the
   theme now names --gh-dim. The literal fallback is the same colour, not a different one.
   `width: auto` because .menu-link is a full-width block: five of those are five rows, not
   the two-and-a-bit the mockup shows. */
#left-menu .gh-legal .menu-link {
  width: auto;
  margin: 0;
  padding: 0;
  font-size: 12px;
  font-weight: 400;
  line-height: 1.3;
  color: var(--gh-dim, #6a6a78);
  background: none;
  border-radius: 0;
}

#left-menu .gh-legal .menu-link:hover,
#left-menu .gh-legal .menu-link:focus-visible {
  color: var(--gh-mid, #a0a0ac);
  background: none;
  text-decoration: underline;
}

/* On the collapsed rail there is no label to read — the span is visually-hidden and these
   links carry no icon, so the group would be a rule over five invisible rows.
   Nesting is `.menu-container` → `.main-menu` → nav → ul.gh-legal; writing those ancestors
   the other way round is the bug that cost a deploy in left-menu-hide-about 2.1.72. */
#left-menu .menu-container.collapsed .gh-legal {
  display: none;
}

/* ============ MENU DENSITY ============
   Dan's mobile punch list: "Hamburger Menu > Expanded > Need to tighten the vertical spacing
   up a lot (on desktop too)... Match YouTube's spacing as best as we can (reduce the height
   of the clicked state background containers). Reduce the padding above each section header
   too."

   Measured on production before this, identical on phone and desktop: each row 42px tall on
   a 44px pitch, and 92px between the last row of one section and the first row of the next —
   37px of section heading with 18px of padding above it and 12px of margin below. YouTube's
   mobile menu runs ~40px rows with no gap and a far quieter heading.

   The pill that paints behind the active row IS the row, so its height comes down with the
   padding — which is what "reduce the height of the clicked state background containers"
   asks for. The collapsed rail keeps its own padding: there is no label to shrink around,
   and the icons need the room to stay on the rail's centre line. */
#left-menu .menu-container:not(.collapsed) .menu-link {
  padding-top: 7px;
  padding-bottom: 7px;
}

/* The 2px between rows was a margin on the list item, which on a 10-row menu is a row's
   worth of nothing. */
#left-menu .menu-container:not(.collapsed) .menu-block li {
  margin-bottom: 0;
}

#left-menu .menu-container:not(.collapsed) .menu-block .block-title {
  padding-top: 6px;
  padding-bottom: 6px;
  margin-bottom: 4px;
}

/* ⚠️ The real distance between sections was never the heading — it is a 28px top margin on
   the block itself, which the heading then sits inside. Trimming only the heading moved the
   gap 92 -> 76; this is the rest of it. */
#left-menu .menu-container:not(.collapsed) .menu-block {
  margin-top: 12px;
}

/* The 2px between rows is the line box around an inline anchor, not a margin: the LI has
   none, the link has none, and the gap survived zeroing both. Killing the line height on the
   row removes it — the link carries its own. */
#left-menu .menu-container:not(.collapsed) .menu-block li {
  line-height: 0;
}

/* ⚠️ The footer group — About, Contact, the licence — sat under the iPhone's browser bar
   with nothing to scroll past it: the container is exactly window height and carried no
   bottom padding, so its last rows were behind Safari's chrome however far you scrolled.
   The inset is what the bar is worth, and the 16px keeps the last link off the edge on a
   phone with no inset at all. */
#left-menu .menu-container {
  padding-bottom: calc(16px + env(safe-area-inset-bottom));
}

/* The phone's header logo is the instance's wide lockup, swapped in by client/wordmark.js.
   26px tall makes it 120px wide at the artwork's 4.62:1, which lands the search button within
   a few pixels of where the bare hexagon left it — the signed-out row is the tightest one
   there is (search, Sign up, Login and the kebab all after it) and it still fits. */
@media (max-width: 500px) {
  header img.logo.gh-header-wordmark {
    height: 26px;
    width: auto;
    max-width: 128px;
  }
}
/* Custom menu on Discover, Trending, Recently Added, Subscriptions, and Browse */
body.gh-custom-menu-page my-home-menu my-list-overflow {
  display: none !important;
}

body.gh-custom-menu-page my-home-menu .parent-container {
  width: 100%;
  display: block;
}

/* No rule under the pills anywhere. It went from the home feed in 1.0.24, where it doubled
   up with the first shelf's own rule; Dan had it taken off Latest and Trending too
   (2026-09-14), which is every page this row appears on. The spacing it used to provide
   stays — a row of pills sitting flush against the videos below reads as part of them. */
body.gh-custom-menu-page .gh-custom-menu-nav-host {
  display: block;
  width: 100%;
  max-width: 100%;
  overflow: visible;
  border-bottom: 0;
  padding-bottom: 0;
  margin-bottom: 24px;
}

/* ⚠️ Restated for the home feed, and not redundant: #gh-home's own reset zeroes the margin
   of everything inside it with ID specificity, which beats the rule above — measured, the
   pills went from 24px clear of the first block to 0. `:has(#gh-home)` carries that weight
   back. The border stays gone on both. */
body:has(#gh-home) .gh-custom-menu-nav-host {
  margin-bottom: 24px;
}

/* Flex row: [◀] [menu buttons] [▶] — unique class names avoid global .nav-arrow { position:absolute } */
body.gh-custom-menu-page .gh-custom-menu-nav,
.gh-custom-menu-nav {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  column-gap: 0.25rem;
  width: 100%;
  max-width: 100%;
  min-height: 40px;
  box-sizing: border-box;
  position: relative;
}

body.gh-custom-menu-page .gh-custom-menu-nav .gh-custom-menu-scroll,
.gh-custom-menu-nav .gh-custom-menu-scroll {
  flex: 1 1 auto;
  min-width: 0;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-behavior: smooth;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0;
  padding: 0 0.25rem;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}

body.gh-custom-menu-page .gh-custom-menu-nav .gh-custom-menu-scroll::-webkit-scrollbar,
.gh-custom-menu-nav .gh-custom-menu-scroll::-webkit-scrollbar {
  display: none;
}

body.gh-custom-menu-page .gh-custom-menu-nav .gh-custom-menu-arrow,
.gh-custom-menu-nav .gh-custom-menu-arrow {
  position: relative !important;
  top: auto !important;
  right: auto !important;
  left: auto !important;
  bottom: auto !important;
  transform: none !important;
  flex: 0 0 28px;
  width: 28px;
  min-width: 28px;
  max-width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 2px solid var(--greyBackgroundColor, #444);
  background: var(--greyBackgroundColor, #444);
  color: var(--mainForegroundColor, #fff);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 0.85rem;
  padding: 0;
  margin: 0;
  box-sizing: border-box;
  flex-shrink: 0;
  z-index: 1;
}

body.gh-custom-menu-page .gh-custom-menu-nav .gh-custom-menu-arrow,
.gh-custom-menu-nav .gh-custom-menu-arrow {
  color: #bba777;
}

body.gh-custom-menu-page .gh-custom-menu-nav .gh-custom-menu-arrow svg,
.gh-custom-menu-nav .gh-custom-menu-arrow svg {
  display: block;
  width: 20px;
  height: 20px;
  pointer-events: none;
}

body.gh-custom-menu-page .gh-custom-menu-nav .gh-custom-menu-arrow:hover,
.gh-custom-menu-nav .gh-custom-menu-arrow:hover {
  background: var(--mainColor, var(--primary-450, #bba777));
  color: #121212;
  border-color: var(--mainColor, var(--primary-450, #bba777));
}

body.gh-custom-menu-page .gh-custom-menu-nav:not(.gh-custom-menu-nav-has-overflow) .gh-custom-menu-arrow,
.gh-custom-menu-nav:not(.gh-custom-menu-nav-has-overflow) .gh-custom-menu-arrow {
  visibility: hidden !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

/* Match my-button theme="secondary" (Recently added / Trending quick filters) */
body.gh-custom-menu-page .gh-custom-menu-nav-link.action-button.secondary-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  flex-shrink: 0;
  min-height: 34px;
  padding: 6px 12px;
  font-size: 1rem;
  font-weight: 700;
  text-decoration: none;
  box-sizing: border-box;
}

body.gh-custom-menu-page .gh-custom-menu-nav-link .button-label {
  line-height: 1.3;
}

/* Hide sub-nav: Recently added / Trending quick filters and Sort by */
body.gh-custom-menu-page my-video-filters-header .root {
  display: none !important;
}

body.gh-custom-menu-page my-video-filters-header.d-block {
  display: block !important;
  border-bottom: 1px solid var(--separator-border-color, var(--fg-200, rgba(255, 255, 255, 0.12)));
  margin-bottom: 0.5rem;
  min-height: 0;
  padding: 0;
}

/* Tighter video grid — ~50% vertical spacing */
body.gh-custom-menu-page .margin-content .videos,
body.gh-custom-menu-page .margin-content.videos-margin-content .videos {
  row-gap: 0px;
}

body.gh-custom-menu-page my-video-miniature,
body.gh-custom-menu-page .plugin-video-miniature-full {
  padding-bottom: 0.5rem !important;
}

body.gh-custom-menu-page my-date-group-label.date-displayed:not(:first-child),
body.gh-custom-menu-page .videos-section-title:not(:first-child) {
  margin-top: 0px !important;
  padding-top: 10px !important;
}

body.gh-custom-menu-page .videos-header {
  margin-bottom: 0.5rem !important;
}

body.gh-custom-menu-page my-home-menu.with-mb,
body.gh-custom-menu-page my-home-menu .root.with-mb {
  margin-bottom: 1rem !important;
}

body.gh-custom-menu-page .margin-content.videos-margin-content .section {
  margin-top: 1.25rem !important;
}

body.gh-custom-menu-page .margin-content.videos-margin-content .section-title {
  margin-bottom: 0.25rem !important;
}

body.gh-custom-menu-page .margin-content.videos-margin-content .peertube-button.secondary-button {
  margin-top: 0.1rem !important;
  margin-bottom: 0.1rem !important;
}

body.gh-custom-menu-page .margin-content.quick-access {
  display: none !important;
}
/* Greyhive mobile UI — header search icon; native typeahead in slide-out menu */

@media screen and (max-width: 500px) {
  /* Hide search in header bar (lives in menu; opened via search icon) */
  my-header .root > my-search-typeahead {
    display: none !important;
  }

  /* Single-row header (PeerTube default uses a second grid row for search) */
  my-header .root {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    row-gap: 0 !important;
    grid-template-columns: unset !important;
    grid-template-rows: unset !important;
  }

  my-header .root > * {
    grid-row: auto !important;
    grid-column: auto !important;
  }

  /* Home / Discover / Trending tab bar — items live in the mobile menu instead */
  /* my-home-menu {
    display: none !important;
  } */

  /* PeerTube my-search-typeahead (same component as desktop) at top of slide-out menu */
  .gh-mobile-menu-search {
    padding: 0 var(--co-menu-x-padding, 1.5rem) 1.25rem;
    width: 100%;
    box-sizing: border-box;
  }

  .gh-mobile-menu-search #gh-mobile-search-input {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
  }

  /* Header search icon (opens menu + focuses search) */
  .gh-mobile-header-search-btn {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    min-width: 40px;
    padding: 0;
    margin-right: 0.25rem;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--fg-200);
    cursor: pointer;
  }

  .gh-mobile-header-search-btn:hover,
  .gh-mobile-header-search-btn:focus-visible {
    opacity: 0.85;
    outline: none;
    background: var(--bg-secondary-400, rgba(255, 255, 255, 0.08));
  }

  .gh-mobile-header-search-btn svg {
    width: 22px;
    height: 22px;
    display: block;
  }

  /* Hamburger → vertical dots (saves horizontal space) */
  my-header .menu-button {
    right: 0 !important;
    margin-inline-end: 0 !important;
  }

  my-header .menu-button .action-button {
    width: 36px !important;
    min-width: 36px !important;
    max-width: 36px !important;
    padding: 0 !important;
  }

  my-header .menu-button my-global-icon svg {
    vertical-align: bottom;
    width: inherit;
    height: inherit;
  }
}

@media screen and (min-width: 501px) {
  .gh-mobile-menu-search,
  .gh-mobile-header-search-btn {
    display: none !important;
  }
}
#gh-custom-menu-admin-panel .card-body {
  padding-top: 1rem;
  position: relative;
}

#gh-custom-menu-admin-panel #gh-custom-menu-rows {
  gap: 0.5rem !important;
}

#gh-custom-menu-admin-panel .gh-custom-menu-row {
  margin-bottom: 0;
}

#gh-custom-menu-admin-panel .gh-custom-menu-row-fields {
  flex-wrap: nowrap;
}

#gh-custom-menu-admin-panel .gh-custom-menu-row .form-label {
  font-size: 0.8rem;
}

#gh-custom-menu-admin-panel .gh-custom-menu-row .form-control,
#gh-custom-menu-admin-panel .gh-custom-menu-row .form-select {
  min-height: 31px;
}

#gh-custom-menu-admin-panel .gh-custom-menu-row .gh-row-remove {
  white-space: nowrap;
  padding: 6px 10px;
  font-size: 0.85rem;
  min-height: 31px;
}

body.gh-custom-menu-row-drag-active {
  cursor: grabbing !important;
  user-select: none;
}

#gh-custom-menu-admin-panel .gh-drag-handle {
  cursor: grab;
  user-select: none;
  touch-action: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 4px;
  color: var(--fg-300, #999);
  font-size: 1rem;
  line-height: 1;
}

#gh-custom-menu-admin-panel .gh-drag-handle:hover {
  background: var(--bg-secondary-400, #333);
  color: var(--fg, #fff);
}

#gh-custom-menu-admin-panel .gh-drag-handle:active {
  cursor: grabbing;
}

#gh-custom-menu-admin-panel .gh-custom-menu-row.gh-row-dragging {
  opacity: 0.55;
}

#gh-custom-menu-admin-panel .gh-drop-marker {
  display: block;
  width: 100%;
  height: 18px;
  min-height: 18px;
  margin: 2px 0;
  border-radius: 4px;
  box-sizing: border-box;
  pointer-events: none;
  flex-shrink: 0;
  background: linear-gradient(
    180deg,
    rgba(187, 167, 119, 0.2) 0%,
    rgba(187, 167, 119, 0.45) 100%
  );
  border: 2px solid var(--mainColor, var(--primary-450, #bba777));
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.12),
    0 0 10px rgba(187, 167, 119, 0.35);
}

/* Greyhive gold + dark Select2 (category / channel searchable dropdowns) */
#gh-custom-menu-admin-panel .select2-container--default .select2-selection--single,
#gh-custom-menu-admin-panel .select2-container--default .select2-selection--multiple {
  background-color: #2a2a2e;
  border: 1px solid #52525b;
  border-radius: 6px;
  min-height: 31px;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-selection--single {
  height: 31px;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-selection--single .select2-selection__rendered {
  color: #f4f4f5;
  line-height: 29px;
  padding-left: 8px;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-selection--single .select2-selection__arrow {
  height: 29px;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-selection--single .select2-selection__placeholder {
  color: #a1a1aa;
}

#gh-custom-menu-admin-panel .select2-container--default.select2-container--focus .select2-selection--single,
#gh-custom-menu-admin-panel .select2-container--default.select2-container--open .select2-selection--single,
#gh-custom-menu-admin-panel .select2-container--default.select2-container--focus .select2-selection--multiple {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-custom-menu-admin-panel .select2-container--default .select2-search--inline .select2-search__field,
#gh-custom-menu-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field {
  color: #f4f4f5;
  background-color: #1e1e22;
  border: 1px solid #52525b;
  border-radius: 4px;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field:focus {
  border-color: #bba777;
  outline: none;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-custom-menu-admin-panel .select2-dropdown {
  background-color: #2a2a2e !important;
  border: 1px solid #52525b !important;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-results > .select2-results__options {
  background-color: #2a2a2e;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-results__option {
  background-color: #2a2a2e;
  color: #f4f4f5;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-results__option--selectable {
  color: #f4f4f5;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-results__option--highlighted,
#gh-custom-menu-admin-panel .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: #bba777 !important;
  color: #121212 !important;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-results__option--selected,
#gh-custom-menu-admin-panel .select2-container--default .select2-results__option[aria-selected='true'] {
  background-color: #3a3a40 !important;
  color: #f4f4f5 !important;
}

#gh-custom-menu-admin-panel .select2-container--default .select2-selection__clear {
  color: #bba777;
  margin-right: 4px;
}
/* Phase 1: Discover, Recently Added, Trending */

body.gh-display-ads-page {
  /* Match PeerTube collapsed sidebar / overlay layout ($menu-collapsed-width). */
  --gh-display-ad-menu-width: 50px;
}

@media (min-width: 1200px) {
  body.gh-display-ads-page.menu-open {
    --gh-display-ad-menu-width: var(--menu-width, 248px);
  }
}

/* Desktop sticky footer — 728×90 */
@media (min-width: 501px) {
  body.gh-display-ads-page .gh-display-ad-footer {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 1200;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 8px 12px;
    pointer-events: none;
    box-sizing: border-box;
  }

  @media (min-width: 800px) {
    body.gh-display-ads-page .gh-display-ad-footer {
      padding-left: calc(var(--gh-display-ad-menu-width) + 12px);
    }
  }

  body.gh-display-ads-page .gh-display-ad-footer-inner {
    pointer-events: auto;
    display: block;
    line-height: 0;
    box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.35);
    border-radius: 4px;
    overflow: hidden;
    background: rgba(0, 0, 0, 0.2);
  }

  body.gh-display-ads-page .gh-display-ad-footer img {
    display: block;
    width: 728px;
    max-width: min(728px, calc(100vw - var(--gh-display-ad-menu-width) - 48px));
    height: auto;
    max-height: 90px;
    object-fit: cover;
  }

  /* PeerTube global `a:hover { opacity: 0.8 }` — keep ad banner fully opaque */
  body.gh-display-ads-page .gh-display-ad-link,
  body.gh-display-ads-page .gh-display-ad-link:hover,
  body.gh-display-ads-page .gh-display-ad-link:focus,
  body.gh-display-ads-page .gh-display-ad-link:focus-visible {
    opacity: 1;
  }

  /* Reserve space so the last row of videos is not hidden under the banner */
  body.gh-display-ads-page my-videos-list,
  body.gh-display-ads-page .videos-container {
    padding-bottom: 110px !important;
  }
}

/* Mobile leaderboard — 320×50, below header, above custom menu */
@media (max-width: 500px) {
  /* Dan: "All placements on mobile > IMO we need to auto-size the ads to fill the full width
     of the mobile device". Edge to edge, so the side padding goes with it. Capped at the
     phone breakpoint deliberately — an iPad keeps the centred treatment. */
  body.gh-display-ads-page .gh-display-ad-leaderboard {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100%;
    padding: 8px 0 4px;
    box-sizing: border-box;
    background: transparent;
  }

  body.gh-display-ads-page .gh-display-ad-leaderboard-inner {
    display: block;
    line-height: 0;
    width: 100%;
    max-width: 100%;
  }

  /* ⚠️ The home feed gutters its own content, so a banner sitting inside it measured 358 of
     a 390px screen. Full width means the device's width, so the placement steps back out of
     that gutter — reading --pad from the feed rather than hardcoding 16px, because the feed
     changes it by breakpoint. */
  body.gh-display-ads-page #gh-home .gh-display-ad-leaderboard {
    margin-left: calc(-1 * var(--pad, 16px));
    margin-right: calc(-1 * var(--pad, 16px));
    width: auto;
  }

  /* ⚠️ The creatives in rotation are 320x50, so filling a 390px phone upscales them by ~1.2
     and softens the artwork — Dan's call, "stretch now, new art later". The max-height cap
     had to go with it: at full width the banner is ~61px tall at 390 and ~67 at 430, and a
     50px cap would have cropped the art rather than scaled it. Replace the creatives with
     full-width art (1170x180 covers a 3x phone) and nothing here needs to change. */
  body.gh-display-ads-page .gh-display-ad-leaderboard img {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    object-fit: cover;
  }

  body.gh-display-ads-page .gh-display-ad-leaderboard .gh-display-ad-link,
  body.gh-display-ads-page .gh-display-ad-leaderboard .gh-display-ad-link:hover,
  body.gh-display-ads-page .gh-display-ad-leaderboard .gh-display-ad-link:focus,
  body.gh-display-ads-page .gh-display-ad-leaderboard .gh-display-ad-link:focus-visible {
    opacity: 1;
  }
}

@media (min-width: 501px) {
  body.gh-display-ads-page .gh-display-ad-leaderboard {
    display: none !important;
  }
}

@media (max-width: 500px) {
  body.gh-display-ads-page .gh-display-ad-footer {
    display: none !important;
  }
}
.gh-display-ads-admin-hidden,
#gh-display-ads-admin-panel .gh-display-ads-admin-hidden,
my-plugin-show-installed .gh-display-ads-admin-hidden {
  display: none !important;
}

.gh-display-ads-admin-root {
  margin-top: 0.5rem;
}

.gh-display-ads-admin-root .gh-da-tabs .nav-link {
  cursor: pointer;
  border: none;
  background: transparent;
  color: var(--mainForegroundColor, #fff);
  opacity: 0.7;
  padding: 0.5rem 1rem;
}

.gh-display-ads-admin-root .gh-da-tabs .nav-link.active {
  opacity: 1;
  border-bottom: 2px solid var(--mainColor, #beac77);
}

.gh-display-ads-admin-root .gh-da-table th,
.gh-display-ads-admin-root .gh-da-table td {
  vertical-align: middle;
}

#gh-da-top-bar {
  width: 100%;
}

#gh-da-top-bar .gh-da-top-bar-row {
  display: flex !important;
  flex-flow: row nowrap !important;
  align-items: flex-end;
  gap: 0.75rem 1rem;
  width: 100%;
}

#gh-da-top-bar .gh-da-top-bar-field {
  flex: 0 0 auto;
  width: auto !important;
  max-width: none;
  min-width: 0;
}

#gh-da-top-bar .gh-da-top-bar-field--wide {
  flex: 1 1 14rem;
  min-width: 10rem;
  max-width: 22rem;
}

#gh-da-top-bar .gh-da-top-bar-actions {
  flex: 0 0 auto;
  margin-left: auto;
  white-space: nowrap;
}

#gh-da-top-bar .form-label {
  font-size: 0.875rem;
  white-space: nowrap;
}

#gh-da-top-bar #gh-da-storage-mode {
  width: 11rem;
  min-width: 11rem;
}

#gh-da-top-bar #gh-da-public-base-url {
  width: 100%;
  min-width: 10rem;
}

#gh-da-top-bar #gh-da-submit-slot input[type="submit"] {
  margin-top: 0 !important;
  width: auto !important;
  max-width: none !important;
  display: inline-block !important;
}

.gh-da-top-bar-row {
  display: flex;
  flex-wrap: nowrap;
  align-items: flex-end;
  gap: 0.75rem 1rem;
}

.gh-da-top-bar-field {
  flex: 0 0 auto;
  min-width: 11rem;
}

.gh-da-top-bar-field--wide {
  flex: 1 1 16rem;
  min-width: 12rem;
  max-width: 28rem;
}

.gh-da-top-bar-actions {
  flex: 0 0 auto;
  margin-left: auto;
}

.gh-da-top-bar .form-label {
  font-size: 0.875rem;
}

.gh-da-tracking-filters {
  --gh-da-filter-control-height: 38px;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 0.5rem 0.75rem;
  margin-bottom: 1rem;
}

.gh-da-tracking-filters .gh-da-filter-item {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}

.gh-da-tracking-filters .form-label {
  margin-bottom: 0;
  font-size: 0.875rem;
  white-space: nowrap;
}

.gh-da-tracking-filters input[type="date"].form-control {
  width: auto;
  min-width: 9rem;
  max-width: 11rem;
  height: var(--gh-da-filter-control-height);
  min-height: var(--gh-da-filter-control-height);
  padding: 0.375rem 0.5rem;
  font-size: 0.875rem;
  border-radius: 6px;
  box-sizing: border-box;
}

.gh-da-tracking-filters .form-control,
.gh-da-tracking-filters .form-select {
  width: auto;
  min-width: 9rem;
  max-width: 11rem;
  padding: 0.375rem 0.5rem;
  font-size: 0.875rem;
  box-sizing: border-box;
}

.gh-da-tracking-filters #gh-da-filter-placements {
  min-width: 11rem;
  max-width: 14rem;
  height: var(--gh-da-filter-control-height);
  min-height: var(--gh-da-filter-control-height);
  border-radius: 6px;
}

.gh-da-tracking-filters .gh-da-filter-item--ads {
  align-items: center;
}

.gh-da-tracking-filters .gh-da-filter-item--ads .select2-container {
  width: 280px !important;
  max-width: 280px;
}

.gh-da-tracking-filters .gh-da-filter-item--ads .select2-container--default .select2-selection--multiple {
  min-height: var(--gh-da-filter-control-height);
  max-height: 76px;
  overflow-y: auto;
  border-radius: 6px;
  display: flex;
  align-items: center;
}

.gh-da-tracking-filter-actions {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.gh-da-tracking-filters .gh-da-tracking-action-btn {
  height: var(--gh-da-filter-control-height);
  min-height: var(--gh-da-filter-control-height);
  min-width: 7.5rem;
  padding: 0 1rem;
  font-size: 0.875rem;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  box-sizing: border-box;
  border-radius: 6px;
}

.gh-da-tracking-filters .gh-da-export-btn {
  color: white !important;
}

.gh-display-ads-admin-root .gh-da-file-desktop,
.gh-display-ads-admin-root .gh-da-file-mobile {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.gh-display-ads-admin-root .gh-display-ads-preview {
  display: flex;
  align-items: center;
  min-height: 52px;
  padding: 0.5rem;
  background: var(--mainBackgroundColor, #1a1a1a);
  border: 1px dashed var(--inputBorderColor, rgba(255, 255, 255, 0.2));
  border-radius: 4px;
}

.gh-display-ads-admin-root .gh-display-ads-preview img {
  max-width: 100%;
  height: auto;
  display: block;
}

.gh-display-ads-admin-root .gh-display-ads-preview--desktop img {
  max-width: 728px;
  max-height: 90px;
}

.gh-display-ads-admin-root .gh-display-ads-preview--mobile img {
  max-width: 320px;
  max-height: 50px;
}

.gh-display-ads-admin-root .gh-display-ads-preview-empty {
  color: var(--greyForegroundColor, #888);
  font-size: 0.9rem;
}

/* Select2 — Greyhive theme (modal + admin panel) */
#gh-display-ads-admin-panel .select2-container--default .select2-selection--multiple,
.gh-da-modal .select2-container--default .select2-selection--multiple,
#gh-display-ads-admin-panel .gh-da-tracking-filters .select2-container--default .select2-selection--multiple {
  background-color: var(--input-bg);
  border: 1px solid var(--input-border, #52525b);
  border-radius: 6px;
  min-height: 38px;
}

.gh-da-modal .select2-container--default .select2-selection--multiple .select2-selection__rendered,
#gh-display-ads-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__rendered {
  padding: 2px 6px;
}

.gh-da-modal .select2-container--default .select2-selection--multiple .select2-selection__choice,
#gh-display-ads-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice {
  background-color: #beac77;
  border: 1px solid #beac77;
  color: #121212;
}

.gh-da-modal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove,
#gh-display-ads-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  color: #121212;
}

.gh-da-modal .select2-container--default.select2-container--focus .select2-selection--multiple,
.gh-da-modal .select2-container--default.select2-container--open .select2-selection--multiple,
#gh-display-ads-admin-panel .select2-container--default.select2-container--focus .select2-selection--multiple,
#gh-display-ads-admin-panel .select2-container--default.select2-container--open .select2-selection--multiple {
  border-color: #beac77;
  box-shadow: 0 0 0 0.15rem rgba(190, 172, 119, 0.25);
}

.gh-da-modal .select2-container--default .select2-search--inline .select2-search__field,
.gh-da-modal .select2-container--default .select2-search--dropdown .select2-search__field,
#gh-display-ads-admin-panel .select2-container--default .select2-search--inline .select2-search__field,
#gh-display-ads-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field {
  color: var(--mainForegroundColor, #f4f4f5);
  background-color: var(--input-bg);
  border: 1px solid var(--input-border, #52525b);
  border-radius: 4px;
}

.gh-da-modal .select2-dropdown,
#gh-display-ads-admin-panel .select2-dropdown {
  background-color: var(--input-bg) !important;
  border: 1px solid var(--input-border, #52525b) !important;
}

.gh-da-modal .select2-container--default .select2-results > .select2-results__options,
#gh-display-ads-admin-panel .select2-container--default .select2-results > .select2-results__options {
  background-color: var(--input-bg);
}

.gh-da-modal .select2-container--default .select2-results__option,
#gh-display-ads-admin-panel .select2-container--default .select2-results__option {
  background-color: var(--input-bg);
  color: var(--mainForegroundColor, #f4f4f5);
}

.gh-da-modal .select2-container--default .select2-results__option--highlighted,
.gh-da-modal .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable,
#gh-display-ads-admin-panel .select2-container--default .select2-results__option--highlighted,
#gh-display-ads-admin-panel .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: #beac77 !important;
  color: #121212 !important;
}

.gh-da-modal .select2-container--default .select2-results__option--selected,
.gh-da-modal .select2-container--default .select2-results__option[aria-selected='true'],
#gh-display-ads-admin-panel .select2-container--default .select2-results__option--selected,
#gh-display-ads-admin-panel .select2-container--default .select2-results__option[aria-selected='true'] {
  background-color: var(--greyBackgroundColor, #3a3a40) !important;
  color: var(--mainForegroundColor, #f4f4f5) !important;
}

.gh-da-modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  z-index: 1040;
}

.gh-da-modal {
  position: fixed;
  inset: 0;
  z-index: 1050;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}

.gh-da-modal-content {
  width: 100%;
  max-width: 1200px;
  max-height: 90vh;
  overflow-y: auto;
}

.gh-da-modal-content--wide {
  max-width: 1000px;
}

.gh-da-tracking-filters .select2-container {
  z-index: 20;
}

.gh-da-tracking-filters .select2-dropdown {
  z-index: 21;
}

.gh-da-modal .gh-da-export-btn {
  color: white !important;
}

.gh-da-modal .select2-container {
  z-index: 1060;
}

.gh-da-modal .select2-dropdown {
  z-index: 1061;
}
.gh-ev-admin-hidden {
  display: none !important;
}

#gh-ev-admin-panel .gh-ev-table th {
  white-space: nowrap;
}

#gh-ev-admin-panel .gh-ev-video-cell {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  min-width: 0;
}

#gh-ev-admin-panel .gh-ev-video-thumb-link {
  flex-shrink: 0;
  line-height: 0;
}

#gh-ev-admin-panel .gh-ev-video-thumb {
  display: block;
  width: 96px;
  height: 54px;
  object-fit: cover;
  border-radius: 4px;
  background: var(--bg-secondary, rgba(128, 128, 128, 0.15));
}

#gh-ev-admin-panel .gh-ev-video-thumb--placeholder {
  display: inline-block;
}

#gh-ev-admin-panel .gh-ev-title {
  font-weight: 600;
  text-decoration: none;
  min-width: 0;
  line-height: 1.3;
}

#gh-ev-admin-panel .gh-ev-title:hover {
  text-decoration: underline;
}

#gh-ev-admin-panel .gh-ev-published {
  white-space: nowrap;
  font-size: 0.875rem;
}

#gh-ev-admin-panel .gh-ev-badge {
  white-space: nowrap;
}

#gh-ev-admin-panel .gh-ev-exclusive-select {
  min-width: 9rem;
  max-width: 11rem;
  font-size: 0.8rem;
}

#gh-ev-admin-panel .gh-ev-stats {
  min-width: 8rem;
}

#gh-ev-admin-panel .select2-container--default .select2-selection--single,
#gh-ev-admin-panel .select2-container--default .select2-selection--multiple {
  background-color: #2a2a2e;
  border: 1px solid #52525b;
  border-radius: 6px;
  min-height: 42px;
}

#gh-ev-admin-panel .select2-container--default .select2-selection--single {
  height: 38px;
}

#gh-ev-admin-panel .select2-container--default .select2-selection--single .select2-selection__rendered {
  color: #f4f4f5;
  line-height: 36px;
  padding-left: 8px;
}

#gh-ev-admin-panel .select2-container--default .select2-selection--single .select2-selection__arrow {
  height: 36px;
}

#gh-ev-admin-panel .select2-container--default .select2-selection--single .select2-selection__placeholder {
  color: #a1a1aa;
}

#gh-ev-admin-panel .select2-container--default.select2-container--focus .select2-selection--single,
#gh-ev-admin-panel .select2-container--default.select2-container--open .select2-selection--single {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-ev-admin-panel .select2-container--default .select2-search--inline .select2-search__field,
#gh-ev-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field {
  color: #f4f4f5;
  background-color: #1e1e22;
  border: 1px solid #52525b;
  border-radius: 4px;
}

#gh-ev-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field:focus {
  border-color: #bba777;
  outline: none;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-ev-admin-panel .select2-container--default .select2-selection__clear {
  color: #bba777;
  margin-right: 4px;
}

#gh-ev-admin-panel .select2-dropdown {
  background-color: #2a2a2e !important;
  border: 1px solid #52525b !important;
}

#gh-ev-admin-panel .select2-container--default .select2-results > .select2-results__options {
  background-color: #2a2a2e;
}

#gh-ev-admin-panel .select2-container--default .select2-results__option {
  background-color: #2a2a2e;
  color: #f4f4f5;
}

#gh-ev-admin-panel .select2-container--default .select2-results__option--selectable {
  color: #f4f4f5;
}

#gh-ev-admin-panel .select2-container--default .select2-results__option--highlighted,
#gh-ev-admin-panel .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: #bba777 !important;
  color: #121212 !important;
}

#gh-ev-admin-panel .select2-container--default .select2-results__option--selected,
#gh-ev-admin-panel .select2-container--default .select2-results__option[aria-selected='true'] {
  background-color: #3a3a40 !important;
  color: #f4f4f5 !important;
}
.gh-ev-my-state-line {
  margin-top: 0.35rem;
}

.gh-ev-my-state-line .gh-ev-my-badge {
  white-space: nowrap;
}

.gh-ev-exclusive-head,
.gh-ev-exclusive-cell {
  white-space: nowrap;
  vertical-align: middle;
}

.gh-ev-exclusive-cell {
  min-width: 9.5rem;
}

.gh-ev-exclusive-select {
  min-width: 8.5rem;
  max-width: 10rem;
}
.gh-ev-manage-exclusive-group .form-group-description {
  margin-bottom: 0.35rem;
}

/* Radio group (replaces the old dropdown) */
.gh-ev-manage-exclusive-group .gh-ev-manage-exclusive-radios {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

.gh-ev-manage-exclusive-group .peertube-radio-container {
  display: flex;
  align-items: center;
  gap: 0.4rem;
}

/* Mandatory affordances */
.gh-ev-manage-exclusive-group .gh-ev-required {
  color: var(--red, #ff5b5b);
  font-weight: 600;
}

.gh-ev-manage-exclusive-group .gh-ev-required-hint {
  margin-top: 0.35rem;
  font-size: 0.85rem;
  color: var(--red, #ff5b5b);
}

/* Publish/Update button while no choice has been made */
.gh-ev-gated,
.gh-ev-gated button,
.gh-ev-gated a {
  opacity: 0.5;
  cursor: not-allowed !important;
  pointer-events: none;
}
.gh-ev-state-head,
.gh-ev-state-cell {
  white-space: nowrap;
  vertical-align: middle;
}

.gh-ev-state-cell {
  min-width: 10rem;
}

.gh-ev-admin-info-badge-line {
  margin-top: 0.35rem;
}

.gh-ev-admin-badge-line {
  margin-bottom: 0.35rem;
}

.gh-ev-state-cell .gh-ev-exclusive-select {
  min-width: 9rem;
  max-width: 11rem;
}

.gh-ev-filter-section .filter-title {
  font-weight: 600;
}
.gh-exclusive-badge {
  position: absolute;
  top: 5%;
  left: 5%;
  z-index: 5;
  display: inline-flex;
  align-items: center;
  font-size: clamp(11px, 1.2vw, 17px);
  gap: 0.35em;
  padding: 0.25em 0.55em;
  border-radius: 0.3em;
  background: rgba(5, 5, 7, 0.97);
  border: 1px solid rgba(187, 167, 119, 0.85);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.55);
  pointer-events: none;
  line-height: 1;
}
.gh-exclusive-badge__icon {
  display: block;
  flex: none;
  width: 1.15em;
  aspect-ratio: 867 / 935;
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
}
.gh-exclusive-badge__label {
  font-family: "Bebas Neue", "DM Sans", sans-serif;
  font-weight: 400;
  letter-spacing: 0.06em;
  color: #BBA777;
  font-size: 1em;
  text-transform: uppercase;
}
/* peertube-plugin-blog-management — Greyhive blog (reference: category / post / featured cards) */
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=Space+Mono:wght@400;700&family=Bebas+Neue&display=swap');

.gh-blog-root {
  --gh-ease: cubic-bezier(0.16, 1, 0.3, 1);
  --gh-c-bg: #0b0b0d;
  --gh-c-bg-2: #111115;
  --gh-c-bg-card: #17171d;
  --gh-c-bg-card-hover: #1e1e26;
  --gh-c-surface: #252530;
  --gh-c-border: rgba(255, 255, 255, 0.06);
  --gh-c-border-hover: rgba(255, 255, 255, 0.12);
  --gh-c-border-gold: rgba(187, 167, 119, 0.3);
  --gh-c-text: #e8e6e1;
  --gh-c-text-mid: #a0a0ac;
  --gh-c-text-dim: #b5b5cf;
  --gh-c-gold: #bba777;
  --gh-c-gold-light: #d4c49a;
  --gh-c-gold-dark: #8a7c58;
  --gh-font-display: 'Bebas Neue', sans-serif;
  --gh-font-body: 'DM Sans', system-ui, sans-serif;
  --gh-font-mono: 'Space Mono', ui-monospace, monospace;
  min-height: 50vh;
  padding-bottom: 5rem;
  font-family: var(--gh-font-body);
  color: var(--gh-c-text);
  -webkit-font-smoothing: antialiased;
}

.gh-blog-inner {
  /* max-width: 1200px; */
  margin: 0 auto;
}

/* Main blog hero — matches reference .hero / .hero-sub */
.gh-blog-hero {
  padding: 5px 0 35px;
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid var(--gh-c-border);
  margin-bottom: 0;
  text-align: left;
}

.gh-blog-hero::before {
  content: '';
  position: absolute;
  top: -200px;
  right: -100px;
  width: 700px;
  height: 700px;
  background: radial-gradient(circle, rgba(187, 167, 119, 0.05) 0%, transparent 65%);
  pointer-events: none;
}

.gh-blog-hero-title {
  font-family: var(--gh-font-display);
  font-size: clamp(52px, 7vw, 96px);
  text-transform: uppercase;
  line-height: 0.92;
  font-weight: bold;
  margin: 0 0 20px;
  position: relative;
  z-index: 1;
  letter-spacing: 3px;
}

.gh-blog-hero-title span,
.gh-blog-hero-title em,
.gh-blog-hero-title strong,
.gh-blog-hero-title b,
.gh-blog-hero-title i {
  font-style: normal;
  font-weight: inherit;
  color: var(--gh-c-gold);
}

.gh-blog-hero-sub {
  font-family: var(--gh-font-body);
  font-size: 16px;
  color: var(--gh-c-text-mid);
  line-height: 1.75;
  max-width: 560px;
  margin: 0 0 36px;
  position: relative;
  z-index: 1;
  font-weight: normal;
}

/* Home page exact-style shell */
.gh-blog-home-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 28px;
}

.gh-blog-home-hero-eyebrow {
  font-family: var(--gh-font-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin-bottom: 18px;
  display: flex;
  align-items: center;
  gap: 12px;
}

.gh-blog-home-hero-eyebrow::before {
  content: '';
  width: 20px;
  height: 1px;
  background: var(--gh-c-gold-dark);
}

.gh-blog-home-hero-meta {
  display: flex;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
}

.gh-blog-home-hero-meta-item {
  font-family: var(--gh-font-mono);
  font-size: 12px;
  color: var(--gh-c-text-dim);
  letter-spacing: 0.1em;
  display: flex;
  align-items: center;
  gap: 8px;
}

.gh-blog-home-hero-meta-item::before {
  content: '';
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--gh-c-gold-dark);
}

.gh-blog-home-hero-meta-item:first-child::before {
  display: none;
}

/* Home hero shares 1200px shell with filter + grid; tame vw-based title on ultrawide */
.gh-blog-home-hero-title {
  font-size: clamp(36px, 4.2vw, 72px);
  letter-spacing: 2px;
}

.gh-blog-home-hero-sub {
  max-width: min(560px, 100%);
}

.gh-blog-home-filter-bar {
  background: var(--gh-c-bg-2);
  border-top: 1px solid var(--gh-c-border);
  border-bottom: 1px solid var(--gh-c-border);
  padding: 20px 0;
  position: sticky;
  top: 0;
  z-index: 50;
  backdrop-filter: blur(12px);
}

.gh-blog-home-filter-inner {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}

.gh-blog-home-search-wrap {
  position: relative;
  flex: 1;
  min-width: 220px;
}

.gh-blog-home-search-icon {
  position: absolute;
  left: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--gh-c-text-dim);
  font-size: 14px;
  pointer-events: none;
}

.gh-blog-home-search-input {
  width: 100%;
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border);
  border-radius: 5px;
  padding: 10px 16px 10px 38px;
  font-family: var(--gh-font-body);
  font-size: 13px;
  color: var(--gh-c-text);
  outline: none;
  transition: border-color 0.2s;
}

.gh-blog-home-search-input::placeholder {
  color: var(--gh-c-text-dim);
}

.gh-blog-home-search-input:focus {
  border-color: var(--gh-c-gold);
}

.gh-blog-home-filter-cats {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.gh-blog-home-filter-cat {
  font-family: var(--gh-font-mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 7px 14px;
  border-radius: 4px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text-dim);
  cursor: pointer;
  transition: all 0.2s;
  white-space: nowrap;
  text-decoration: none;
  display: inline-block;
  box-sizing: border-box;
}

.gh-blog-home-filter-cat:visited {
  color: var(--gh-c-text-dim);
}

.gh-blog-home-filter-cat.active:visited {
  color: var(--gh-c-gold);
}

.gh-blog-home-filter-cat:hover {
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-blog-home-filter-cat.active {
  background: rgba(187, 167, 119, 0.1);
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-blog-home-featured {
  padding: 46px 0 0;
}

/* Blog home — latest posts grid (6 recent), mirrors reference .posts-grid / .post-card */
.gh-blog-home-latest-section {
  padding: 56px 0 24px;
}

.gh-blog-home-posts-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

.gh-blog-home-post-card {
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border);
  border-radius: 10px;
  overflow: hidden;
  text-decoration: none;
  display: block;
  color: inherit;
  transition: border-color 0.3s ease, background 0.3s ease;
}

.gh-blog-home-post-card:hover {
  border-color: var(--gh-c-border-hover);
  background: var(--gh-c-bg-card-hover);
}

.gh-blog-home-post-img {
  width: 100%;
  aspect-ratio: 16 / 9;
  background: var(--gh-c-surface);
  position: relative;
  overflow: hidden;
}

.gh-blog-home-post-img-el {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.45s var(--gh-ease);
}

.gh-blog-home-post-card:hover .gh-blog-home-post-img-el {
  transform: scale(1.04);
}

.gh-blog-home-post-img-placeholder {
  width: 100%;
  height: 100%;
  min-height: 120px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--gh-font-display);
  font-size: 13px;
  letter-spacing: 2px;
  color: var(--gh-c-text-dim);
}

.gh-blog-home-post-body {
  padding: 20px;
}

.gh-blog-home-post-cat {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin-bottom: 8px;
}

.gh-blog-home-post-title {
  font-family: var(--gh-font-display);
  font-size: clamp(18px, 2vw, 24px);
  letter-spacing: 0.5px;
  line-height: 1.1;
  margin-bottom: 10px;
  color: var(--gh-c-text);
  font-weight: 400;
}

.gh-blog-home-post-title em {
  font-style: normal;
  color: var(--gh-c-gold);
}

.gh-blog-home-post-excerpt {
  font-size: 13px;
  color: var(--gh-c-text-mid);
  line-height: 1.6;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

@media (max-width: 1024px) {
  .gh-blog-home-posts-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 768px) {
  .gh-blog-home-posts-grid {
    grid-template-columns: 1fr;
  }

  .gh-blog-home-latest-section {
    padding: 40px 0 16px;
  }
}

.gh-blog-home-categories-section {
  padding: 10px 0;
}

.gh-blog-home-categories-head {
  margin-bottom: 40px;
}

.gh-blog-home-sec-title {
  font-family: var(--gh-font-display);
  font-size: clamp(34px, 4.2vw, 54px);
  letter-spacing: 2px;
  line-height: 1;
  margin-bottom: 16px;
}

.gh-blog-home-sec-title em {
  font-style: normal;
  color: var(--gh-c-gold);
}

.gh-blog-home-sec-sub {
  font-size: 18px;
  color: var(--gh-c-text-mid);
  line-height: 1.75;
  max-width: 600px;
  margin-bottom: 0;
}

.gh-blog-home-cat-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

.gh-blog-home-cat-card {
  padding: 28px;
  border-radius: 10px;
}

.gh-blog-home-cat-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 14px;
}

.gh-blog-home-cat-count {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
  background: var(--gh-c-surface);
  padding: 4px 10px;
  border-radius: 100px;
}

.gh-blog-home-cat-count.has-posts {
  color: var(--gh-c-gold);
  background: rgba(187, 167, 119, 0.1);
}

.gh-blog-home-cat-arrow {
  display: flex;
  align-items: center;
  gap: 6px;
  font-family: var(--gh-font-mono);
  font-size: 12px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
  margin-top: auto;
  padding-top: 16px;
  transition: color 0.2s, gap 0.2s;
}

.gh-blog-home-cat-card:hover .gh-blog-home-cat-arrow {
  color: var(--gh-c-gold);
  gap: 10px;
}

.gh-blog-home-empty-state {
  display: none;
  text-align: center;
  padding: 80px 20px;
}

.gh-blog-home-empty-kicker {
  font-family: var(--gh-font-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin-bottom: 16px;
}

.gh-blog-home-empty-title {
  font-family: var(--gh-font-display);
  font-size: 36px;
  letter-spacing: 1px;
  margin-bottom: 12px;
  text-transform: uppercase;
}

.gh-blog-home-empty-sub {
  font-size: 16px;
  color: var(--gh-c-text-mid);
  max-width: 400px;
  margin: 0 auto 32px;
}

.gh-blog-home-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 13px 26px;
  font-family: var(--gh-font-body);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none;
  border-radius: 5px;
  border: none;
  cursor: pointer;
  transition: all 0.3s var(--gh-ease);
  white-space: nowrap;
  line-height: 1.4;
}

.gh-blog-home-btn-gold {
  background: var(--gh-c-gold);
  color: #0b0b0d !important;
}

.gh-blog-home-btn-gold:hover {
  background: var(--gh-c-gold-light);
  transform: translateY(-2px);
  box-shadow: 0 8px 30px rgba(187, 167, 119, 0.35);
}

.gh-blog-home-btn-arrow::after {
  content: '→';
  margin-left: 4px;
  transition: transform 0.2s;
}

.gh-blog-home-btn-arrow:hover::after {
  transform: translateX(3px);
}

.gh-blog-kicker {
  display: inline-block;
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin-bottom: 0.35rem;
}

.gh-blog-eyebrow {
  font-family: var(--gh-font-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin: 0;
  display: flex;
  align-items: center;
  gap: 12px;
}

.gh-blog-eyebrow::before {
  content: '';
  width: 18px;
  height: 1px;
  background: var(--gh-c-gold-dark);
}

/* Category index: each tile max ~240px wide (no stretch on ultrawide); grid caps at 5 columns */
.gh-blog-cat-grid-fluid {
  --gh-cat-col-max: 320px;
  --gh-cat-col-min: 300px;
  display: grid;
  gap: 12px;
  margin-top: 2rem;
  justify-content: start;
  width: 100%;
  grid-template-columns: repeat(auto-fill, minmax(var(--gh-cat-col-min), var(--gh-cat-col-max)));
}

@media (max-width: 640px) {
  .gh-blog-cat-grid-fluid {
    grid-template-columns: 1fr;
    max-width: none;
  }
}

.gh-blog-cat-card {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-height: 100%;
  padding: 20px;
  border-radius: 8px;
  border: 1px solid var(--gh-c-border);
  background: var(--gh-c-bg-card);
  text-decoration: none;
  color: inherit;
  transition: border-color 0.3s ease, background 0.3s ease;
}

.gh-blog-cat-card:hover {
  border-color: var(--gh-c-border-gold);
  background: var(--gh-c-bg-card-hover);
}

.gh-blog-cat-card:hover .gh-blog-cat-name {
  color: var(--gh-c-gold);
}

.gh-blog-cat-card--compact {
  min-height: 0;
}

.gh-blog-cat-num {
  font-family: var(--gh-font-mono);
  font-size: 28px;
  line-height: 1;
  font-weight: 700;
  letter-spacing: 1px;
  color: rgb(187 167 119 / 30%);
}

.gh-blog-cat-name {
  font-family: var(--gh-font-display);
  font-size: 18px;
  letter-spacing: 1px;
  line-height: 1.15;
  margin: 0;
  color: var(--gh-c-text);
  text-transform: uppercase;
  transition: color 0.2s ease;
}

.gh-blog-root .gh-blog-cat-desc {
  font-family: var(--gh-font-body);
  font-size: 13px;
  font-weight: normal;
  color: var(--gh-c-text-mid);
  line-height: 1.6;
  margin: 0 0 0.5rem;
  min-height: 0;
  flex: 1;
}

.gh-blog-cat-count {
  margin-top: auto;
  padding-top: 4px;
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
  font-weight: 400;
}

/* Featured block — .featured-post */
.gh-blog-featured {
  margin: 1.5rem 0 2rem;
}

.gh-blog-featured-link {
  text-decoration: none;
  color: inherit;
  display: block;
}

.gh-blog-featured-link:hover .gh-blog-feature-img {
  transform: scale(1.04);
}

.gh-blog-featured-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  align-items: stretch;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid var(--gh-c-border-gold);
  background: var(--gh-c-bg-card);
  transition: border-color 0.3s ease, background 0.3s ease;
}

.gh-blog-featured-link:hover .gh-blog-featured-grid {
  background: var(--gh-c-bg-card-hover);
}

@media (max-width: 1024px) {
  .gh-blog-featured-grid {
    grid-template-columns: 1fr;
  }
}

.gh-blog-featured-visual {
  position: relative;
  min-height: 280px;
  background: var(--gh-c-surface);
  overflow: hidden;
}

@media (max-width: 1024px) {
  .gh-blog-featured-visual {
    min-height: 220px;
  }
}

.gh-blog-featured-visual--placeholder {
  min-height: 200px;
}

.gh-blog-featured-visual--has-img .gh-blog-feature-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s var(--gh-ease);
}

.gh-blog-featured-badge {
  position: absolute;
  top: 16px;
  left: 16px;
  background: rgba(11, 11, 13, 0.85);
  border: 1px solid var(--gh-c-border-gold);
  border-radius: 4px;
  padding: 5px 12px;
  font-family: var(--gh-font-mono);
  font-size: 9px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  pointer-events: none;
}

.gh-blog-featured-text {
  padding: 36px 32px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.gh-blog-featured-label {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin-bottom: 12px;
}

.gh-blog-featured-title {
  font-family: var(--gh-font-display);
  line-height: 1.05;
  margin: 0 0 14px;
  font-weight: bold;
  color: var(--gh-c-text);
  text-transform: uppercase;
}

.gh-blog-featured-excerpt {
  font-size: 15px;
  color: var(--gh-c-text-mid);
  line-height: 1.7;
  margin: 0 0 20px;
  font-weight: normal;
}

.gh-blog-featured-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px 16px;
  padding-top: 16px;
  border-top: 1px solid var(--gh-c-border);
}

.gh-blog-featured-author,
.gh-blog-featured-date {
  font-size: 12px;
  color: var(--gh-c-text-dim);
}

.gh-blog-featured-read {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  color: var(--gh-c-text-dim);
  letter-spacing: 0.08em;
  margin-left: auto;
}

@media (max-width: 540px) {
  .gh-blog-featured-read {
    margin-left: 0;
    width: 100%;
  }
}

.gh-blog-list-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  align-items: center;
  margin: 1.5rem 0;
}

.gh-blog-search {
  flex: 1 1 220px;
  max-width: 360px;
}

.gh-blog-sort-btns {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.gh-blog-sort-btns .button-sort {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 6px 12px;
  border-radius: 4px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text-dim);
  transition: all 0.2s ease;
}

.gh-blog-sort-btns .button-sort:hover {
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-blog-sort-btns .button-sort.is-active {
  background: rgba(187, 167, 119, 0.1);
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

/* Post grid — .posts-grid / .post-card */
.gh-blog-card-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  margin-top: 1rem;
}

@media (max-width: 1024px) {
  .gh-blog-card-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 768px) {
  .gh-blog-card-grid {
    grid-template-columns: 1fr;
  }
}

.gh-blog-card {
  display: flex;
  flex-direction: column;
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid var(--gh-c-border);
  background: var(--gh-c-bg-card);
  text-decoration: none;
  color: inherit;
  transition: border-color 0.3s ease, background 0.3s ease;
}

.gh-blog-card:hover {
  border-color: var(--gh-c-border-hover);
  background: var(--gh-c-bg-card-hover);
}

.gh-blog-card:hover .gh-blog-card-img {
  transform: scale(1.04);
}

.gh-blog-card-img {
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  background: var(--gh-c-surface);
  transition: transform 0.5s var(--gh-ease);
}

.gh-blog-card-img--placeholder {
  min-height: 160px;
  background: linear-gradient(135deg, var(--gh-c-surface), var(--gh-c-bg-2));
}

.gh-blog-card-body {
  padding: 20px;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.gh-blog-card-title {
  font-family: var(--gh-font-display);
  font-size: 22px;
  letter-spacing: 0.5px;
  line-height: 1.1;
  margin: 0 0 10px;
  font-weight: 400;
  color: var(--gh-c-text);
}

.gh-blog-card-excerpt {
  font-size: 13px;
  color: var(--gh-c-text-mid);
  line-height: 1.6;
  margin: 0 0 16px;
  flex: 1;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.gh-blog-card-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px 12px;
  padding-top: 14px;
  border-top: 1px solid var(--gh-c-border);
  margin-top: auto;
}

.gh-blog-card-author,
.gh-blog-card-date {
  font-size: 11px;
  color: var(--gh-c-text-dim);
}

.gh-blog-card-read {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  color: var(--gh-c-text-dim);
  letter-spacing: 0.08em;
  margin-left: auto;
}

@media (max-width: 480px) {
  .gh-blog-card-read {
    margin-left: 0;
    width: 100%;
  }
}

.gh-blog-empty {
  text-align: center;
  padding: 3rem 1rem;
  border-radius: 8px;
  border: 1px dashed var(--gh-c-border-hover);
  color: var(--gh-c-text-mid);
}

/* Related categories — .related-cats-grid */
.gh-blog-related {
  margin-top: 3rem;
  padding-top: 3.75rem;
  border-top: 1px solid var(--gh-c-border);
}

.gh-blog-related-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 24px;
}

.gh-blog-btn-all-cats {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 18px;
  font-family: var(--gh-font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none;
  border-radius: 5px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text);
  transition: border-color 0.2s ease, color 0.2s ease;
}

.gh-blog-btn-all-cats::after {
  content: '→';
  transition: transform 0.2s ease;
}

.gh-blog-btn-all-cats:hover {
  border-color: #00a3e0;
  color: #00a3e0;
}

.gh-blog-btn-all-cats:hover::after {
  transform: translateX(3px);
}

.gh-blog-related-grid {
  --gh-cat-col-max: 240px;
  --gh-cat-col-min: 200px;
  display: grid;
  gap: 12px;
  justify-content: start;
  width: 100%;
  grid-template-columns: repeat(auto-fill, minmax(var(--gh-cat-col-min), var(--gh-cat-col-max)));
}

.gh-blog-related-empty {
  grid-column: 1 / -1;
  text-align: center;
  margin: 0;
}

@media (max-width: 640px) {
  .gh-blog-related-grid {
    grid-template-columns: 1fr;
    max-width: none;
  }
}

.gh-blog-cta-sentinel {
  height: 1px;
  margin: 0;
  padding: 0;
  pointer-events: none;
}

.gh-blog-sticky-cta {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 50;
  padding: 12px 24px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 16px;
  background: rgba(11, 11, 13, 0.94);
  backdrop-filter: blur(16px);
  border-top: 1px solid var(--gh-c-border);
  transform: translateY(100%);
  transition: transform 0.5s var(--gh-ease);
}

.gh-blog-sticky-cta--visible {
  transform: translateY(0);
}

.gh-blog-sticky-cta p {
  margin: 0;
  font-size: 13px;
  color: var(--gh-c-text-mid);
}

.gh-blog-sticky-cta p strong {
  color: #00a3e0;
  font-weight: 600;
}

.gh-blog-sticky-cta-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 18px;
  border-radius: 5px;
  background: var(--gh-c-gold);
  color: var(--gh-c-bg) !important;
  font-family: var(--gh-font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none;
  transition: background 0.3s var(--gh-ease), transform 0.3s var(--gh-ease), box-shadow 0.3s ease;
}

.gh-blog-sticky-cta-link:hover {
  background: var(--gh-c-gold-light);
  transform: translateY(-2px);
  box-shadow: 0 8px 30px rgba(187, 167, 119, 0.35);
  color: var(--gh-c-bg) !important;
}

.gh-blog-sticky-cta-link::after {
  content: '→';
  transition: transform 0.2s ease;
}

.gh-blog-sticky-cta-link:hover::after {
  transform: translateX(3px);
}

.gh-blog-article-title {
  font-family: var(--gh-font-display);
  font-size: clamp(52px,7vw,90px);
  letter-spacing: 3px;
  font-weight: bold;
  margin: 0.5rem 0 1rem;
  line-height: .92;
}

.gh-blog-article-title .gh-blog-title-gold {
  color: var(--gh-c-gold);
  font-style: normal;
}

.article-excerpt {
  font-family: var(--gh-font-body);
  font-size: 18px;
  color: var(--gh-c-text-mid);
  line-height: 1.75;
}

.gh-blog-breadcrumb a {
  color: var(--gh-c-text-dim);
  text-decoration: none;
  transition: color 0.2s ease;
}

.gh-blog-breadcrumb a:hover {
  color: var(--gh-c-gold);
}

.gh-blog-breadcrumb--bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 1rem;
  padding-bottom: 0.35rem;
  border-bottom: 1px solid var(--gh-c-border);
  font-family: var(--gh-font-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
}

.gh-blog-bc-sep {
  opacity: 0.4;
  user-select: none;
}

.gh-blog-bc-current {
  color: var(--gh-c-text-mid);
}

/* Category listing page shell */
.gh-blog-inner.gh-blog-category-page {
  background: var(--gh-c-bg-2);
  color: var(--gh-c-text);
  padding: 1.5rem clamp(1rem, 3vw, 1.75rem) 2.25rem;
  border-radius: 10px;
  border: 1px solid var(--gh-c-border);
}

.gh-blog-category-page .gh-blog-card {
  background: var(--gh-c-bg-card);
}

.gh-blog-category-page .gh-blog-featured-grid {
  background: var(--gh-c-bg-card);
}

.gh-blog-category-page .gh-blog-empty {
  background: rgba(0, 0, 0, 0.2);
  border-style: solid;
  border-color: var(--gh-c-border);
}

.gh-blog-cat-header .gh-blog-kicker {
  margin-bottom: 8px;
}

.gh-blog-cat-headline {
  font-family: var(--gh-font-display);
  font-size: clamp(2rem, 5vw, 3rem);
  font-weight: bold;
  margin: 0 0 0.5rem;
  text-transform: uppercase;
}

.gh-blog-cat-header .gh-blog-cat-desc {
  font-size: 1rem;
  max-width: 36rem;
}

.gh-blog-cat-total {
  font-family: var(--gh-font-mono);
  font-size: 12px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gh-c-gold);
  margin: 0.75rem 0 0;
}

.gh-blog-article-byline {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 1.25rem;
  font-size: 0.9rem;
  color: var(--gh-c-text-mid);
}

.gh-blog-author-av {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
}

.gh-blog-article-hero img {
  width: 100%;
  max-height: 600px;
  object-fit: cover;
  border-radius: 8px;
  margin-bottom: 1.5rem;
}

.gh-blog-video-embed-wrap {
  margin: 0 0 1.5rem;
  border-radius: 8px;
  overflow: hidden;
  background: #000;
}

.gh-blog-article-body {
  line-height: 1.65;
  font-size: 1.05rem;
}

.gh-blog-article-body img {
  max-width: 100%;
  height: auto;
  border-radius: 6px;
}

/* Article category links — same card language as rel-cat */
.gh-blog-tags {
  margin: 2rem 0 1rem;
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}

.gh-blog-tag {
  display: inline-flex;
  align-items: center;
  padding: 12px 18px;
  border-radius: 8px;
  border: 1px solid var(--gh-c-border);
  background: var(--gh-c-bg-card);
  font-family: var(--gh-font-display);
  font-size: 15px;
  letter-spacing: 0.5px;
  text-decoration: none;
  color: var(--gh-c-text);
  transition: border-color 0.3s ease, background 0.3s ease, color 0.2s ease;
}

.gh-blog-tag:hover {
  border-color: var(--gh-c-border-gold);
  background: var(--gh-c-bg-card-hover);
  color: var(--gh-c-gold);
}

.gh-blog-author-bio {
  margin: 2rem 0;
  padding: 1.25rem 1.35rem;
  border-radius: 8px;
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border);
}

.gh-blog-author-bio h2 {
  font-family: var(--gh-font-display);
  font-size: 1.25rem;
  letter-spacing: 0.04em;
  font-weight: 400;
  margin: 0 0 1rem;
  color: var(--gh-c-text);
}

.gh-blog-author-bio-card {
  display: flex;
  align-items: flex-start;
  gap: 0.85rem;
}

.gh-blog-author-bio-av {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
  border: 1px solid var(--gh-c-border-gold);
}

.gh-blog-author-bio-col {
  flex: 1;
  min-width: 0;
}

.gh-blog-author-bio-name {
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--gh-c-text);
  margin-bottom: 0.35rem;
  line-height: 1.3;
}

.gh-blog-author-bio-body {
  margin: 0;
  font-size: 0.95rem;
  color: var(--gh-c-text-mid);
  line-height: 1.65;
}

.gh-blog-related-posts h2 {
  font-family: var(--gh-font-display);
  font-size: 1.25rem;
  letter-spacing: 0.04em;
  font-weight: 400;
  margin-bottom: 1rem;
}

.gh-blog-channel-miniature .channel {
  max-width: 100%;
}

.plugin-peertube-video-embed.gh-blog-peertube-iframe,
.gh-blog-peertube-iframe {
  display: block;
  max-width: 100%;
}

@media (max-width: 1024px) {
  .gh-blog-home-cat-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 768px) {
  .gh-blog-home-cat-grid {
    grid-template-columns: 1fr;
  }

  .gh-blog-home-filter-cats {
    display: none;
  }
}

/* -------------------------------------------------------------------------- */
/* Category page (reference UI: hero, filter, featured, grid, empty, related) */
/* -------------------------------------------------------------------------- */

.gh-blog-sticky-cta-outline {
  display: inline-flex;
  align-items: center;
  padding: 9px 18px;
  border-radius: 5px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text) !important;
  font-family: var(--gh-font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none !important;
  transition: border-color 0.2s ease, color 0.2s ease;
}

.gh-blog-sticky-cta-outline:hover {
  border-color: #00a3e0;
  color: #00a3e0 !important;
}

.gh-blog-cat-page .rv {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s var(--gh-ease), transform 0.7s var(--gh-ease);
}

.gh-blog-cat-page .rv.vis {
  opacity: 1;
  transform: translateY(0);
}

.gh-cat-page-breadcrumb-bar {
  padding: 18px 0;
  border-bottom: 1px solid var(--gh-c-border);
}

.gh-cat-page-bc {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-family: var(--gh-font-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
}

.gh-cat-page-bc a {
  color: var(--gh-c-text-dim);
  text-decoration: none;
  transition: color 0.2s ease;
}

.gh-cat-page-bc a:hover {
  color: var(--gh-c-gold);
}

.gh-cat-page-bc-sep {
  opacity: 0.4;
}

.gh-cat-page-bc-current {
  color: var(--gh-c-text-mid);
}

.gh-cat-page-hero {
  padding: 64px 0 56px;
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid var(--gh-c-border);
}

.gh-cat-page-hero::before {
  content: '';
  position: absolute;
  top: -200px;
  right: -100px;
  width: 700px;
  height: 700px;
  background: radial-gradient(circle, rgba(187, 167, 119, 0.05) 0%, transparent 65%);
  pointer-events: none;
}

.gh-cat-page-hero-inner {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 32px;
  flex-wrap: wrap;
}

.gh-cat-page-hero-left {
  flex: 1;
  min-width: 280px;
}

.gh-cat-page-title {
  font-family: var(--gh-font-display);
  font-size: clamp(52px, 7vw, 90px);
  line-height: 0.92;
  letter-spacing: 3px;
  margin: 0 0 16px;
  text-transform: uppercase;
  font-weight: bold;
}

.gh-cat-page-title em {
  font-style: normal;
  color: var(--gh-c-gold);
}

.gh-cat-page-desc {
  font-size: 18px;
  color: var(--gh-c-text-mid);
  line-height: 1.75;
  max-width: 580px;
  margin: 0 0 24px;
}

.gh-cat-page-meta {
  display: flex;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
}

.gh-cat-page-meta-item {
  font-family: var(--gh-font-mono);
  font-size: 12px;
  color: var(--gh-c-text-dim);
  letter-spacing: 0.1em;
  display: flex;
  align-items: center;
  gap: 8px;
}

.gh-cat-page-meta-item::before {
  content: '';
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--gh-c-gold-dark);
}

.gh-cat-page-meta-item--highlight {
  color: var(--gh-c-gold);
}

.gh-cat-page-meta-item--highlight::before {
  display: none;
}

.gh-cat-page-hero-right {
  flex-shrink: 0;
}

.gh-cat-page-num-display {
  font-family: var(--gh-font-display);
  font-size: clamp(80px, 12vw, 160px);
  color: rgba(187, 167, 119, 0.07);
  line-height: 1;
  letter-spacing: 4px;
  user-select: none;
}

.gh-cat-filter-bar {
  background: var(--gh-c-bg-2);
  border-bottom: 1px solid var(--gh-c-border);
  padding: 16px 0;
  position: sticky;
  top: 0;
  z-index: 50;
  backdrop-filter: blur(12px);
}

.gh-cat-filter-inner {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}

.gh-cat-search-wrap {
  position: relative;
  flex: 1;
  min-width: 200px;
  max-width: 320px;
}

.gh-cat-search-input {
  width: 100%;
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border);
  border-radius: 5px;
  padding: 9px 14px 9px 36px;
  font-family: var(--gh-font-body);
  font-size: 13px;
  color: var(--gh-c-text);
  outline: none;
  transition: border-color 0.2s ease;
}

.gh-cat-search-input::placeholder {
  color: var(--gh-c-text-dim);
}

.gh-cat-search-input:focus {
  border-color: var(--gh-c-gold);
}

.gh-cat-search-icon {
  position: absolute;
  left: 11px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--gh-c-text-dim);
  font-size: 14px;
  pointer-events: none;
}

.gh-cat-filter-divider {
  width: 1px;
  height: 28px;
  background: var(--gh-c-border);
  flex-shrink: 0;
}

.gh-cat-sort-label {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
  white-space: nowrap;
}

.gh-cat-sort-btns {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.gh-cat-sort-btn {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 6px 12px;
  border-radius: 4px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text-dim);
  cursor: pointer;
  transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
  white-space: nowrap;
}

.gh-cat-sort-btn:hover {
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-cat-sort-btn.active {
  background: rgba(187, 167, 119, 0.1);
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-cat-results-count {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
  margin-left: auto;
  white-space: nowrap;
}

.gh-cat-results-count span {
  color: var(--gh-c-gold);
}

.gh-cat-posts-grid.gh-cat-grid-loading {
  opacity: 0.45;
  pointer-events: none;
  transition: opacity 0.2s ease;
}

.gh-cat-grid-error {
  grid-column: 1 / -1;
  margin: 0;
  padding: 24px;
  text-align: center;
  color: var(--gh-c-text-mid);
  font-size: 14px;
}

.gh-cat-posts-section {
  padding: 60px 0 80px;
}

.gh-cat-posts-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 32px;
  gap: 16px;
}

.gh-cat-posts-heading {
  font-family: var(--gh-font-display);
  font-size: 28px;
  letter-spacing: 1px;
  margin: 0;
  text-transform: uppercase;
  font-weight: bold;
  line-height: 1.1;
}

.gh-cat-posts-heading-gold {
  font-style: normal;
  color: var(--gh-c-gold);
}

.gh-cat-posts-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

.gh-cat-post {
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border);
  border-radius: 10px;
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  display: flex;
  flex-direction: column;
  transition: border-color 0.3s ease, background 0.3s ease;
}

.gh-cat-post:hover {
  border-color: var(--gh-c-border-hover);
  background: var(--gh-c-bg-card-hover);
}

.gh-cat-post-img {
  width: 100%;
  aspect-ratio: 16 / 9;
  background: var(--gh-c-surface);
  position: relative;
  overflow: hidden;
  flex-shrink: 0;
}

.gh-cat-post-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s var(--gh-ease);
}

.gh-cat-post:hover .gh-cat-post-img img {
  transform: scale(1.04);
}

.gh-cat-post-img--ph {
  background: var(--gh-c-surface);
}

.gh-cat-post-body {
  padding: 20px;
  display: flex;
  flex-direction: column;
  flex: 1;
}

.gh-cat-post-title {
  font-family: var(--gh-font-display);
  font-size: 22px;
  letter-spacing: 0.5px;
  line-height: 1.1;
  margin: 0 0 10px;
  color: var(--gh-c-text);
  text-transform: uppercase;
  font-weight: bold;
}

.gh-cat-post-title .gh-blog-title-gold {
  color: var(--gh-c-gold);
  font-style: normal;
}

.gh-cat-post-excerpt {
  font-size: 13px;
  color: var(--gh-c-text-mid);
  line-height: 1.6;
  margin: 0 0 16px;
  flex: 1;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.gh-cat-post-meta {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding-top: 14px;
  border-top: 1px solid var(--gh-c-border);
  margin-top: auto;
}

.gh-cat-post-author,
.gh-cat-post-date {
  font-size: 11px;
  color: var(--gh-c-text-dim);
}

.gh-cat-post-read {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  color: var(--gh-c-text-dim);
  letter-spacing: 0.08em;
  margin-left: auto;
}

.gh-cat-no-results {
  text-align: center;
  padding: 48px 0;
}

.gh-cat-no-results p {
  font-size: 16px;
  color: var(--gh-c-text-dim);
}

.gh-cat-no-results strong {
  color: var(--gh-c-text-mid);
}

.gh-cat-empty-state {
  text-align: center;
  padding: 80px 20px;
}

.gh-cat-empty-icon {
  font-size: 48px;
  margin-bottom: 20px;
  opacity: 0.3;
}

.gh-cat-empty-state h3 {
  font-family: var(--gh-font-display);
  font-size: 36px;
  letter-spacing: 1px;
  margin: 0 0 12px;
  color: var(--gh-c-text-mid);
}

.gh-cat-empty-state > p {
  font-size: 16px;
  color: var(--gh-c-text-dim);
  line-height: 1.7;
  max-width: 460px;
  margin: 0 auto 28px;
}

.gh-cat-empty-notify {
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border-gold);
  border-radius: 8px;
  padding: 24px 28px;
  max-width: 420px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}

.gh-cat-empty-notify p {
  font-size: 13px;
  color: var(--gh-c-text-mid);
  margin: 0;
}

.gh-cat-empty-form {
  display: flex;
  gap: 8px;
  width: 100%;
}

.gh-cat-empty-input {
  flex: 1;
  background: var(--gh-c-bg);
  border: 1px solid var(--gh-c-border);
  border-radius: 5px;
  padding: 10px 14px;
  font-family: var(--gh-font-body);
  font-size: 13px;
  color: var(--gh-c-text);
  outline: none;
  transition: border-color 0.2s ease;
}

.gh-cat-empty-input:focus {
  border-color: var(--gh-c-gold);
}

.gh-cat-empty-btn {
  padding: 10px 18px;
  border-radius: 5px;
  border: none;
  background: var(--gh-c-gold);
  color: var(--gh-c-bg);
  font-family: var(--gh-font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.2s ease;
}

.gh-cat-empty-btn:hover {
  background: var(--gh-c-gold-light);
}

.gh-cat-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding-top: 48px;
  flex-wrap: wrap;
}

.gh-cat-pag-btn {
  font-family: var(--gh-font-mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 5px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text-dim);
  cursor: pointer;
  transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
}

.gh-cat-pag-btn:hover:not(:disabled) {
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-cat-pag-btn.active {
  background: rgba(187, 167, 119, 0.1);
  border-color: var(--gh-c-border-gold);
  color: var(--gh-c-gold);
}

.gh-cat-pag-btn:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}

.gh-cat-pag-wide {
  width: auto;
  padding: 0 16px;
}

.gh-cat-pag-ellipsis {
  font-family: var(--gh-font-mono);
  font-size: 11px;
  color: var(--gh-c-text-dim);
  padding: 0 4px;
}

.gh-cat-related {
  padding: 60px 0;
  border-top: 1px solid var(--gh-c-border);
}

.gh-cat-related-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 24px;
  gap: 16px;
  flex-wrap: wrap;
}

.gh-cat-related-eyebrow {
  margin-bottom: 0 !important;
}

.gh-cat-btn-outline {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 18px;
  font-family: var(--gh-font-body);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  text-decoration: none !important;
  border-radius: 5px;
  border: 1px solid var(--gh-c-border);
  background: transparent;
  color: var(--gh-c-text) !important;
  transition: border-color 0.2s ease, color 0.2s ease;
}

.gh-cat-btn-outline::after {
  content: '→';
  transition: transform 0.2s ease;
}

.gh-cat-btn-outline:hover {
  border-color: #00a3e0;
  color: #00a3e0 !important;
}

.gh-cat-btn-outline:hover::after {
  transform: translateX(3px);
}

.gh-cat-related-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}

.gh-cat-rel-card {
  background: var(--gh-c-bg-card);
  border: 1px solid var(--gh-c-border);
  border-radius: 8px;
  padding: 20px;
  text-decoration: none !important;
  color: inherit !important;
  transition: border-color 0.3s ease, background 0.3s ease;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.gh-cat-rel-card:hover {
  border-color: var(--gh-c-border-gold);
  background: var(--gh-c-bg-card-hover);
}

.gh-cat-rel-num {
  font-family: var(--gh-font-display);
  font-size: 28px;
  color: rgba(187, 167, 119, 0.15);
  line-height: 1;
}

.gh-cat-rel-name {
  font-family: var(--gh-font-display);
  font-size: 17px;
  letter-spacing: 0.5px;
  color: var(--gh-c-text);
  text-transform: uppercase;
}

.gh-cat-rel-card:hover .gh-cat-rel-name {
  color: var(--gh-c-gold);
}

.gh-cat-rel-count {
  font-family: var(--gh-font-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gh-c-text-dim);
}

.gh-cat-related-empty {
  grid-column: 1 / -1;
  text-align: center;
  margin: 0;
  color: var(--gh-c-text-dim);
  font-size: 14px;
}

@media (max-width: 1024px) {
  .gh-cat-posts-grid {
    grid-template-columns: 1fr 1fr;
  }

  .gh-cat-related-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 768px) {
  .gh-cat-posts-grid {
    grid-template-columns: 1fr;
  }

  .gh-cat-results-count {
    margin-left: 0;
    width: 100%;
  }

  .gh-cat-post-read {
    margin-left: 0;
    width: 100%;
  }
}

@media (max-width: 480px) {
  .gh-cat-related-grid {
    grid-template-columns: 1fr;
  }

  .gh-cat-empty-form {
    flex-direction: column;
  }
}
/* peertube-plugin-blog-management — admin plugin settings UI */

/*
 * PeerTube always shows "Update plugin settings" when the server registers any setting.
 * We register one display-only setting so the <form> exists (required for this admin UI).
 * Real configuration is add/edit/delete in #gh-blog-admin-panel — hide the stock submit + blurb.
 */
my-plugin-show-installed h2:first-of-type {
  display: none;
}

 form.gh-blog-plugin-settings-root #greyhive-blog-info-wrapper {
  display: none;
}

form.gh-blog-plugin-settings-root input.peertube-button.primary-button[type='submit'] {
  display: none !important;
}

#gh-blog-admin-panel {
  width: 100%;
  max-width: none;
}

#gh-blog-admin-panel .gh-blog-table-wrap {
  width: 100%;
}

#gh-blog-admin-panel .gh-blog-table-wrap table {
  width: 100%;
}

.gh-blog-act-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  vertical-align: middle;
}

.gh-blog-act-btn .gh-blog-ico {
  width: 1em;
  height: 1em;
  flex-shrink: 0;
}

.gh-blog-icon-btn {
  min-width: 2.25rem;
  min-height: 2rem;
  padding: 0.25rem 0.45rem;
  justify-content: center;
}

#gh-blog-admin-panel .gh-blog-act-btn .gh-blog-btn-label {
  margin-left: 0.4rem;
}

#gh-blog-admin-panel .gh-blog-admin-tabs {
  border-bottom: 1px solid var(--border-primary, rgba(255, 255, 255, 0.12));
  margin-bottom: 1rem;
}

#gh-blog-admin-panel .gh-blog-admin-tabs .nav-link {
  cursor: pointer;
  border: none;
  background: transparent;
  color: inherit;
  padding: 0.5rem 1rem;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
}

#gh-blog-admin-panel .gh-blog-admin-tabs .nav-link.active {
  border-bottom-color: var(--primary, #f97316);
  font-weight: 600;
}

#gh-blog-admin-panel .gh-blog-tab-pane {
  display: none;
}

#gh-blog-admin-panel .gh-blog-tab-pane.active {
  display: block;
}

.gh-blog-modal-root {
  position: fixed;
  inset: 0;
  z-index: 10550;
  display: none;
  align-items: flex-start;
  justify-content: center;
  padding: 2rem 1rem;
  overflow: auto;
  background: rgba(0, 0, 0, 0.55);
}

.gh-blog-modal-root.gh-blog-modal-open {
  display: flex;
}

.gh-blog-modal-root .modal-dialog.modal-xl {
  max-width: min(1140px, calc(100vw - 2rem));
  width: 100%;
  margin: 0 auto;
}

.gh-blog-modal-root .modal-content {
  background: var(--bg, #1e1e1e);
  color: var(--fg, #eee);
  border: 1px solid var(--border-primary, rgba(255, 255, 255, 0.12));
  border-radius: 8px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
}

.gh-blog-modal-root .modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--border-primary, rgba(255, 255, 255, 0.1));
}

.gh-blog-modal-root .modal-body {
  padding: 1.25rem;
  max-height: min(78vh, 900px);
  overflow-y: auto;
}

.gh-blog-modal-root .modal-footer {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  justify-content: flex-end;
  padding: 1rem 1.25rem;
  border-top: 1px solid var(--border-primary, rgba(255, 255, 255, 0.1));
}

.gh-blog-modal-root .gh-blog-modal-footer-lead {
  margin-right: auto;
}

.gh-blog-modal-root .gh-blog-modal-x {
  border: none;
  background: transparent;
  font-size: 1.5rem;
  line-height: 1;
  padding: 0 0.25rem;
  cursor: pointer;
  opacity: 0.75;
  color: inherit;
}

.gh-blog-modal-root .gh-blog-modal-x:hover {
  opacity: 1;
}

#gh-blog-admin-panel .table-actions {
  white-space: nowrap;
}

#gh-blog-admin-panel .table-actions .btn,
#gh-blog-admin-panel .table-actions .gh-blog-act-btn {
  margin-right: 0.25rem;
  margin-bottom: 0.25rem;
}

/* Categories: drag handle + order number */
.gh-blog-cat-admin-table tbody td {
  vertical-align: middle;
}

.gh-blog-cat-admin-table .gh-blog-cat-order-th {
  width: 5.5rem;
  white-space: nowrap;
}

.gh-blog-cat-order-cell {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 0.5rem;
  line-height: 1.25;
}

.gh-blog-cat-drag-handle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 1.75rem;
  min-height: 1.75rem;
  padding: 0;
  margin: 0;
  border: none;
  border-radius: 4px;
  cursor: grab;
  color: inherit;
  background: transparent;
  opacity: 0.75;
  line-height: 0;
}

.gh-blog-cat-drag-handle:hover {
  opacity: 1;
  background: rgba(128, 128, 128, 0.12);
}

.gh-blog-cat-drag-handle:active {
  cursor: grabbing;
}

.gh-blog-cat-drag-bars {
  display: block;
  width: 12px;
  height: 12px;
  margin-top: 1px;
  background: linear-gradient(currentColor, currentColor) 0 0 / 100% 2px no-repeat,
    linear-gradient(currentColor, currentColor) 0 5px / 100% 2px no-repeat,
    linear-gradient(currentColor, currentColor) 0 10px / 100% 2px no-repeat;
  opacity: 0.85;
}

.gh-blog-cat-order-num {
  font-variant-numeric: tabular-nums;
  font-size: 0.9rem;
  line-height: 1.25;
  opacity: 0.9;
  min-width: 1.35rem;
  display: inline-flex;
  align-items: center;
}

.gh-blog-cat-row--dragging {
  opacity: 0.55;
}

/* Drop slot: full-row bar above/below target row */
.gh-blog-cat-admin-table tbody tr.gh-blog-cat-row--drop-before > td {
  box-shadow: inset 0 4px 0 0 var(--primary, #f97316);
  background-color: rgba(249, 115, 22, 0.06);
}

.gh-blog-cat-admin-table tbody tr.gh-blog-cat-row--drop-after > td {
  box-shadow: inset 0 -4px 0 0 var(--primary, #f97316);
  background-color: rgba(249, 115, 22, 0.06);
}
.gh-contact-tabs .nav-link {
  cursor: pointer;
}

.gh-contact-pane {
  display: none;
}

.gh-contact-pane.active {
  display: block;
}

.gh-contact-table-wrap {
  max-height: 600px;
}

.gh-contact-message-cell {
  max-width: 360px;
  white-space: pre-wrap;
  word-break: break-word;
}

.gh-contact-filters {
  display: grid;
  grid-template-columns: 1fr 1fr 2fr auto;
  gap: 10px;
  align-items: end;
}

.gh-contact-filter-actions {
  display: flex;
  gap: 8px;
}

.gh-contact-pagination {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
  margin-top: 10px;
}

.gh-contact-page-info {
  font-size: 13px;
  color: var(--fg-300);
}

.gh-contact-modal-root {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 99999;
}

.gh-contact-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

.gh-contact-modal-card {
  width: min(700px, 95vw);
  max-height: 85vh;
  overflow: auto;
  background: var(--bg, #1f2530);
  color: var(--fg, #fff);
  border-radius: 10px;
  border: 1px solid rgba(255, 255, 255, 0.1);
}

.gh-contact-modal-head {
  padding: 14px 16px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.gh-contact-modal-head h5 {
  margin: 0;
}

.gh-contact-modal-body {
  padding: 14px 16px;
}

.gh-contact-modal-message {
  white-space: pre-wrap;
  word-break: break-word;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  padding: 10px;
}
/* Greyhive Select2 + controls for Recently Added Curation admin panel */

#gh-rac-admin-panel .card-body {
  position: relative;
}

.gh-rac-admin-hidden {
  display: none !important;
}

.gh-rac-admin-root {
  margin-top: 0.5rem;
}

.gh-rac-header h4 {
  font-weight: 600;
}

#gh-rac-admin-panel .select2-container {
  width: 100% !important;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--single,
#gh-rac-admin-panel .select2-container--default .select2-selection--multiple {
  background-color: #2a2a2e;
  border: 1px solid #52525b;
  border-radius: 6px;
  min-height: 42px;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--single {
  height: 38px;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--single .select2-selection__rendered {
  color: #f4f4f5;
  line-height: 36px;
  padding-left: 8px;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--single .select2-selection__arrow {
  height: 36px;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--single .select2-selection__arrow b {
  border-color: #bba777 transparent transparent transparent;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--single .select2-selection__placeholder {
  color: #a1a1aa;
}

#gh-rac-admin-panel .select2-container--default.select2-container--focus .select2-selection--single,
#gh-rac-admin-panel .select2-container--default.select2-container--open .select2-selection--single {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-rac-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice {
  background-color: #3a3a40;
  border: 1px solid #bba777;
  color: #f4f4f5;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  color: #bba777;
}

#gh-rac-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
  color: #f4f4f5;
}

#gh-rac-admin-panel .select2-container--default.select2-container--focus .select2-selection--multiple,
#gh-rac-admin-panel .select2-container--default.select2-container--open .select2-selection--multiple {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-rac-admin-panel .select2-container--default .select2-search--inline .select2-search__field,
#gh-rac-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field {
  color: #f4f4f5;
  background-color: #1e1e22;
  border: 1px solid #52525b;
  border-radius: 4px;
}

#gh-rac-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field:focus {
  border-color: #bba777;
  outline: none;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-rac-admin-panel .select2-container--default .select2-selection__clear {
  color: #bba777;
  margin-right: 4px;
}

#gh-rac-admin-panel .select2-dropdown {
  background-color: #2a2a2e !important;
  border: 1px solid #52525b !important;
}

#gh-rac-admin-panel .select2-container--default .select2-results > .select2-results__options {
  background-color: #2a2a2e;
}

#gh-rac-admin-panel .select2-container--default .select2-results__option {
  background-color: #2a2a2e;
  color: #f4f4f5;
}

#gh-rac-admin-panel .select2-container--default .select2-results__option--selectable {
  color: #f4f4f5;
}

#gh-rac-admin-panel .select2-container--default .select2-results__option--highlighted,
#gh-rac-admin-panel .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: #bba777 !important;
  color: #121212 !important;
}

#gh-rac-admin-panel .select2-container--default .select2-results__option--selected,
#gh-rac-admin-panel .select2-container--default .select2-results__option[aria-selected='true'] {
  background-color: #3a3a40 !important;
  color: #f4f4f5 !important;
}

/* Enable checkbox — match discover-page dark admin UI */
#gh-rac-admin-panel .form-check-input {
  width: 1.35rem;
  height: 1.35rem;
  margin-top: 0.2rem;
  border: 2px solid #bba777;
  background-color: #2a2a2e;
  cursor: pointer;
}

#gh-rac-admin-panel .form-check-input:checked {
  background-color: #bba777;
  border-color: #bba777;
}

#gh-rac-admin-panel .form-check-input:focus {
  border-color: #bba777;
  box-shadow: 0 0 0 0.2rem rgba(187, 167, 119, 0.35);
}

#gh-rac-admin-panel .form-check-label {
  cursor: pointer;
}

#gh-rac-admin-panel .form-control[type='number'] {
  background-color: #2a2a2e;
  border: 1px solid #52525b;
  color: #f4f4f5;
}

#gh-rac-admin-panel .form-control[type='number']:focus {
  background-color: #2a2a2e;
  border-color: #bba777;
  color: #f4f4f5;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}
.captions-browser-wrap {
  box-sizing: border-box;
}

.captions-browser-checking {
  color: var(--mutedForegroundColor, #888);
  margin: 0;
  padding: 0.5rem 0;
}

/* Wide table area inside the main column — no viewport bleed (avoids hugging the window edge / sidebar) */
.captions-browser-wrap.captions-browser-fullscreen {
  width: 100%;
  max-width: none;
  margin: 0;
  box-sizing: border-box;
  padding: 1rem
    max(1.5rem, calc(env(safe-area-inset-right, 0px) + clamp(1.5rem, 3vw, 2.75rem)))
    2.5rem
    max(1.5rem, calc(env(safe-area-inset-left, 0px) + clamp(1.5rem, 3vw, 2.75rem)));
  min-height: calc(100dvh - 5rem);
  display: flex;
  flex-direction: column;
}

.captions-browser-fullscreen .captions-browser-table-wrap {
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
}

.captions-browser-fullscreen .dataTables_wrapper {
  width: 100% !important;
}

.captions-browser-fullscreen .dataTables_scrollHead,
.captions-browser-fullscreen .dataTables_scrollBody {
  width: 100% !important;
}

.captions-browser-header h1 {
  font-size: 1.5rem;
  font-weight: 600;
  margin: 0 0 0.35rem;
}

.captions-browser-sub {
  color: var(--mutedForegroundColor, #888);
  margin: 0 0 1rem;
  font-size: 0.95rem;
}

.captions-browser-filters {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 0.75rem 1rem;
  margin-bottom: 1rem;
}

.captions-browser-field {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  flex: 1 1 12rem;
  min-width: 10rem;
}

.captions-browser-field-sort {
  flex: 0 1 14rem;
  max-width: 18rem;
}

.captions-browser-field-label {
  font-size: 0.85rem;
  font-weight: 500;
  margin: 0;
}

.captions-browser-search-input,
.captions-browser-select {
  width: 100%;
  padding: 0.4rem 0.65rem;
  font-size: 0.95rem;
  border-radius: 4px;
  border: 1px solid var(--inputBorderColor, #444);
  background: var(--inputBackgroundColor, #222);
  color: var(--foregroundColor, #eee);
}

.captions-browser-col-uuid .captions-browser-uuid {
  font-size: 0.8rem;
  word-break: break-all;
}

.captions-browser-copy-uuid {
  cursor: pointer;
  margin-left: 0.25rem;
  padding: 0.15rem 0.4rem;
  font-size: 0.75rem;
  border-radius: 4px;
  border: 1px solid var(--inputBorderColor, #444);
  background: var(--inputBackgroundColor, #222);
  color: var(--foregroundColor, #eee);
}

.captions-browser-alert {
  margin-bottom: 1rem;
  padding: 0.5rem 0.75rem;
  border-radius: 4px;
  background: rgba(200, 60, 60, 0.12);
  color: var(--foregroundColor, #c33);
}

.captions-browser-table-wrap {
  overflow-x: auto;
}

/* DataTables + theme conflicts: remove grid borders (scoped to this plugin only) */
.captions-browser-wrap table.dataTable,
.captions-browser-wrap table.dataTable th,
.captions-browser-wrap table.dataTable td {
  border: none !important;
  border-left: none !important;
  border-right: none !important;
  border-top: none !important;
  border-bottom: none !important;
  box-shadow: none !important;
  outline: none !important;
}

.captions-browser-wrap table.dataTable thead th,
.captions-browser-wrap table.dataTable thead td,
.captions-browser-wrap table.dataTable tbody th,
.captions-browser-wrap table.dataTable tbody td {
  border: none !important;
}

.captions-browser-wrap table.dataTable > thead > tr > th,
.captions-browser-wrap table.dataTable > thead > tr > td,
.captions-browser-wrap table.dataTable > tbody > tr > th,
.captions-browser-wrap table.dataTable > tbody > tr > td {
  border: none !important;
}

.captions-browser-wrap table.dataTable.no-footer {
  border-bottom: none !important;
}

.captions-browser-wrap .dataTables_wrapper .dataTables_length,
.captions-browser-wrap .dataTables_wrapper .dataTables_filter,
.captions-browser-wrap .dataTables_wrapper .dataTables_info,
.captions-browser-wrap .dataTables_wrapper .dataTables_paginate {
  border: none !important;
}

.captions-browser-wrap .dataTables_wrapper .dataTables_paginate .paginate_button {
  border: none !important;
  background: transparent !important;
}

.captions-browser-wrap .dataTables_wrapper .dataTables_paginate .paginate_button.current,
.captions-browser-wrap .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
  border: none !important;
}

.captions-browser-key {
  font-size: 0.85rem;
  word-break: break-all;
  border: none !important;
  box-shadow: none !important;
  background: rgba(255, 255, 255, 0.06);
  padding: 0.15rem 0.35rem;
  border-radius: 4px;
}

.captions-browser-link {
  color: var(--mainForegroundColor, #e0e0e0);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.captions-browser-link:hover {
  opacity: 0.9;
}

.captions-browser-na {
  color: var(--mutedForegroundColor, #888);
}

.captions-browser-actions {
  white-space: nowrap;
  width: 7rem;
}

.captions-browser-copy {
  cursor: pointer;
  padding: 0.25rem 0.5rem;
  font-size: 0.85rem;
  border-radius: 4px;
  border: 1px solid var(--inputBorderColor, #444);
  background: var(--inputBackgroundColor, #222);
  color: var(--foregroundColor, #eee);
}

.captions-browser-copy:hover {
  opacity: 0.9;
}

.captions-browser-fallback {
  padding: 1rem;
}
.gh-glc-admin-hidden {
  display: none !important;
}

#gh-glc-admin-panel .gh-glc-table th {
  white-space: nowrap;
}

#gh-glc-admin-panel .gh-glc-title {
  font-weight: 600;
  text-decoration: none;
}

#gh-glc-admin-panel .gh-glc-title:hover {
  text-decoration: underline;
}

#gh-glc-admin-panel .gh-glc-stats {
  min-width: 8rem;
}

#gh-glc-admin-panel .gh-glc-enable-card {
  background: rgba(128, 128, 128, 0.06);
}

#gh-glc-admin-panel .gh-glc-disable-btn {
  white-space: nowrap;
}

#gh-glc-admin-panel .select2-container--default .select2-selection--single,
#gh-glc-admin-panel .select2-container--default .select2-selection--multiple {
  background-color: #2a2a2e;
  border: 1px solid #52525b;
  border-radius: 6px;
  min-height: 42px;
}

#gh-glc-admin-panel .select2-container--default .select2-selection--multiple {
  min-height: 42px;
  padding: 4px 6px;
}

#gh-glc-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice {
  background-color: #3a3a40;
  border: 1px solid #52525b;
  color: #f4f4f5;
  border-radius: 4px;
}

#gh-glc-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  color: #bba777;
  margin-right: 4px;
}

#gh-glc-admin-panel .select2-container--default .select2-selection--single .select2-selection__rendered,
#gh-glc-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__rendered {
  color: #f4f4f5;
}

#gh-glc-admin-panel .select2-container--default .select2-selection--single .select2-selection__placeholder,
#gh-glc-admin-panel .select2-container--default .select2-selection--multiple .select2-selection__placeholder {
  color: #a1a1aa;
}

#gh-glc-admin-panel .select2-container--default.select2-container--focus .select2-selection--single,
#gh-glc-admin-panel .select2-container--default.select2-container--open .select2-selection--single,
#gh-glc-admin-panel .select2-container--default.select2-container--focus .select2-selection--multiple,
#gh-glc-admin-panel .select2-container--default.select2-container--open .select2-selection--multiple {
  border-color: #bba777;
  box-shadow: 0 0 0 0.15rem rgba(187, 167, 119, 0.25);
}

#gh-glc-admin-panel .select2-container--default .select2-search--inline .select2-search__field,
#gh-glc-admin-panel .select2-container--default .select2-search--dropdown .select2-search__field {
  color: #f4f4f5;
  background-color: #1e1e22;
  border: 1px solid #52525b;
  border-radius: 4px;
}

#gh-glc-admin-panel .select2-dropdown {
  background-color: #2a2a2e !important;
  border: 1px solid #52525b !important;
}

#gh-glc-admin-panel .select2-container--default .select2-results > .select2-results__options {
  background-color: #2a2a2e;
}

#gh-glc-admin-panel .select2-container--default .select2-results__option {
  background-color: #2a2a2e;
  color: #f4f4f5;
}

#gh-glc-admin-panel .select2-container--default .select2-results__option--highlighted,
#gh-glc-admin-panel .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: #bba777 !important;
  color: #121212 !important;
}

#gh-glc-admin-panel .select2-container--default .select2-results__option--selected,
#gh-glc-admin-panel .select2-container--default .select2-results__option[aria-selected='true'] {
  background-color: #3a3a40 !important;
  color: #f4f4f5 !important;
}
/* Hide publish tabs controlled by go-live-channels plugin */
.gh-glc-hide-tab,
html.gh-glc-publish-page .video-add-nav .gh-glc-hide-tab {
  display: none !important;
}
/* VAST PLUGIN STYLES */
.vjs-ad-playing.vjs-ad-playing .vjs-progress-control {
  pointer-events:none
}
.vjs-ad-playing.vjs-ad-playing .vjs-play-progress {
  background-color:#ffe400
}
.vjs-ad-loading .vjs-loading-spinner {
  display:block;
  visibility:visible
}
.vjs-ad-playing .vjs-captions-button {
  display:none
}
.vjs-ad-playing .vjs-audio-button {
  display:none
}
.vjs-ad-loading .vjs-loading-spinner:before {
  border-top-color:#fff
}
.vjs-ad-loading .vjs-loading-spinner:after {
  border-top-color:#fff;
  -webkit-animation-delay:0.44s;
  animation-delay:0.44s
}
.vjs-ad-loading .vjs-big-play-button,
.vjs-ad-loading .vjs-poster,
.vjs-ad-content-resuming .vjs-big-play-button,
.vjs-ad-content-resuming .vjs-poster {
  display:none
}

/*
Original @ https://github.com/theonion/videojs-vast-plugin (commit bf6ce85fa763299739f6a7c801b5be4b90b3b363)
*/

.vast-skip-button {
  display: block;
  position: absolute;
  top: 5px;
  right: 0;
  width: auto;
  background-color: #000;
  color: #AAA;
  font-size: 12px;
  font-style: italic;
  line-height: 12px;
  padding: 10px;
  z-index: 2;
}

.vast-skip-button.enabled {
  cursor: pointer;
  color: #fff;
}

.vast-skip-button.enabled:hover {
  cursor: pointer;
  background: #333;
}

.vast-remaining-time {
  display: block;
  position: absolute;
  bottom: 35px;
  left: 75px;
  width: auto;
  color: #aaa;
  font-size: 12px;
  font-style: italic;
  line-height: 12px;
  z-index: 2;
}

.vast-remaining-time-icon {
  position: absolute;
  bottom: 30px;
  color: #aaa !important;
  font-size: 20px !important;
  z-index: 2;
}

.vast-remaining-time-icon:focus {
  text-shadow: 0 0 1em #fff;
}

.vast-remaining-time-icon-play {
  left: 15px;
}

.vast-remaining-time-icon-mute {
  left: 40px;
}

.vjs-controls-enabled .vast-remaining-time {
  bottom: 55px;
}

.vjs-controls-enabled .vast-remaining-time-icon {
  bottom: 50px;
}

.vast-blocker {
  display: block;
  position: absolute;
  z-index: 2;
  margin: 0;
  padding: 0;
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

/* ADMIN TABLE STYLES */
.armanet-table {
  width: 100%;
  border-collapse: collapse;
  margin: 20px 0;
  font-size: 16px;
  text-align: left;
}

.armanet-table th, .armanet-table td {
  border: 1px solid #ddd;
  padding: 8px;
}

.armanet-table thead th {
  font-weight: bold;
}

.armanet-table tbody tr {
  background-color: inherit;
}
.armanet-table tbody tr:nth-child(even) {
  background-color: var(--mainColorLighter, var(--greyBackgroundColor, inherit));
}

.armanet-table tbody tr:hover {
  background-color: var(--mainHoverColor, var(--bg-secondary-400, inherit));
}

.armanet-table th, .armanet-table td {
  text-align: center;
}

.armanet-table {
  border: 1px solid #ddd;
}

.armanet-button {
  display: inline-block;
  padding: 4px 13px;
  background-color: var(--primary, var(--mainColor, hsl(24, 90%, 45%)));
  font-size: 15px;
  font-weight: 600;
  line-height: 23px;
  text-align: center;
  cursor: pointer;
  border-radius: 3px;
}

.armanet-p-paginator {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
}

.armanet-p-paginator {
  background-color: var(--bg) !important;
  position: relative;
  border: none;
  border-top: 1px solid !important;
  border-color: var(--bg-secondary-400) !important;
  height: 40px;
  display: flex;
  justify-content: center;
  align-items: center;
}

.p-paginator-page,
.p-paginator-next,
.p-paginator-last,
.p-paginator-first,
.p-paginator-prev,
.p-paginator-current {
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
  position: relative;
}

.armanet-p-paginator-current {
  color: var(--fg-300);
  overflow: visible;
}

.armanet-p-paginator .p-paginator-first .p-paginator-icon,
.armanet-p-paginator .p-paginator-prev .p-paginator-icon,
.armanet-p-paginator .p-paginator-next .p-paginator-icon,
.armanet-p-paginator .p-paginator-last .p-paginator-icon {
  width: 18px;
  height: 18px;
}

.armanet-p-paginator .p-paginator-first.p-paginator-prev,
.armanet-p-paginator .p-paginator-prev.p-paginator-prev,
.armanet-p-paginator .p-paginator-next.p-paginator-prev,
.armanet-p-paginator .p-paginator-last.p-paginator-prev {
  margin-inline-end: .625rem;
}

body .armanet-p-paginator .p-paginator-first,
body .armanet-p-paginator .p-paginator-prev,
body .armanet-p-paginator .p-paginator-next,
body .armanet-p-paginator .p-paginator-last {
  color: var(--fg-300);
  height: 2.286em;
  min-width: 2.286em;
  border: 0 none;
  line-height: 2.286em;
  padding: 0;
  margin: 0;
  vertical-align: top;
  transition: box-shadow .2s;
  border-radius: 0;
}

.armanet-p-paginator .p-paginator-first {
  margin-left: auto !important;
}

.armanet-p-paginator .p-paginator-last {
  margin-right: auto !important;
}

.armanet-p-paginator .p-paginator-first,
.armanet-p-paginator .p-paginator-prev,
.armanet-p-paginator .p-paginator-next,
.armanet-p-paginator .p-paginator-last {
  padding: 5px 2px;
  height: 100%;
  outline: none;
  color: var(--fg);
}

.armanet-p-paginator .p-paginator-first:disabled,
.armanet-p-paginator .p-paginator-prev:disabled,
.armanet-p-paginator .p-paginator-next:disabled,
.armanet-p-paginator .p-paginator-last:disabled {
  opacity: .5;
}

body .armanet-p-paginator .p-paginator-pages {
  vertical-align: top;
  display: inline-block;
  padding: 0;
}

.armanet-p-paginator .p-paginator-pages {
  height: auto!important;
}

body .armanet-p-paginator .p-paginator-pages .p-paginator-page {
  color: var(--fg-300);
  height: 2.286em;
  min-width: 2.286em;
  border: 0 none;
  line-height: 2.286em;
  padding: 0;
  margin: 0;
  vertical-align: top;
  transition: box-shadow .2s;
  border-radius: 0;
}

.armanet-p-paginator .p-paginator-pages .p-paginator-page {
  color: var(--fg)!important;
  font-weight: 600!important;
  margin: 0 5px!important;
  outline: 0!important;
  border-radius: 3px!important;
  padding: 5px 2px!important;
  height: auto!important;
  line-height: initial!important;
}

.armanet-p-paginator .p-paginator-pages .p-paginator-page.p-highlight,
.armanet-p-paginator .p-paginator-pages .p-paginator-page.p-highlight:hover,
.armanet-p-paginator .p-paginator-pages .p-paginator-page.p-highlight:active,
.armanet-p-paginator .p-paginator-pages .p-paginator-page.p-highlight:focus {
  color: var(--fg)!important;
  background-color: var(--bg-secondary-500)!important;
}

.armanet-p-paginator .p-dropdown,
.armanet-p-paginator .p-dropdown-trigger {
  color: var(--fg);
  background-color: var(--bg);
}

.armanet-p-paginator .p-dropdown,
.armanet-p-paginator p-dropdown .p-dropdown {
  padding-inline-start: .5rem;
  align-items: center;
}

body .p-paginator .p-dropdown .p-dropdown-trigger,
body .p-paginator .p-dropdown .p-dropdown-label {
  color: var(--fg-300);
}

/* COMPANION STYLES */
.companion-video-holder iframe {
  max-width: 100% !important;
}

.companion-sidebar-holder iframe {
  max-width: 100% !important;
}

/* MULTI SELECT */
.armanet-multi-select {
  display: inline-block;
  position: relative;
  width: 340px;
  max-width: 340px;
  padding: 5px 20px;
}

.select-header {
  cursor: pointer;
  min-height: 25px;
}

.select-options {
  display: none;
  position: absolute;
  top: 100%;
  max-height: 50vh;
  overflow: auto;
  left: 0;
  width: 100%;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 5px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  z-index: 10;
}

.select-options label {
  display: block;
  padding: 8px 10px;
  cursor: pointer;
  margin-bottom: 0;
  font-size: inherit;
  font-weight: inherit;
}

.select-options label:hover {
  background-color: #f1f1f1;
}

.select-options input[type="checkbox"] {
  margin-right: 10px;
}/* No @import here — it leaks into PeerTube's global stylesheet. */

/* Watch-page "Shop Related Products" button → the full storefront (/p/shop).
   Gold with INK text: white on #bba777 measures 2.36:1, which fails AA, and this is the
   commerce call to action on every watch page. --on-primary is the ink the theme pairs
   with gold (8.1:1). The fallback is that same ink, so the button stays readable even
   without the theme. */
.vapr-shop-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 12px;
  background: var(--mainColor, #BBA777);
  color: var(--on-primary, #12100a);
  padding: 8px 16px;
  border-radius: 8px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}
.vapr-shop-btn:hover { color: var(--on-primary, #12100a); }
/* Desktop shows the full label; ≤600px swaps to a compact "Shop" so the action
   row fits on narrow phones without horizontal overflow. */
.vapr-shop-btn-short { display: none; }
@media (max-width: 600px) {
  .vapr-shop-btn-full { display: none; }
  .vapr-shop-btn-short { display: inline; }
  .vapr-shop-btn { margin-left: 8px; padding: 8px 12px; }
}

.vapr-shop-loading {
  color: var(--fg, #fff);
  padding: 24px;
}

/* "My Vault" pill injected into the top nav (left of the notifications bell). */
.vapr-vault-nav {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-right: 10px;
  padding: 6px 12px;
  border-radius: 999px;
  background: rgba(90, 169, 224, 0.1);
  border: 1px solid rgba(90, 169, 224, 0.35);
  color: var(--fg, #e9e7e4);
  text-decoration: none;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
}
.vapr-vault-nav:hover { background: rgba(90, 169, 224, 0.18); color: var(--fg, #fff); }
.vapr-vault-nav-icon { display: inline-flex; color: #5aa9e0; }   /* blue vault icon */
.vapr-vault-nav-icon svg { display: block; }
.vapr-vault-nav-label { line-height: 1; }
.vapr-vault-nav-count {
  min-width: 18px;
  padding: 1px 5px;
  border-radius: 999px;
  background: #5aa9e0;
  color: #0a1620;
  font-size: 11px;
  font-weight: 700;
  text-align: center;
  line-height: 1.4;
}

/* Mobile header (PeerTube's compact header): the vault becomes an icon-only
 * button — white padlock + a blue count bubble, like the notifications bell. */
@media screen and (max-width: 800px) {
  /* Mobile header order: Search, Vault, Notifications, Avatar (then platform
   * menu). PeerTube renders the mobile search button after the notification/
   * avatar cluster; flex-order pulls it in front so the row reads left-to-right
   * the same as desktop. Logo keeps its default order 0. */
  my-header .root .gh-mobile-header-search-btn { order: 1; margin-right: 4px; }
  my-header .root .buttons-container { order: 2; }
  my-header .root .menu-button { order: 3; }
  .vapr-vault-nav {
    position: relative;
    width: 36px;
    height: 36px;
    gap: 0;
    margin-right: 4px;
    padding: 0;
    justify-content: center;
    background: none;
    border: none;
    border-radius: 50%;
  }
  .vapr-vault-nav:hover { background: rgba(255, 255, 255, 0.08); }
  .vapr-vault-nav-label { display: none; }
  .vapr-vault-nav-icon { color: #fff; }
  .vapr-vault-nav-icon svg { width: 22px; height: 22px; }
  .vapr-vault-nav-count {
    position: absolute;
    top: 6px;
    right: 2px;
    min-width: 16px;
    height: 16px;
    padding: 0 3px;
    border-radius: 16px;
    background: #5aa9e0;
    color: #fff;
    font-size: 10px;
    line-height: 16px;
  }
}

/* Vault page. */
.vapr-shop-vault-page { padding: 24px 32px 48px; max-width: 1400px; }

/* ── Storefront route — "Shop the Look" design system ─────────────────────────
 * Dark charcoal ground, gold commerce accent, blue VAPR accent. Uses the
 * PeerTube platform font (Lato). Hard corners everywhere except
 * avatars. Separation from ground steps + 1px borders, not shadow. Scoped under
 * .vapr-shop so nothing leaks into PeerTube's global stylesheet.
 */
.vapr-shop {
  --gh-bg: #0a0a0c;
  --gh-sidebar: #0e0e11;
  --gh-card: #111114;
  --gh-chrome: #121215;
  --gh-bg-2: #17171c;           /* inputs / dark buttons */
  --gh-card-hover: #212128;     /* default card/panel border */
  --gh-hair: #1e1e24;           /* subtle rules */
  --gh-line: #2a2a32;           /* input / overlay borders */
  --gh-line-2: #3a3a44;         /* checkbox / stronger borders */
  --gh-border-hover: #3d3d48;

  /* Platform gold (matches PeerTube's --mainColor / .border-highlight). */
  --gh-gold: #BBA777;
  --gh-gold-hover: #D4C49A;
  --gh-gold-ink: #0B0B0D;
  --gh-gold-tint: #251f16;
  --gh-gold-tint-border: #4a3c22;

  --gh-blue: #5aa9e0;
  --gh-blue-tint: #12212b;
  --gh-blue-tint-border: #21455c;

  --gh-price: #f3f1ee;
  --gh-text: #f3f1ee;
  --gh-text-body: #e9e7e4;
  --gh-text-2: #cfcdc9;
  --gh-text-mid: #8a8a94;       /* informational */
  --gh-text-dim: #6d6d76;       /* faint labels/counts */
  /* Match the PeerTube platform font (Lato) — no custom faces. */
  --gh-mono: 'Lato', sans-serif;
  --gh-ease: cubic-bezier(0.16, 1, 0.3, 1);

  background: var(--gh-bg);
  color: var(--gh-text);
  font-family: 'Lato', sans-serif;
  max-width: 100%;
  overflow-x: hidden;
  padding: 0 0 48px;
}

.vapr-shop-error {
  color: var(--gh-text);
  padding: 48px 24px;
  text-align: center;
  font-size: 16px;
}

.vapr-shop-sr {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0);
  white-space: nowrap; border: 0;
}

/* ── Header (two modes) — a panel at the top of the main column ─────────────── */
.vapr-shop-header { display: block; }

.vapr-shop-utility {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 0 0 14px;
}

.vapr-shop-identity {
  display: grid;
  /* col 1 tracks the thumbnail's own width (320 desktop, 200 tablet, 96 phone),
     so the breakpoints only need to set .vapr-shop-thumb width. */
  grid-template-columns: auto minmax(0, 1fr);
  /* Desktop: catalog CTA under the info in the right column. Mobile spans it
     full-box-width (≤860 block). */
  grid-template-areas:
    "thumb info"
    "thumb fullcat";
  align-items: start;
  column-gap: 22px;
  row-gap: 14px;
  padding: 18px;
  margin-bottom: 22px;
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
}
.vapr-shop-identity--nothumb {
  grid-template-columns: minmax(0, 1fr);
  grid-template-areas: "info" "fullcat";
}
.vapr-shop-thumb {
  grid-area: thumb;
  width: 320px;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border: 1px solid var(--gh-line);
}
.vapr-shop-header-info {
  grid-area: info;
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}
.vapr-shop-kicker {
  font-family: var(--gh-mono);
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gh-gold);
}
.vapr-shop-title {
  font-size: 27px;
  font-weight: 600;
  line-height: 1.22;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--gh-text);
  overflow-wrap: break-word;
  /* Cap at 2 lines, ellipsis on overflow. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.vapr-shop-channel {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--gh-text-mid);
  font-size: 12px;
}
.vapr-shop-channel b { color: var(--gh-text-body); font-weight: 600; }
.vapr-shop-channel-name { font-size: 15px; }
/* Subscribe rides the channel row, right next to the channel name. */
.vapr-shop-channel-sub { flex-shrink: 0; margin-left: 4px; }
/* "Shop Full Greyhive Catalog" — the store CTA. Gold outline (transparent bg,
   gold border + text) so it reads as its own action next to the creator info.
   Cart icon + arrow inherit the gold via currentColor; fills gold on hover. */
.vapr-shop-fullcat-btn {
  grid-area: fullcat;
  align-self: start;
  justify-self: start;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  background: none;
  border: 1px solid var(--gh-gold, #BBA777);
  border-radius: 6px;
  padding: 12px 22px;
  color: var(--gh-gold, #BBA777);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background 0.15s var(--gh-ease), color 0.15s var(--gh-ease);
}
.vapr-shop-fullcat-btn:hover { background: var(--gh-gold, #BBA777); color: var(--gh-gold-ink, #0B0B0D); }
.vapr-shop-fullcat-icon { display: inline-flex; }
.vapr-shop-fullcat-icon svg { display: block; }
.vapr-shop-fullcat-arrow { font-size: 16px; line-height: 1; }
.vapr-shop-avatar {
  width: 30px; height: 30px;
  border-radius: 4px;   /* square avatar, matching the channel profile */
  object-fit: cover;
  flex-shrink: 0;
}
.vapr-shop-back {
  color: var(--gh-gold);
  text-decoration: none;
  font-size: 11.5px;
  font-weight: 500;
}
.vapr-shop-back:hover { color: var(--gh-gold-hover); }

.vapr-shop-storerow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 16px;
  margin-bottom: 22px;
  background: var(--gh-chrome);
  border: 1px solid var(--gh-card-hover);
}
.vapr-shop-storerow-id { display: flex; align-items: center; gap: 12px; }
.vapr-shop-storerow-id .vapr-shop-avatar { width: 34px; height: 34px; }
.vapr-shop-storerow-logo { width: 42px; height: 42px; object-fit: contain; flex-shrink: 0; }
.vapr-shop-storerow-name { font-size: 16px; font-weight: 600; line-height: 1; }
.vapr-shop-storerow-kicker {
  font-family: var(--gh-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gh-gold);
}
.vapr-shop-return {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 9px 14px 9px 9px;
  border: 1px solid var(--gh-gold-tint-border);
  background: none;
  color: var(--gh-gold);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.06em;
  cursor: pointer;
  transition: background 0.15s var(--gh-ease), color 0.15s var(--gh-ease);
}
.vapr-shop-return:hover { background: var(--gh-gold); color: var(--gh-gold-ink); }
.vapr-shop-return-thumb { width: 68px; aspect-ratio: 16 / 9; object-fit: cover; border: 1px solid var(--gh-line); }
/* Desktop shows the full "BACK TO VIDEO PRODUCTS (n)" label; ≤860 swaps to "← Back". */
.vapr-shop-return-short { display: none; }

/* Channel-store profile header (no video). */
.vapr-shop-profile {
  display: flex;
  align-items: center;
  gap: 22px;
  padding: 18px;
  margin-bottom: 22px;
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
}
.vapr-shop-profile-avatar {
  width: 76px; height: 76px;
  object-fit: cover;
  border-radius: 6px;
  flex-shrink: 0;
}
.vapr-shop-profile-info { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.vapr-shop-profile-namerow { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.vapr-shop-profile-name { font-size: 26px; font-weight: 700; letter-spacing: 0.01em; margin: 0; color: var(--gh-text); }
.vapr-shop-profile-store { font-size: 17px; font-weight: 400; color: var(--gh-text-mid); }
.vapr-shop-profile-actions { display: flex; align-items: center; gap: 16px; margin-top: 2px; }
.vapr-shop-profile-support {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--gh-text-2);
  font-size: 13px;
  text-decoration: none;
}
.vapr-shop-profile-support:hover { color: var(--gh-text); }
.vapr-shop-profile-heart { color: #e0574a; }
.vapr-shop-profile-handle-row { display: flex; align-items: center; gap: 8px; }
.vapr-shop-profile-handle { font-size: 13px; color: var(--gh-text-mid); }
.vapr-shop-profile-copy {
  background: none;
  border: none;
  color: var(--gh-text-mid);
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  padding: 0;
}
.vapr-shop-profile-copy:hover { color: var(--gh-gold); }
.vapr-shop-profile-stats { font-size: 13px; color: var(--gh-text-mid); }

/* 728x90 leaderboard banner, placed below the first product row. */
.vapr-shop-banner { display: flex; justify-content: center; margin: 6px 0 8px; min-width: 0; }
.vapr-shop-banner-slot {
  position: relative;
  width: 100%;
  max-width: 728px;
  aspect-ratio: 728 / 90;   /* scales down proportionally, never overflows */
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.vapr-shop-banner-body { color: var(--gh-text-dim); font-size: 13px; }
/* Real creative served by the Display Ads plugin. */
.vapr-shop-banner-slot.has-ad { background: none; padding: 0; }
/* 320x50 mobile leaderboard on phones. */
.vapr-shop-banner-slot.is-mobile { max-width: 320px; aspect-ratio: 320 / 50; }
.vapr-shop-banner-link { display: block; width: 100%; height: 100%; }
.vapr-shop-banner-img { display: block; width: 100%; height: 100%; object-fit: contain; }

/* Create-account modal. */
.vapr-shop-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(0, 0, 0, 0.7);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.vapr-shop-modal-box {
  position: relative;
  width: 100%;
  max-width: 380px;
  background: var(--gh-card);
  border: 1px solid var(--gh-line-2);
  padding: 28px 24px 24px;
}
.vapr-shop-modal-close {
  position: absolute; top: 10px; right: 10px;
  background: none; border: none;
  color: var(--gh-text-mid);
  font-size: 15px;
  cursor: pointer;
}
.vapr-shop-modal-close:hover { color: var(--gh-text); }
.vapr-shop-modal-title { font-size: 18px; font-weight: 600; margin: 0 0 8px; color: var(--gh-text); }
.vapr-shop-modal-body { font-size: 13px; color: var(--gh-text-mid); margin: 0 0 12px; }
.vapr-shop-modal-list { margin: 0 0 20px; padding-left: 18px; color: var(--gh-text-2); font-size: 13px; display: flex; flex-direction: column; gap: 5px; }
.vapr-shop-modal-actions { display: flex; gap: 10px; }
.vapr-shop-modal-primary {
  background: var(--gh-gold);
  color: var(--gh-gold-ink);
  padding: 10px 16px;
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
}
.vapr-shop-modal-primary:hover { background: var(--gh-gold-hover); }
.vapr-shop-modal-secondary {
  background: var(--gh-bg-2);
  color: var(--gh-text-2);
  border: 1px solid var(--gh-line);
  padding: 10px 16px;
  font-size: 13px;
  text-decoration: none;
}
.vapr-shop-modal-secondary:hover { border-color: var(--gh-border-hover); }

/* Featured / Related sections. */
.vapr-shop-section { margin-bottom: 28px; }

/* ── Catalog controls: the mobile "Filters" toggle sits left of the sort
 *    <select>; the toggle is hidden on desktop (the rail is always visible). */
.vapr-shop-total-controls { display: flex; align-items: center; gap: 12px; }
.vapr-shop-filters-btn {
  display: none;
  align-items: center;
  gap: 7px;
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-line);
  padding: 8px 12px;
  color: var(--gh-text-2);
  font-family: inherit;
  font-size: 13px;
  cursor: pointer;
  transition: border-color 0.15s var(--gh-ease);
}
.vapr-shop-filters-btn:hover { border-color: var(--gh-border-hover); }
/* The glass keeps its size when the label wraps or the badge grows. */
.vapr-shop-filters-icon { flex: none; }
.vapr-shop-topbar-badge {
  min-width: 16px;
  padding: 1px 5px;
  background: var(--gh-gold);
  color: var(--gh-gold-ink);
  font-family: var(--gh-mono);
  font-size: 10px;
  font-weight: 600;
  text-align: center;
}
.vapr-shop-sheet-backdrop,
.vapr-shop-sheet-close { display: none; }

/* ── Layout ──────────────────────────────────────────────────────────────── */
.vapr-shop-layout {
  display: grid;
  grid-template-columns: 272px minmax(0, 1fr);
  gap: 0;
  padding: 0;
  align-items: stretch;
  max-width: 100%;
}
/* Video "picks" landing: no filter rail, main column spans full width. */
.vapr-shop--picks .vapr-shop-layout { grid-template-columns: minmax(0, 1fr); }
.vapr-shop--picks .vapr-shop-sidebar { display: none; }

/* ── Main column (right) ───────────────────────────────────────────────────── */
.vapr-shop-main { min-width: 0; padding: 24px 32px 48px; }

/* ── Filter rail — a full-height panel, like the example ───────────────────── */
.vapr-shop-sidebar {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0;
  background: var(--gh-sidebar);
  border-right: 1px solid var(--gh-hair);
  padding: 20px 20px 60px;
}
/* Every filter group is separated by a top rule, like the example. */
.vapr-shop-field {
  display: flex;
  flex-direction: column;
  gap: 8px;
  border-top: 1px solid var(--gh-hair);
  padding: 16px 0 6px;
}
.vapr-shop-sidebar > .vapr-shop-field:first-child { border-top: none; padding-top: 0; }

/* Collapsible group header: label + chevron, all open by default. */
.vapr-shop-facet-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  width: 100%;
  background: none;
  border: none;
  padding: 0 0 2px;
  cursor: pointer;
  font: inherit;
  color: inherit;
  text-align: left;
}
.vapr-shop-facet-chevron {
  width: 7px; height: 7px;
  border-right: 1.5px solid var(--gh-text-mid);
  border-bottom: 1.5px solid var(--gh-text-mid);
  transform: rotate(45deg);
  margin-bottom: 3px;
  transition: transform 0.15s var(--gh-ease);
  flex-shrink: 0;
}
.vapr-shop-field--collapsed .vapr-shop-facet-chevron { transform: rotate(-45deg); margin: 3px 0 0; }
.vapr-shop-field--collapsed .vapr-shop-checkbox-list { display: none; }
.vapr-shop-field-label {
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--gh-text-body);
}
.vapr-shop-facet-count { display: none; }

.vapr-shop-input,
.vapr-shop-input-sm,
.vapr-shop-select {
  background: var(--gh-bg-2);
  color: var(--gh-text);
  border: 1px solid var(--gh-line);
  padding: 8px 10px;
  font-family: inherit;
  font-size: 13px;
  width: 100%;
}
/* ⚠️ iOS Safari ZOOMS INTO any field it focuses whose text is under 16px, and the zoom is not
   undone when the field blurs — the shopper is left on a magnified, sideways-scrolling page.
   It applies to the sort <select> and to every filter input (search, brand, price), all of
   which share the rule above at 13px.
   Raised only where it can happen: a touch pointer, or a narrow screen. Desktop keeps 13px,
   so nothing about the sidebar's density changes on the surface this was designed for. */
@media (pointer: coarse), (max-width: 800px) {
  .vapr-shop-input,
  .vapr-shop-input-sm,
  .vapr-shop-select { font-size: 16px; }
}

.vapr-shop-input::placeholder,
.vapr-shop-input-sm::placeholder { color: var(--gh-text-dim); }
.vapr-shop-input:focus,
.vapr-shop-input-sm:focus,
.vapr-shop-select:focus {
  outline: none;
  border-color: var(--gh-gold);
}

.vapr-shop-search-row { display: flex; gap: 8px; }

.vapr-shop-page-btn {
  background: var(--gh-gold);
  color: var(--gh-gold-ink);
  border: none;
  padding: 8px 16px;
  font-weight: 600;
  font-size: 12.5px;
  letter-spacing: 0.04em;
  cursor: pointer;
  transition: background 0.15s var(--gh-ease);
}
.vapr-shop-page-btn:hover { background: var(--gh-gold-hover); }
.vapr-shop-page-btn:disabled {
  background: none;
  color: var(--gh-text-dim);
  border: 1px dashed var(--gh-line-2);
  cursor: not-allowed;
}

.vapr-shop-typeahead { position: relative; }
.vapr-shop-typeahead-list {
  position: absolute;
  top: calc(100% + 4px);
  left: 0; right: 0;
  max-height: 220px;
  overflow-y: auto;
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-line);
  z-index: 5;
}
.vapr-shop-typeahead-item { padding: 8px 10px; font-size: 14px; cursor: pointer; }
.vapr-shop-typeahead-item:hover,
.vapr-shop-typeahead-item.active { background: var(--gh-card-hover); }

.vapr-shop-price-row {
  display: grid;
  grid-template-columns: 1fr 10px 1fr;
  align-items: center;
  gap: 8px;
  color: var(--gh-text-dim);
  font-family: var(--gh-mono);
}
.vapr-shop-price-dash { height: 1px; background: var(--gh-line-2); }

.vapr-shop-preset-row { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.vapr-shop-preset-chip {
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-line);
  color: var(--gh-text-mid);
  padding: 4px 9px;
  font-family: var(--gh-mono);
  font-size: 11px;
  cursor: pointer;
  transition: border-color 0.15s var(--gh-ease), color 0.15s var(--gh-ease);
}
.vapr-shop-preset-chip:hover { border-color: var(--gh-gold); color: var(--gh-text); }
.vapr-shop-preset-chip.active {
  background: var(--gh-gold);
  border-color: var(--gh-gold);
  color: var(--gh-gold-ink);
  font-weight: 600;
}

/* Facet checkbox groups. */
.vapr-shop-checkbox-list { display: flex; flex-direction: column; gap: 7px; }
.vapr-shop-checkbox-list:not(.expanded) .vapr-shop-checkbox-row--overflow { display: none; }
/* Extra .vapr-shop specificity: PeerTube's global input/label reset otherwise
 * strips the checkbox border and forces the label to weight 700. */
.vapr-shop .vapr-shop-checkbox-row {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: 14px;
  font-weight: 400;
  cursor: pointer;
  color: #b9b7b3;
}
.vapr-shop .vapr-shop-checkbox-row input {
  appearance: none;
  -webkit-appearance: none;
  width: 14px; height: 14px;
  flex-shrink: 0;
  /* !important: PeerTube's global input reset zeroes the border otherwise. */
  border: 1px solid var(--gh-line-2) !important;
  background: transparent;
  cursor: pointer;
  position: relative;
}
.vapr-shop .vapr-shop-checkbox-row input:checked { background: var(--gh-gold); border-color: var(--gh-gold) !important; }
.vapr-shop .vapr-shop-checkbox-row input:checked::after {
  content: '';
  position: absolute;
  left: 4px; top: 1px;
  width: 4px; height: 8px;
  border: solid #0a0a0c;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.vapr-shop .vapr-shop-checkbox-row input:checked ~ .vapr-shop-checkbox-name { color: var(--gh-text); }
.vapr-shop .vapr-shop-checkbox-row input:focus-visible { outline: 2px solid var(--gh-gold); outline-offset: 2px; }
.vapr-shop-checkbox-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vapr-shop-checkbox-count { display: none; }

.vapr-shop-show-more {
  align-self: flex-start;
  background: none;
  border: none;
  padding: 1px 0;
  margin-top: 4px;
  font-family: inherit;
  font-size: 12px;
  font-weight: 500;
  color: var(--gh-gold);
  cursor: pointer;
}
.vapr-shop-show-more:hover { color: var(--gh-gold-hover); }

.vapr-shop-chip-row { display: flex; flex-wrap: wrap; gap: 6px; }
.vapr-shop-clear,
.vapr-shop-chip-clear-all {
  align-self: flex-start;
  background: none;
  border: none;
  color: var(--gh-text-mid);
  cursor: pointer;
  font-family: inherit;
  font-size: 11px;
  text-decoration: underline;
  padding: 0;
}
.vapr-shop-clear:hover,
.vapr-shop-chip-clear-all:hover { color: var(--gh-gold); }

/* ── Chip bar ────────────────────────────────────────────────────────────── */
.vapr-shop-chip-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 18px;
}
.vapr-shop-chip-bar-label {
  font-family: var(--gh-mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gh-text-mid);
}
.vapr-shop-chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  background: var(--gh-gold-tint);
  border: 1px solid var(--gh-gold-tint-border);
  color: var(--gh-gold);
  padding: 5px 8px;
  font-size: 11px;
  font-weight: 500;
}
.vapr-shop-chip-key {
  font-family: var(--gh-mono);
  font-size: 9px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #9a8358;
}
.vapr-shop-chip-remove {
  background: none;
  border: none;
  color: #9a8358;
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  padding: 0 1px;
}
.vapr-shop-chip-remove:hover { color: var(--gh-gold); }

/* ── Results header ──────────────────────────────────────────────────────── */
.vapr-shop-grid-wrap { min-width: 0; max-width: 100%; }
.vapr-shop-results-head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-bottom: 18px;
}
/* Section title with a rounded gold underline, like the platform's Discover
 * section headings (.border-highlight ::after — 20x4, radius 2, gold). */
.vapr-shop-grid-heading {
  position: relative;
  font-size: 24px;
  font-weight: 500;
  line-height: 1.1;
  margin: 0;
  padding-bottom: 10px;
  color: var(--gh-text);
}
.vapr-shop-grid-heading::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  width: 20px;
  height: 4px;
  border-radius: 2px;
  background: var(--gh-gold);
}
.vapr-shop-results-count { font-family: var(--gh-mono); font-size: 12px; color: var(--gh-text-mid); }
.vapr-shop-total-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 16px;
}
.vapr-shop-total-row .vapr-shop-results-head { margin-bottom: 0; border: none; padding-bottom: 0; }
.vapr-shop-sort { width: auto; }
.vapr-shop-back-chip {
  background: none;
  border: none;
  padding: 0;
  margin-bottom: 12px;
  font-family: inherit;
  font-size: 12px;
  color: var(--gh-gold);
  cursor: pointer;
}
.vapr-shop-back-chip:hover { color: var(--gh-gold-hover); }

/* ── Grid ────────────────────────────────────────────────────────────────── */
.vapr-shop-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(212px, 1fr));
  gap: 14px;
}

/* ── Product card ────────────────────────────────────────────────────────── */
.vapr-product-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
  overflow: hidden;
  color: var(--gh-text);
  transition: border-color 0.15s var(--gh-ease);
}
.vapr-product-card:hover { border-color: var(--gh-border-hover); }

.vapr-product-img,
.vapr-product-img-empty {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: contain;
  background: #17171d;   /* dark tile to match the storefront theme (transparent-
                            cutout + scene photos integrate; white-studio JPEGs
                            still show their own white frame) */
  padding: 10px;
}

/* Product-image lightbox (click to enlarge). Above PeerTube's z-index 17500. */
.vapr-lightbox {
  position: fixed;
  inset: 0;
  z-index: 100000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(0, 0, 0, 0.9);
  cursor: zoom-out;
  animation: vapr-lightbox-in 0.15s var(--gh-ease);
}
@keyframes vapr-lightbox-in { from { opacity: 0; } to { opacity: 1; } }
.vapr-lightbox-img {
  max-width: 92vw;
  max-height: 88vh;
  object-fit: contain;
}
.vapr-lightbox-close {
  position: fixed;
  top: 16px; right: 16px;
  width: 42px; height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.25);
  border-radius: 50%;
  color: #fff;
  font-size: 17px;
  cursor: pointer;
}
.vapr-lightbox-close:hover { background: rgba(255, 255, 255, 0.2); }

.vapr-product-badge {
  position: absolute;
  top: 8px; left: 8px;
  font-family: var(--gh-mono);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: 0.12em;
  padding: 3px 6px;
}
.vapr-product-badge--featured { background: var(--gh-gold); color: var(--gh-gold-ink); }
.vapr-product-badge--used {
  background: rgba(10, 10, 12, 0.85);
  border: 1px solid var(--gh-line-2);
  color: var(--gh-text-body);
}

/* Save-to-Vault control, inline on the right of the price row. */
.vapr-product-save {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 10px;
  background: none;
  border: 1px solid var(--gh-line-2);
  color: var(--gh-text-2);
  font-size: 11.5px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
  transition: color 0.15s var(--gh-ease), border-color 0.15s var(--gh-ease), background 0.15s var(--gh-ease);
}
.vapr-product-save:hover { color: var(--gh-text); border-color: var(--gh-border-hover); }
.vapr-product-save-icon { display: inline-flex; }
.vapr-product-save svg { display: block; }
/* Saved = VAPR blue "In Vault ✓". */
.vapr-product-save.is-saved {
  background: var(--gh-blue-tint);
  border-color: var(--gh-blue-tint-border);
  color: var(--gh-blue);
}

.vapr-product-body {
  display: flex;
  flex-direction: column;
  gap: 7px;
  padding: 11px 12px 13px;
  flex: 1 1 auto;
}
.vapr-product-brand {
  font-family: var(--gh-mono);
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--gh-text-mid);
}
.vapr-product-name {
  font-size: 12.5px;
  font-weight: 400;
  line-height: 1.35;
  color: var(--gh-text-body);
  flex: 1;
  min-height: 34px;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
.vapr-product-price-row {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 10px;
}
.vapr-product-price-block { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.vapr-product-price {
  font-family: var(--gh-mono);
  font-weight: 600;
  font-size: 16px;
  line-height: 1.1;
  color: var(--gh-price);
}
.vapr-product-retailer { font-size: 10.5px; color: var(--gh-text-mid); }
.vapr-product-buy {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  margin-top: 10px;
  padding: 9px 0;
  background: var(--gh-gold);
  color: var(--gh-gold-ink);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background 0.15s var(--gh-ease);
}
.vapr-product-buy:hover { background: var(--gh-gold-hover); }

/* ── Pagination ──────────────────────────────────────────────────────────── */
.vapr-shop-pagination { display: flex; align-items: center; gap: 12px; margin-top: 24px; }
.vapr-shop-page-info { color: var(--gh-text-mid); font-size: 13px; font-family: var(--gh-mono); }

/* ── States ──────────────────────────────────────────────────────────────── */
.vapr-shop-skeleton-card {
  display: flex;
  flex-direction: column;
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
  overflow: hidden;
}
.vapr-shop-skel-tile { width: 100%; aspect-ratio: 4 / 3; }
.vapr-shop-skel-body { display: flex; flex-direction: column; gap: 8px; padding: 12px; }
.vapr-shop-skel { background: #22222a; }
.vapr-shop-skel--brand { height: 9px; width: 40%; }
.vapr-shop-skel--line { height: 11px; width: 100%; }
.vapr-shop-skel--line2 { height: 11px; width: 70%; }
.vapr-shop-skel--price { height: 18px; width: 45%; margin-top: 4px; }
.vapr-shop-skel--btn { height: 34px; width: 100%; background: #26262f; }
.vapr-shop-skel-shimmer {
  background: linear-gradient(90deg, #1b1b22, #25252e, #1b1b22);
  background-size: 420px 100%;
  animation: vapr-shimmer 1.5s var(--gh-ease) infinite;
}
@keyframes vapr-shimmer {
  0% { background-position: -210px 0; }
  100% { background-position: 210px 0; }
}

.vapr-shop-empty-panel {
  text-align: center;
  padding: 48px 24px;
  border: 1px dashed var(--gh-line);
}
.vapr-shop-empty-title { font-size: 18px; font-weight: 600; margin: 0 0 8px; }
.vapr-shop-empty-body { font-size: 13px; color: var(--gh-text-mid); max-width: 440px; margin: 0 auto 18px; }
.vapr-shop-empty-pills { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 18px; }
.vapr-shop-empty-pill {
  background: var(--gh-gold-tint);
  border: 1px solid var(--gh-gold-tint-border);
  color: var(--gh-gold);
  padding: 5px 12px;
  font-size: 12px;
  cursor: pointer;
}
.vapr-shop-empty-pill:hover { background: #2f2718; }
.vapr-shop-empty-clear {
  background: var(--gh-gold);
  border: none;
  color: var(--gh-gold-ink);
  padding: 10px 18px;
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  cursor: pointer;
}
.vapr-shop-empty-clear:hover { background: var(--gh-gold-hover); }
.vapr-shop-empty {
  color: var(--gh-text-mid);
  padding: 32px 8px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: flex-start;
}

.vapr-shop-facet-error {
  background: #141419;
  border: 1px solid var(--gh-line);
  border-left: 2px solid var(--gh-gold);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.vapr-shop-facet-error-title { font-weight: 600; font-size: 13px; }
.vapr-shop-facet-error-body { font-size: 12.5px; color: var(--gh-text-mid); }
.vapr-shop-facet-retry {
  align-self: flex-start;
  background: none;
  border: none;
  padding: 0;
  color: var(--gh-gold);
  font-family: inherit;
  font-size: 12.5px;
  cursor: pointer;
  text-decoration: underline;
}
.vapr-shop-facet-retry:hover { color: var(--gh-gold-hover); }

/* ── Focus / a11y ────────────────────────────────────────────────────────── */
.vapr-shop a:focus-visible,
.vapr-shop button:focus-visible,
.vapr-shop select:focus-visible,
.vapr-shop [tabindex]:focus-visible {
  outline: 2px solid var(--gh-gold);
  outline-offset: 2px;
}

/* ── Scroll reveal ───────────────────────────────────────────────────────── */
.vapr-shop .rv { opacity: 0; transform: translateY(12px); transition: opacity 0.4s var(--gh-ease), transform 0.4s var(--gh-ease); }
.vapr-shop .rv.rv-in { opacity: 1; transform: none; }

/* ── Responsive ──────────────────────────────────────────────────────────── */
@media (max-width: 1199px) {
  .vapr-shop-layout { grid-template-columns: 1fr; }
  .vapr-shop-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
  .vapr-shop-thumb { width: 200px; }
  .vapr-shop-title { font-size: 22px; }

  .vapr-shop-filters-btn { display: inline-flex; }

  .vapr-shop-sidebar {
    position: fixed;
    /* Start below the fixed platform header (56px) so the sheet — and its
       sticky close bar — aren't buried under it. */
    top: 56px; left: 0; bottom: 0;
    width: 320px;
    max-width: 85vw;
    z-index: 60;
    overflow-y: auto;
    background: var(--gh-sidebar);
    border-right: 1px solid var(--gh-card-hover);
    padding: 0 16px 24px;
    transform: translateX(-100%);
    transition: transform 0.3s var(--gh-ease);
  }
  .vapr-shop--sheet .vapr-shop-sidebar { transform: none; }
  .vapr-shop--sheet .vapr-shop-sheet-backdrop {
    display: block;
    position: fixed;
    inset: 0;
    z-index: 55;
    background: rgba(0, 0, 0, 0.6);
  }
  /* Full-width close bar pinned to the top of the sheet as it scrolls. */
  .vapr-shop--sheet .vapr-shop-sheet-close {
    display: flex;
    position: sticky;
    top: 0;
    z-index: 2;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin: 0 -16px 14px;
    padding: 14px 16px;
    background: var(--gh-sidebar);
    border: none;
    border-bottom: 1px solid var(--gh-card-hover);
    color: var(--gh-text);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
  }
}

@media (max-width: 860px) {
  .vapr-shop-main { padding-left: 16px; padding-right: 16px; }
  /* Compact video box: small thumbnail with the kicker, smaller title, channel
     row (avatar + name + Subscribe), and the full-catalog CTA. */
  .vapr-shop-identity {
    column-gap: 14px;
    padding: 14px;
    grid-template-areas:
      "thumb info"
      "fullcat fullcat";
  }
  .vapr-shop-identity--nothumb { grid-template-areas: "info" "fullcat"; }
  .vapr-shop-thumb { width: 170px; }
  .vapr-shop-title { font-size: 16px; line-height: 1.25; }
  .vapr-shop-kicker { font-size: 10px; }
  .vapr-shop-channel { flex-wrap: wrap; gap: 8px; }
  /* Full-box-width catalog CTA on mobile. */
  .vapr-shop-fullcat-btn { justify-self: stretch; text-align: center; }
  .vapr-shop-section .vapr-shop-grid-heading { font-size: 18px; }
  .vapr-shop-section .vapr-shop-results-count { display: none; }
  /* Catalog row: shrink the CATALOG heading and drop its count so Filters +
     the sort fit beside it without clipping; wrap as a safety net. */
  .vapr-shop-total-row { flex-wrap: wrap; }
  .vapr-shop-total-row .vapr-shop-grid-heading { font-size: 18px; }
  .vapr-shop-total-row .vapr-shop-results-count { display: none; }
  /* Catalog store row: compact "← Back" button shifted next to the channel so
     the channel name stays on 2 lines (STORE + name) instead of being squeezed. */
  .vapr-shop-return-full { display: none; }
  .vapr-shop-return-short { display: inline; }
  .vapr-shop-storerow { justify-content: flex-start; gap: 14px; }
  .vapr-shop-storerow-id { flex: 0 1 auto; min-width: 0; }
  .vapr-shop-storerow-id > div { min-width: 0; }
  /* Name to one line (ellipsis) so the channel block is always 2 lines. */
  .vapr-shop-storerow-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .vapr-shop-return { flex-shrink: 0; }

  .vapr-shop-grid { grid-template-columns: 1fr; gap: 12px; }
  /* Horizontal list rows: fixed 112px image, content fills the rest. */
  .vapr-product-card { flex-direction: row; }
  .vapr-product-img,
  .vapr-product-img-empty { width: 112px; flex-shrink: 0; align-self: stretch; aspect-ratio: auto; }
  .vapr-product-body { min-width: 0; gap: 6px; }
  .vapr-product-name { -webkit-line-clamp: 2; min-height: 0; flex: none; }
  /* Price + Save wrap instead of overflowing the narrow row. */
  .vapr-product-price-row { flex-wrap: wrap; row-gap: 8px; }
  .vapr-product-buy { min-height: 44px; margin-top: 8px; }
  .vapr-shop-chip-bar { flex-wrap: nowrap; overflow-x: auto; }
}

@media (prefers-reduced-motion: reduce) {
  .vapr-shop *,
  .vapr-shop-skel-shimmer { animation: none !important; transition: none !important; }
  .vapr-shop-skel-shimmer { background: #20202a; }
  .vapr-shop .rv { opacity: 1; transform: none; }
}
