.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{
  --bg:#0B0B0D; --bg2:#111115; --panel:#141418; --card:#17171D; --card-h:#1E1E26; --surface:#252530;
  --gold:#BBA777; --gold-h:#D4C49A; --gold-m:#8A7C58;
  --blue:#00A3E0; --blue-h:#33B8E8;
  --tx:#E8E6E1; --tx-m:#A0A0AC; --tx-d:#6A6A78;
  --green:#4ADE80; --red:#D40000;
  --line:rgba(187,167,119,.18);
  --ease:cubic-bezier(0.16,1,0.3,1);
  --pad:26px; --card-w:288px; --header:56px;

  position:relative;
  background:var(--bg); color:var(--tx);
  font-family:'DM Sans',system-ui,sans-serif; font-size:15px; line-height:1.5;
  -webkit-font-smoothing:antialiased;
  padding:26px 0 10px;
}
#gh-home *{box-sizing:border-box;margin:0;padding:0}
#gh-home::before{ /* grain */
  content:""; position:absolute; inset:0; z-index:1; pointer-events:none; opacity:.045;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
#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(--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 ============ */
#gh-home .ghh-chipbar{position:sticky;top:var(--header);z-index:80;background:rgba(11,11,13,.92);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.05);display:flex;align-items:center;gap:9px;padding:12px var(--pad);overflow-x:auto;scrollbar-width:none}
#gh-home .ghh-chipbar::-webkit-scrollbar{display:none}
#gh-home .ghh-chip{flex:none;padding:8px 15px;border-radius:100px;background:var(--card);border:1px solid rgba(255,255,255,.05);color:var(--tx-m);font-size:13px;font-weight:500;transition:.18s var(--ease);white-space:nowrap}
#gh-home .ghh-chip:hover{background:var(--card-h);color:var(--tx)}

/* ============ SHELVES ============ */
#gh-home .ghh-shelf-head .ghh-kick{font-family:'Space Mono';font-size:11px;color:var(--gold-m);letter-spacing:.13em;text-transform:uppercase;align-self:center}
#gh-home .ghh-shelf-head .ghh-rule{flex:1;height:1px;background:var(--line);margin-bottom:6px}
#gh-home .ghh-shelf-head .ghh-viewall{font-size:13px;color:var(--tx-m);font-weight:500;white-space:nowrap;transition:.2s var(--ease);align-self:center}
#gh-home .ghh-shelf-head .ghh-viewall:hover{color:var(--gold)}
#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:10px;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(--tx);fill:none}
#gh-home .ghh-thumb .ghh-badge{position:absolute;bottom:8px;right:8px;background:rgba(11,11,13,.85);color:#fff;font-family:'Space Mono';font-size:11px;padding:2px 6px;border-radius:4px}
#gh-home .ghh-thumb .ghh-exclusive{position:absolute;top:8px;left:8px;display:flex;align-items:center;gap:4px;background:rgba(11,11,13,.78);color:var(--gold);font-family:'Space Mono';font-size:10px;font-weight:700;padding:3px 7px;border-radius:4px;letter-spacing:.06em;border:1px solid rgba(187,167,119,.4)}
#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(--gold)}
#gh-home .ghh-card-meta{display:flex;gap:11px;padding:11px 2px 0}
#gh-home .ghh-card-meta .ghh-ch-av{width:33px;height:33px;border-radius:100px;flex:none;background:linear-gradient(135deg,var(--surface),var(--card-h));display:grid;place-items:center;font-family:'Space Mono';font-weight:700;font-size:11px;color:var(--gold);border:1px solid rgba(255,255,255,.06)}
#gh-home .ghh-card-txt{min-width:0}
#gh-home .ghh-card-title{font-size:14px;font-weight:500;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#gh-home .ghh-card-ch{font-size:12.5px;color:var(--tx-m);margin-top:5px;display:flex;align-items:center;gap:5px}
#gh-home .ghh-card-ch .ghh-verif{color:var(--blue);flex:none}
#gh-home .ghh-card-stats{font-family:'Space Mono';font-size:11px;color:var(--tx-d);margin-top:3px}
#gh-home .ghh-card-reason{font-family:'Space Mono';font-size:10.5px;color:var(--gold-m);margin-top:5px}

/* shop card (VAPR™) */
#gh-home .ghh-shop-card{flex:none;width:210px;scroll-snap-align:start;background:var(--card);border:1px solid rgba(255,255,255,.05);border-radius:12px;overflow:hidden;transition:.3s var(--ease)}
#gh-home .ghh-shop-card:hover{transform:translateY(-4px);border-color:rgba(187,167,119,.35)}
#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(--tx);fill:none}
#gh-home .ghh-shop-thumb .ghh-vtag{position:absolute;top:9px;left:9px;font-family:'Space Mono';font-size:9px;font-weight:700;letter-spacing:.09em;color:var(--gold);border:1px solid var(--gold-m);border-radius:4px;padding:2px 6px}
#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(--tx-d);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(--gold)}
#gh-home .ghh-shop-buy .ghh-shopbtn{background:var(--blue);color:#04121a;font-weight:700;font-size:12px;padding:6px 12px;border-radius:6px;transition:.2s var(--ease)}
#gh-home .ghh-shop-buy .ghh-shopbtn:hover{background:var(--blue-h)}

/* 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(--surface);
  background: rgba(11, 11, 13, 0.85); color: var(--tx); 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 */
#gh-home .ghh-shorts-shelf .ghh-track { gap: 12px; }

/* ---- shorts ---- */
#gh-home .ghh-short-card { flex: 0 0 160px; 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(--card);
}
#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: 'DM Sans', sans-serif; font-size: 13px; line-height: 1.3;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ---- signup CTA ---- */
#gh-home .ghh-cta {
  position: relative; border: 1px solid var(--gold); 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(--tx); }
#gh-home .ghh-cta p { font-family: 'DM Sans', sans-serif; color: var(--tx-m); margin: 0 0 20px; }
#gh-home .ghh-cta-btn {
  display: inline-block; background: var(--gold); color: var(--bg); text-decoration: none;
  font-weight: 700; padding: 12px 28px; border-radius: 6px;
}
#gh-home .ghh-cta-btn:hover { background: var(--gold-h); }
#gh-home .ghh-cta-dismiss {
  position: absolute; top: 8px; right: 12px; background: none; border: 0;
  color: var(--tx-d); 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(--tx-m); text-align: center; }
/**
 * 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;
}

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

/* Community badges. The rail's icon box is 22x22 (menu.component.scss sets
   `.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: 22px;
  height: 22px;
  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: #12100a;
  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: #17171D;
}

/* ---------------------------------------------------------------------------------
   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: #A0A0AC;
    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: #E8E6E1;
    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: #BBA777;
  }

  #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));
  }
}
/* 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);
}
/* 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;
}
.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-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;
}
.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;
}/* 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;
}

body.gh-custom-menu-page .gh-custom-menu-nav-host {
  display: block;
  width: 100%;
  max-width: 100%;
  overflow: visible;
  padding-bottom: 3px;
  border-bottom: 1px solid var(--fg-200, rgba(255, 255, 255, 0.15));
  margin-bottom: 0;
}

/* 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;
}
@charset "UTF-8";
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 Here we are getting some Peertube variables (see _variables.scss in Peertube source code):
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
.peertube-plugin-livechat-experimental,
.peertube-plugin-livechat-warning {
  color: orange;
}

.peertube-plugin-livechat-error {
  color: red;
}

.peertube-plugin-livechat-error-message {
  /* display an error block (page not found, ...) */
  display: block;
  font-size: 20px;
  padding-top: 50px;
  text-align: center;
  width: 100%;
}

.peertube-plugin-livechat-container .peertube-plugin-livechat-error-message {
  max-width: 30vw;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* We are disabling stylelint-disable custom-property-pattern so we can use Peertube var without warnings. */
/* stylelint-disable custom-property-pattern */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* We are disabling stylelint-disable custom-property-pattern so we can use Peertube var without warnings. */
/* stylelint-disable custom-property-pattern */
/*
 * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* We are disabling stylelint-disable custom-property-pattern so we can use Peertube var without warnings. */
/* stylelint-disable custom-property-pattern */
livechat-dynamic-table-form {
  display: block;
  margin-bottom: 3rem;
}
livechat-dynamic-table-form table {
  table-layout: fixed;
  text-align: center;
}
livechat-dynamic-table-form table tr {
  border: 1px var(--bg-secondary-400, var(--greyBackgroundColor)) solid;
}
livechat-dynamic-table-form table td,
livechat-dynamic-table-form table th {
  word-wrap: break-word;
  vertical-align: top;
  padding: 5px 7px;
}
livechat-dynamic-table-form table td:last-child {
  vertical-align: middle;
  min-width: 28px;
}
livechat-dynamic-table-form table td:last-child > input:not([type=checkbox]),
livechat-dynamic-table-form table td:last-child textarea {
  min-width: 150px;
}
livechat-dynamic-table-form table tbody tr:nth-child(odd) {
  background-color: var(--bg-secondary-300, var(--greySecondaryBackgroundColor));
}
livechat-dynamic-table-form table .livechat-dynamic-table-form-description-header {
  font-size: small;
  font-weight: lighter;
}
livechat-dynamic-table-form .dynamic-table-add-row-cell {
  text-align: left;
}
livechat-dynamic-table-form .dynamic-table-add-row {
  line-height: 19px;
  padding: 4px;
  border: 0;
  font-weight: 600;
  border-radius: 3px !important;
  text-align: center;
  cursor: pointer;
  font-size: 15px;
  background-color: var(--bs-green);
}
livechat-dynamic-table-form .dynamic-table-add-row, livechat-dynamic-table-form .dynamic-table-add-row:active, livechat-dynamic-table-form .dynamic-table-add-row:focus {
  color: #fff;
  background-color: rgb(63.7604651163, 228.1953488372, 12.3046511628);
}
livechat-dynamic-table-form .dynamic-table-add-row:focus, livechat-dynamic-table-form .dynamic-table-add-row.focus-visible {
  box-shadow: 0 0 0 0.2rem rgb(113.1674418605, 245.1255813953, 71.8744186047);
}
livechat-dynamic-table-form .dynamic-table-add-row:hover {
  color: #fff;
  background-color: rgb(75.688372093, 242.5162790698, 23.4837209302);
}
livechat-dynamic-table-form .dynamic-table-add-row[disabled], livechat-dynamic-table-form .dynamic-table-add-row.disabled {
  cursor: default;
  color: #fff;
  background-color: var(--input-border-color, var(--inputBorderColor));
}
livechat-dynamic-table-form .dynamic-table-remove-row {
  line-height: 19px;
  padding: 4px;
  border: 0;
  font-weight: 600;
  border-radius: 3px !important;
  text-align: center;
  cursor: pointer;
  font-size: 15px;
  background-color: var(--bs-orange);
}
livechat-dynamic-table-form .dynamic-table-remove-row, livechat-dynamic-table-form .dynamic-table-remove-row:active, livechat-dynamic-table-form .dynamic-table-remove-row:focus {
  color: #fff;
  background-color: var(--primary, var(--mainColor));
}
livechat-dynamic-table-form .dynamic-table-remove-row:focus, livechat-dynamic-table-form .dynamic-table-remove-row.focus-visible {
  box-shadow: 0 0 0 0.2rem var(--mainHoverColor);
}
livechat-dynamic-table-form .dynamic-table-remove-row:hover {
  color: #fff;
  background-color: var(--fg-400, var(--mainHoverColor));
}
livechat-dynamic-table-form .dynamic-table-remove-row[disabled], livechat-dynamic-table-form .dynamic-table-remove-row.disabled {
  cursor: default;
  color: #fff;
  background-color: var(--input-border-color, var(--inputBorderColor));
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
livechat-error {
  color: red;
  display: block;
  padding: 50px;
  text-align: center;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
livechat-help-button a {
  height: 18px !important;
  margin: 2px !important;
  padding: 1px !important;
  vertical-align: middle;
}
livechat-help-button svg {
  display: block;
  height: auto;
}

/*
 * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* stylelint-disable custom-property-pattern */
livechat-image-file-input img {
  cursor: pointer;
  max-height: 3em !important;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
livechat-share-chat {
  display: block;
  text-align: start;
}
livechat-share-chat > * {
  margin-top: 10px;
}
livechat-share-chat .sub-menu-entry {
  cursor: pointer;
}
livechat-share-chat .livechat-shareurl-copy {
  display: flex;
  flex-wrap: wrap;
}
livechat-share-chat .livechat-shareurl-copy button {
  white-space: nowrap;
}
livechat-share-chat .livechat-shareurl-copy input {
  flex-grow: 2;
  width: auto !important;
}
livechat-share-chat .livechat-shareurl-block {
  height: 300px;
  overflow-y: scroll;
}
livechat-share-chat .livechat-shareurl-options input[type=checkbox],
livechat-share-chat .livechat-shareurl-options input[type=radio] {
  margin-right: 20px;
}
livechat-share-chat .livechat-shareurl-options label {
  display: block;
}
livechat-share-chat .livechat-shareurl-options .livechat-shareurl-suboptions {
  margin-left: 40px;
}
livechat-share-chat .livechat-shareurl-options .livechat-shareurl-suboptions > * {
  display: block;
}
livechat-share-chat .livechat-shareurl-options .livechat-shareurl-suboptions.livechat-shareurl-suboptions-disabled label {
  /* stylelint-disable-next-line custom-property-pattern */
  color: var(--fg-400, var(--greyForegroundColor));
}
livechat-share-chat .livechat-shareurl-protocol {
  display: flex;
  flex-flow: row wrap;
  column-gap: 30px;
}
livechat-share-chat .livechat-shareurl-protocol input[type=radio] {
  margin-right: 10px;
}
livechat-share-chat .livechat-shareurl-tips {
  margin-bottom: 1rem;
  margin-top: 1rem;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
livechat-spinner,
.livechat-spinner {
  display: flex;
  flex-direction: row;
  justify-content: center;
}
livechat-spinner div,
.livechat-spinner div {
  width: 48px;
  height: 48px;
  margin: 20px;
  /* stylelint-disable-next-line custom-property-pattern */
  border: 5px solid var(--bg-secondary-400, var(--greyBackgroundColor)) !important;
  /* stylelint-disable-next-line custom-property-pattern */
  border-bottom-color: var(--primary, var(--mainColor)) !important;
  border-radius: 50%;
  display: inline-block;
  box-sizing: border-box;
  animation: livechatrotating 1s linear infinite;
}
@keyframes livechatrotating {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

/*
 * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* stylelint-disable custom-property-pattern */
livechat-tags-input {
  --tag-padding-vertical: 3px;
  --tag-padding-horizontal: 6px;
  display: flex;
  align-items: flex-start;
  flex-wrap: wrap;
  max-width: 320px;
  /* stylelint-disable-next-line no-descending-specificity */
}
livechat-tags-input .livechat-tags-container {
  align-items: center;
  display: flex;
  flex-flow: row;
  justify-content: space-between;
}
livechat-tags-input input {
  flex: 1;
  border: none;
  padding: 0;
  color: inherit;
  background-color: inherit;
  width: 100%;
  /* stylelint-disable-next-line no-descending-specificity */
}
livechat-tags-input input:focus {
  outline: transparent;
}
livechat-tags-input .livechat-tags,
livechat-tags-input .livechat-tags-searched {
  display: flex;
  flex-wrap: wrap;
  padding: 0;
  margin: var(--tag-padding-vertical) 0;
  max-height: 150px;
  overflow-y: auto;
  transition-property: height, margin;
  transition-duration: 0.3s;
}
@supports (scrollbar-width: auto) {
  livechat-tags-input .livechat-tags,
  livechat-tags-input .livechat-tags-searched {
    scrollbar-color: var(--fg-400, var(--greyForegroundColor)) transparent;
    scrollbar-width: thin;
  }
}
livechat-tags-input .livechat-tags-container,
livechat-tags-input .livechat-tags-searched {
  border-bottom: 1px dashed var(--fg-400, var(--greyForegroundColor));
}
livechat-tags-input .livechat-tags-container.livechat-empty,
livechat-tags-input .livechat-tags-searched.livechat-empty {
  height: 0;
  margin: 0;
  border: none;
}
livechat-tags-input .livechat-tags-searched::after {
  content: "🔍";
  flex-grow: 1;
  text-align: right;
}
livechat-tags-input .livechat-tags-searched.livechat-empty::after {
  display: none;
}
livechat-tags-input .livechat-tag,
livechat-tags-input .livechat-tag-searched {
  width: auto;
  height: 24px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  padding: 0 var(--tag-padding-horizontal);
  font-size: 14px;
  list-style: none;
  border-radius: 3px;
  margin: 0 3px 3px 0;
  transition: 0.3s filter;
}
livechat-tags-input .livechat-tag .livechat-tag-close,
livechat-tags-input .livechat-tag-searched .livechat-tag-close {
  display: block;
  width: 12px;
  height: 12px;
  line-height: 12px;
  text-align: center;
  font-size: 10px;
  margin-left: var(--tag-padding-horizontal);
  color: var(--primary, var(--mainColor));
  border-radius: 50%;
  background: #fff;
  cursor: pointer;
}
livechat-tags-input .livechat-tag .livechat-tag-close::before,
livechat-tags-input .livechat-tag-searched .livechat-tag-close::before {
  content: "✕";
}
livechat-tags-input .livechat-tag, livechat-tags-input .livechat-tag:active, livechat-tags-input .livechat-tag:focus,
livechat-tags-input .livechat-tag-searched,
livechat-tags-input .livechat-tag-searched:active,
livechat-tags-input .livechat-tag-searched:focus {
  color: #fff;
  background-color: var(--primary, var(--mainColor));
}
livechat-tags-input .livechat-tag .livechat-tag-close, livechat-tags-input .livechat-tag:active .livechat-tag-close, livechat-tags-input .livechat-tag:focus .livechat-tag-close,
livechat-tags-input .livechat-tag-searched .livechat-tag-close,
livechat-tags-input .livechat-tag-searched:active .livechat-tag-close,
livechat-tags-input .livechat-tag-searched:focus .livechat-tag-close {
  color: var(--primary, var(--mainColor));
}
livechat-tags-input .livechat-tag:hover,
livechat-tags-input .livechat-tag-searched:hover {
  color: #fff;
  background-color: var(--fg-400, var(--mainHoverColor));
}
livechat-tags-input .livechat-tag:hover .livechat-tag-close,
livechat-tags-input .livechat-tag-searched:hover .livechat-tag-close {
  color: var(--fg-400, var(--mainHoverColor));
}
livechat-tags-input .livechat-tag[disabled], livechat-tags-input .livechat-tag.disabled,
livechat-tags-input .livechat-tag-searched[disabled],
livechat-tags-input .livechat-tag-searched.disabled {
  cursor: default;
  color: #fff;
  background-color: var(--input-border-color, var(--inputBorderColor));
}
livechat-tags-input .livechat-tag[disabled] .livechat-tag-close, livechat-tags-input .livechat-tag.disabled .livechat-tag-close,
livechat-tags-input .livechat-tag-searched[disabled] .livechat-tag-close,
livechat-tags-input .livechat-tag-searched.disabled .livechat-tag-close {
  color: var(--input-border-color, var(--inputBorderColor));
}
livechat-tags-input .livechat-tag .livechat-tag-name,
livechat-tags-input .livechat-tag-searched .livechat-tag-name {
  margin-top: 3px;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
  max-width: 250px;
}
livechat-tags-input .livechat-tags.livechat-unfocused .livechat-tag {
  filter: opacity(50%) grayscale(80%);
}

/*
 * SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* We are disabling stylelint-disable custom-property-pattern so we can use Peertube var without warnings. */
/* stylelint-disable custom-property-pattern */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
livechat-token-list table {
  width: 100%;
  table-layout: fixed;
  text-align: center;
}
livechat-token-list table tr {
  border: 1px var(--bg-secondary-400, var(--greyBackgroundColor)) solid;
}
livechat-token-list table td,
livechat-token-list table th {
  word-wrap: break-word;
  vertical-align: top;
  padding: 5px 7px;
}
livechat-token-list table td:last-child {
  vertical-align: middle;
  min-width: 28px;
}
livechat-token-list table td:last-child > input:not([type=checkbox]),
livechat-token-list table td:last-child textarea {
  min-width: 150px;
}
livechat-token-list table tbody tr:nth-child(odd) {
  background-color: var(--bg-secondary-300, var(--greySecondaryBackgroundColor));
}
livechat-token-list table tr th:first-child,
livechat-token-list table tr th:last-child {
  width: 50px;
}
livechat-token-list table label {
  font-weight: inherit;
}
livechat-token-list .livechat-create-token {
  line-height: 19px;
  padding: 4px;
  border: 0;
  font-weight: 600;
  border-radius: 3px !important;
  text-align: center;
  cursor: pointer;
  font-size: 15px;
  background-color: var(--bs-green);
}
livechat-token-list .livechat-create-token, livechat-token-list .livechat-create-token:active, livechat-token-list .livechat-create-token:focus {
  color: #fff;
  background-color: rgb(63.7604651163, 228.1953488372, 12.3046511628);
}
livechat-token-list .livechat-create-token:focus, livechat-token-list .livechat-create-token.focus-visible {
  box-shadow: 0 0 0 0.2rem rgb(113.1674418605, 245.1255813953, 71.8744186047);
}
livechat-token-list .livechat-create-token:hover {
  color: #fff;
  background-color: rgb(75.688372093, 242.5162790698, 23.4837209302);
}
livechat-token-list .livechat-create-token[disabled], livechat-token-list .livechat-create-token.disabled {
  cursor: default;
  color: #fff;
  background-color: var(--input-border-color, var(--inputBorderColor));
}
livechat-token-list .livechat-revoke-token {
  line-height: 19px;
  padding: 4px;
  border: 0;
  font-weight: 600;
  border-radius: 3px !important;
  text-align: center;
  cursor: pointer;
  font-size: 15px;
  background-color: var(--bs-orange);
}
livechat-token-list .livechat-revoke-token, livechat-token-list .livechat-revoke-token:active, livechat-token-list .livechat-revoke-token:focus {
  color: #fff;
  background-color: var(--primary, var(--mainColor));
}
livechat-token-list .livechat-revoke-token:focus, livechat-token-list .livechat-revoke-token.focus-visible {
  box-shadow: 0 0 0 0.2rem var(--mainHoverColor);
}
livechat-token-list .livechat-revoke-token:hover {
  color: #fff;
  background-color: var(--fg-400, var(--mainHoverColor));
}
livechat-token-list .livechat-revoke-token[disabled], livechat-token-list .livechat-revoke-token.disabled {
  cursor: default;
  color: #fff;
  background-color: var(--input-border-color, var(--inputBorderColor));
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
#peertube-plugin-livechat-container {
  display: flex;
  flex-direction: column;
  height: 100%;
}
#peertube-plugin-livechat-container .chatroom .box-flyout .chatroom-body .occupants {
  min-width: min(200px, 50%);
}

/* Note: livechat-viewer-mode-content (the form where anonymous users can
    choose nickname or log in with external account), can be something like
    ~180px height (at time of writing).
    We must ensure that the px height limit for converse-muc and converse-root is
    always higher than livechat-viewer-mode-content max size.
  Note: We also must ensure that when the user has choosen its nickname, and there is an
    ongoing poll, the user can see the chat when the poll is folded.
*/
#peertube-plugin-livechat-container converse-root {
  display: block;
  border: 1px solid black;
  min-height: max(30vh, 300px);
  height: 100%;
  min-width: min(400px, 25vw);
}
#peertube-plugin-livechat-container converse-root converse-muc {
  min-height: max(30vh, 300px);
}
@media screen and (orientation: portrait) and (width <= 767px) {
  #peertube-plugin-livechat-container converse-root {
    /* On small screen, and when portrait mode, we are giving the chat more vertical space.
        It should go under the video.
     */
    min-height: max(50vh, 300px);
  }
  #peertube-plugin-livechat-container converse-root converse-muc {
    min-height: max(50vh, 300px);
  }
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
.peertube-plugin-livechat-buttons,
.livechat-mini-muc-bar-buttons {
  align-items: center;
  display: flex;
  flex-flow: row nowrap;
  justify-content: flex-end;
  padding-right: 12px !important;
}

.peertube-plugin-livechat-button {
  align-items: center;
  display: flex;
  flex-direction: row;
  height: 36px !important;
  margin: 5px !important;
  padding: 2px !important;
}
.peertube-plugin-livechat-button svg {
  height: auto;
}

.peertube-plugin-livechat-buttons-open .peertube-plugin-livechat-button,
.livechat-mini-muc-bar-buttons .peertube-plugin-livechat-button {
  height: 18px !important;
  margin: 2px !important;
  padding: 1px !important;
}

.peertube-plugin-livechat-buttons-cloned {
  display: none;
}

[peertube-plugin-livechat-state=initializing] {
  display: none;
}

[peertube-plugin-livechat-state=open] .peertube-plugin-livechat-button-open {
  display: none;
}

[peertube-plugin-livechat-state=closed] .peertube-plugin-livechat-button-promote,
[peertube-plugin-livechat-state=closed] .peertube-plugin-livechat-button-close {
  display: none;
}

[peertube-plugin-livechat-state]:not([peertube-plugin-livechat-state=open]) .peertube-plugin-livechat-multi-button-main {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
  margin-right: 0 !important;
}
[peertube-plugin-livechat-state]:not([peertube-plugin-livechat-state=open]) .peertube-plugin-livechat-multi-button-secondary {
  border-radius: 0 !important;
  margin-right: 0 !important;
  margin-left: 0 !important;
  border-left: 1px solid currentcolor;
}
[peertube-plugin-livechat-state]:not([peertube-plugin-livechat-state=open]) .peertube-plugin-livechat-multi-button-last-secondary {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  margin-left: 0 !important;
  border-left: 1px solid currentcolor;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* stylelint-disable custom-property-pattern */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
livechat-channel-tabs {
  display: block;
  /* See Peertube sub-menu-h1 mixin */
  margin-bottom: 30px;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* stylelint-disable custom-property-pattern */
livechat-configuration-section-header {
  margin-top: 3rem;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
  These are styles to apply for the channel configuration pages.
*/
.peertube-plugin-livechat-configuration {
  /* Channel configuration page */
  /* Channel selection page */
}
.peertube-plugin-livechat-configuration h1 {
  padding-top: 40px;
  /* See Peertube sub-menu-h1 mixin */
  font-size: 1.3rem;
  border-bottom: 2px solid var(--bg-secondary-400, var(--greyBackgroundColor));
  padding-bottom: 15px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-channel-info {
  /* stylelint-disable-next-line value-keyword-case */
  color: var(--fg, var(--mainForegroundColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-channel-info span:first-child {
  /* See Peertube .video-channel-display-name */
  font-weight: 600;
  font-size: 18px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-channel-info span:not(:first-child) {
  /* See Peertube .video-channel-name */
  margin-left: 5px;
  font-size: 14px;
  color: #777272;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel h2 {
  text-transform: uppercase;
  color: var(--primary, var(--mainColor));
  font-weight: 700;
  font-size: 1rem;
  margin-bottom: 10px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy {
  line-height: 19px;
  padding: 4px 13px;
  border: 0;
  font-weight: 600;
  border-radius: 3px !important;
  text-align: center;
  cursor: pointer;
  font-size: 15px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit], .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit]:active, .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit]:focus,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit]:active,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit]:focus,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button:active,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button:focus,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy:active,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy:focus {
  color: #fff;
  background-color: var(--primary, var(--mainColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit]:hover,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit]:hover,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button:hover,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy:hover {
  color: #fff;
  background-color: var(--fg-400, var(--mainHoverColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit][disabled], .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=submit].disabled,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit][disabled],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=submit].disabled,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button[disabled],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-configuration-actions button.disabled,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy[disabled],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel .peertube-plugin-livechat-tags-input-copy.disabled {
  cursor: default;
  color: #fff;
  background-color: var(--input-border-color, var(--inputBorderColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset] {
  background-color: var(--bg-secondary-400, var(--greyBackgroundColor));
  color: var(--fg-400, var(--greyForegroundColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset]:hover, .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset]:active, .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset]:focus, .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset][disabled], .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset].disabled,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset]:hover,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset]:active,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset]:focus,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset][disabled],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset].disabled {
  color: var(--fg-400, var(--greyForegroundColor));
  background-color: var(--bg-secondary-300, var(--greySecondaryBackgroundColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset][disabled], .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel input[type=reset].disabled,
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset][disabled],
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-channel button[type=reset].disabled {
  cursor: default;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels {
  list-style-type: none;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li {
  align-items: center;
  gap: 15px;
  /* See Peertube row-blocks mixin, used in video-channel */
  display: flex;
  min-height: 130px;
  padding-bottom: 20px;
  margin-bottom: 20px;
  /* stylelint-disable-next-line value-keyword-case */
  border-bottom: 1px solid var(--inputBorderColor);
}
@media screen and (max-width: 800px) {
  .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li {
    flex-direction: column;
    height: auto;
    align-items: center;
  }
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .avatar {
  /* See Peertube CSS, class avatar and avatar-80 */
  width: 80px;
  height: 80px;
  min-width: 80px;
  min-height: 80px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .avatar.channel {
  border-radius: 5px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .avatar.initial {
  /* See Peertube actor-avatar.component.scss */
  background-color: #3c2109;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--initialFontSize);
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .avatar.initial.gray {
  background-color: #939393;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info {
  flex-grow: 1;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a {
  /* See Peertube .video-channel-names */
  width: fit-content;
  display: flex;
  align-items: baseline;
  /* stylelint-disable-next-line value-keyword-case */
  color: var(--fg, var(--mainForegroundColor));
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a:hover, .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a:focus, .peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a:active {
  text-decoration: none !important;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a:focus:not(.focus-visible) {
  outline: none !important;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a div:first-child {
  /* See Peertube .video-channel-display-name */
  font-weight: 600;
  font-size: 18px;
}
.peertube-plugin-livechat-configuration.peertube-plugin-livechat-configuration-home ul.peertube-plugin-livechat-configuration-home-channels li .peertube-plugin-livechat-configuration-home-info a div:not(:first-child) {
  /* See Peertube .video-channel-name */
  margin-left: 5px;
  font-size: 14px;
  color: #777272;
}
.peertube-plugin-livechat-configuration .peertube-livechat-emojis-col-sn {
  width: 30%;
}
.peertube-plugin-livechat-configuration .peertube-livechat-emojis-col-file {
  width: 65%;
}
.peertube-plugin-livechat-configuration .peertube-plugin-livechat-configuration-actions {
  margin-bottom: 1rem;
  text-align: right;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
/* stylelint-disable custom-property-pattern */
.peertube-plugin-livechat-admin-firewall h1 {
  padding-top: 40px;
  /* See Peertube sub-menu-h1 mixin */
  font-size: 1.3rem;
  border-bottom: 2px solid var(--bg-secondary-400, var(--greyBackgroundColor));
  padding-bottom: 15px;
}
.peertube-plugin-livechat-admin-firewall textarea[name^=_content_] {
  min-height: 10rem;
}
.peertube-plugin-livechat-admin-firewall input[type=submit],
.peertube-plugin-livechat-admin-firewall input[type=reset],
.peertube-plugin-livechat-admin-firewall button[type=submit],
.peertube-plugin-livechat-admin-firewall button[type=reset] {
  line-height: 19px;
  padding: 4px 13px;
  border: 0;
  font-weight: 600;
  border-radius: 3px !important;
  text-align: center;
  cursor: pointer;
  font-size: 15px;
}
.peertube-plugin-livechat-admin-firewall input[type=submit], .peertube-plugin-livechat-admin-firewall input[type=submit]:active, .peertube-plugin-livechat-admin-firewall input[type=submit].active, .peertube-plugin-livechat-admin-firewall input[type=submit]:focus,
.peertube-plugin-livechat-admin-firewall button[type=submit],
.peertube-plugin-livechat-admin-firewall button[type=submit]:active,
.peertube-plugin-livechat-admin-firewall button[type=submit].active,
.peertube-plugin-livechat-admin-firewall button[type=submit]:focus {
  color: var(--on-primary, #fff);
  background-color: var(--primary, var(--mainColor));
  border: 1px solid var(--primary, var(--mainColor));
}
.peertube-plugin-livechat-admin-firewall input[type=submit]:hover,
.peertube-plugin-livechat-admin-firewall button[type=submit]:hover {
  color: var(--on-primary, #fff);
  background-color: var(--primary-400, var(--mainHoverColor));
}
.peertube-plugin-livechat-admin-firewall input[type=submit][disabled],
.peertube-plugin-livechat-admin-firewall button[type=submit][disabled] {
  pointer-events: none;
  opacity: 0.6;
}
.peertube-plugin-livechat-admin-firewall input[type=reset],
.peertube-plugin-livechat-admin-firewall button[type=reset] {
  color: var(--fg, var(--mainForegroundColor));
  background-color: transparent;
  border: 1px solid var(--bg-secondary-500, var(--inputBorderColor)) !important;
}
.peertube-plugin-livechat-admin-firewall input[type=reset]:active, .peertube-plugin-livechat-admin-firewall input[type=reset].active, .peertube-plugin-livechat-admin-firewall input[type=reset]:focus, .peertube-plugin-livechat-admin-firewall input[type=reset]:focus-visible,
.peertube-plugin-livechat-admin-firewall button[type=reset]:active,
.peertube-plugin-livechat-admin-firewall button[type=reset].active,
.peertube-plugin-livechat-admin-firewall button[type=reset]:focus,
.peertube-plugin-livechat-admin-firewall button[type=reset]:focus-visible {
  color: var(--fg, var(--mainForegroundColor));
  background-color: var(--bg-secondary-500, var(--inputBorderColor));
  border-color: var(--bg-secondary-500, var(--inputBorderColor));
}
.peertube-plugin-livechat-admin-firewall input[type=reset]:hover,
.peertube-plugin-livechat-admin-firewall button[type=reset]:hover {
  color: var(--fg, var(--mainForegroundColor));
  background-color: var(--bg-secondary-450, var(--inputBorderColor));
}
.peertube-plugin-livechat-admin-firewall input[type=reset][disabled],
.peertube-plugin-livechat-admin-firewall button[type=reset][disabled] {
  pointer-events: none;
  opacity: 0.8;
}
.peertube-plugin-livechat-admin-firewall .peertube-livechat-admin-firewall-col-name {
  width: 25%;
}
.peertube-plugin-livechat-admin-firewall .peertube-livechat-admin-firewall-col-content {
  width: 65%;
}

/*
 * SPDX-FileCopyrightText: 2024-2025 John Livingston <https://www.john-livingston.fr/>
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */
table.peertube-plugin-livechat-prosody-list-rooms {
  border: 1px solid black;
  margin: 5px 0;
}

table.peertube-plugin-livechat-prosody-list-rooms tr:nth-child(odd) {
  background-color: #eee;
}

table.peertube-plugin-livechat-prosody-list-rooms tr:nth-child(even) {
  background-color: #fff;
}

table.peertube-plugin-livechat-prosody-list-rooms th {
  /* stylelint-disable-next-line custom-property-pattern */
  background-color: var(--fg-400, var(--mainHoverColor));
  border: 1px solid black;
  /* stylelint-disable-next-line custom-property-pattern */
  color: var(--mainBackgroundColor);
  padding: 4px 5px;
}

table.peertube-plugin-livechat-prosody-list-rooms td {
  border: 1px solid #555;
  color: black;
  padding: 4px 5px;
}

/*# sourceMappingURL=style.css.map */
/* No @import here — it leaks into PeerTube's global stylesheet. */

/* Watch-page "Shop Related Products" button → the full storefront (/p/shop).
   Styled like the left-nav Publish button: gold, white text, rounded corners. */
.vapr-shop-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 12px;
  background: var(--mainColor, #BBA777);
  color: #fff;
  padding: 8px 16px;
  border-radius: 8px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}
.vapr-shop-btn:hover { color: #fff; }
/* 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); }
.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%;
}
.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; }
}
/* 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) {
  body.gh-display-ads-page .gh-display-ad-leaderboard {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100%;
    padding: 8px 12px 4px;
    box-sizing: border-box;
    background: transparent;
  }

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

  body.gh-display-ads-page .gh-display-ad-leaderboard img {
    display: block;
    width: 320px;
    max-width: 100%;
    height: auto;
    max-height: 50px;
    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;
}
/* The site-wide admin broadcast banner eats ~110px, over a fifth of a phone
   screen, which breaks an immersive feed. Hidden ONLY while the Shorts route is
   mounted (body class added/removed by the plugin), never site-wide. */
body.gh-shorts-route .broadcast-message { display: none !important; }

/* Mobile pins the feed to the viewport instead of flowing it under the site
   header. The old in-flow root sized itself as (viewport - header offset); when
   that offset measured large the slides hit the 240px floor and three shorts
   shared one screen. Fixed positioning removes the offset from the maths. */
body.gh-shorts-mobile { overflow: hidden !important; }
body.gh-shorts-mobile .gh-shorts-root {
  position: fixed;
  left: 0;
  right: 0;
  /* Starts below the site header, which is position:fixed at z-index 17500 —
     higher than anything sane we can set here, so it wins the paint no matter
     what and a feed at top:0 renders underneath it. The offset is published in
     px by the plugin from the header's own measured height. */
  top: var(--gh-shorts-top, 0px);
  bottom: 0;
  z-index: 10000;
}

/* peertube-plugin-shorts — vertical swipe feed */

.gh-shorts-root {
  padding: 0 !important;
  margin: 0 !important;
}

/* Fixed-height column so the header takes space and the feed fills the rest.
   dvh (not vh) so mobile browser chrome collapsing doesn't jump the layout. */
.gh-shorts-root {
  display: flex;
  flex-direction: column;
  /* --gh-shorts-h is an explicit pixel height published by the plugin from
     visualViewport. Deliberately NOT calc(100dvh - x): if dvh is unsupported the
     declaration is dropped, height falls back to auto, and every slide collapses
     to content height — which is how three shorts ended up sharing one screen on
     Chrome mobile. The vh value is only a pre-measurement fallback. */
  height: var(--gh-shorts-h, 80vh);
  min-height: 0;
  position: relative;
}

/* ============================================================
   DESKTOP: letterboxed player, rail OUTSIDE the video, chevrons.
   ============================================================ */
.gh-shorts-root[data-layout="desktop"] .gh-shorts-frame {
  border-radius: 14px;
  overflow: hidden;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.55);
}
/* Push the whole 9:16 stage left of centre so the rail has room beside it. */
.gh-shorts-root[data-layout="desktop"] .gh-shorts-slide {
  gap: 16px;
}
/* The rail lives at the right edge of the 9:16 overlay, so shifting it by its own
   width plus a gap lands it just OUTSIDE the video, which is what desktop wants.
   No overflow:hidden on the overlay or it would be clipped away. */
.gh-shorts-root[data-layout="desktop"] .gh-shorts-rail {
  transform: translateX(calc(100% + 20px));
  gap: 26px;
}
.gh-shorts-root[data-layout="desktop"] .gh-shorts-act {
  position: relative;
  background: rgba(255, 255, 255, 0.12);
  border-radius: 50%;
  width: 48px;
  height: 48px;
  min-width: 48px;
  min-height: 48px;
  justify-content: center;
  backdrop-filter: blur(6px);
  filter: none;                              /* rail is off-video: no drop shadow */
}
.gh-shorts-root[data-layout="desktop"] .gh-shorts-act:hover {
  background: rgba(255, 255, 255, 0.22);
}
.gh-shorts-root[data-layout="desktop"] .gh-shorts-act .gh-shorts-count {
  position: absolute;
  bottom: -18px;
  font-size: 12px;
  white-space: nowrap;
}

/* Prev/next chevrons, far right of the stage */
.gh-shorts-nav {
  position: absolute;
  right: 32px;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  flex-direction: column;
  gap: 14px;
  z-index: 4;
}
.gh-shorts-navbtn {
  width: 48px;
  height: 48px;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
  color: #E8E6E1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 140ms ease, transform 120ms cubic-bezier(0.16, 1, 0.3, 1);
}
.gh-shorts-navbtn:hover { background: rgba(255, 255, 255, 0.24); transform: scale(1.06); }
.gh-shorts-navbtn:focus-visible { outline: 2px solid #BBA777; outline-offset: 3px; }

/* ============================================================
   MOBILE: full-bleed video, rail overlaid, swipe only.
   ============================================================ */
.gh-shorts-root[data-layout="mobile"] .gh-shorts-frame {
  width: 100%;
  height: 100%;
  aspect-ratio: auto;                       /* fill, don't letterbox */
}
/* Full-bleed "cover" for an iframe. object-fit does nothing here, so size the
   frame by aspect-ratio with min-width/min-height and let it overflow, cropping
   the overhang. Without this a 9:16 embed letterboxes inside the taller phone
   frame and you get black bars top and bottom. */
.gh-shorts-root[data-layout="mobile"] .gh-shorts-frame { overflow: hidden; }
.gh-shorts-root[data-layout="mobile"] .gh-shorts-frame iframe {
  position: absolute;
  inset: auto;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  aspect-ratio: 9 / 16;
  min-width: 100%;
  min-height: 100%;
  width: auto;
  height: auto;
}
.gh-shorts-root[data-layout="mobile"] .gh-shorts-overlay {
  aspect-ratio: auto;
  width: 100%;
}
.gh-shorts-root[data-layout="mobile"] .gh-shorts-bottom {
  padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px));
}
.gh-shorts-root[data-layout="mobile"] .gh-shorts-act {
  min-width: 52px;
  min-height: 52px;                          /* bigger thumb targets */
}
.gh-shorts-root[data-layout="mobile"] .gh-shorts-nav { display: none; }

.gh-shorts-feed {
  height: var(--gh-shorts-h, 80vh);
  min-height: 0;
  overflow-y: scroll;
  scroll-snap-type: y mandatory;
  overscroll-behavior-y: contain;
  background: #0B0B0D;
  scrollbar-width: none;
  padding-bottom: env(safe-area-inset-bottom, 0);
}
.gh-shorts-feed::-webkit-scrollbar { display: none; }

.gh-shorts-slide {
  height: var(--gh-shorts-h, 80vh);
  scroll-snap-align: start;
  scroll-snap-stop: always;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
}

/* 9:16 stage, centered, letterboxed on wide viewports */
.gh-shorts-frame {
  position: relative;
  height: 100%;
  aspect-ratio: 9 / 16;
  max-width: 100%;
  background: #000;
}
.gh-shorts-frame iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

/* Overlay — aligned to the 9:16 frame. The embed runs with controlBar=0, so
   this layer owns all interaction: tap to pause, progress, and the rail. */
.gh-shorts-overlay {
  position: absolute;
  inset: 0;
  margin: auto;
  height: 100%;
  aspect-ratio: 9 / 16;
  max-width: 100%;
  pointer-events: none;
}

/* Full-bleed tap target. The iframe swallows its own clicks, so pause/resume
   has to live on a layer above it. */
.gh-shorts-tap {
  position: absolute;
  inset: 0;
  pointer-events: auto;
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0;
  cursor: pointer;
  appearance: none;
}
.gh-shorts-tap:focus-visible {
  outline: 2px solid #BBA777;
  outline-offset: -4px;
}

/* Transient play/pause confirmation in the centre */
.gh-shorts-pulse {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) scale(0.8);
  color: rgba(255, 255, 255, 0.92);
  opacity: 0;
  pointer-events: none;
  filter: drop-shadow(0 2px 10px rgba(0, 0, 0, 0.6));
}
.gh-shorts-pulse.show { animation: gh-shorts-pulse 620ms cubic-bezier(0.16, 1, 0.3, 1); }
@keyframes gh-shorts-pulse {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.7); }
  25%  { opacity: 1; transform: translate(-50%, -50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.25); }
}

/* Bottom row: meta on the left, rail on the right, over a legibility scrim */
.gh-shorts-bottom {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  padding: 96px 12px 24px;
  box-sizing: border-box;
  pointer-events: none;
  /* Deeper and taller than it looks like it needs: bright outdoor footage was
     washing out the creator name on a real iPhone. */
  background: linear-gradient(to top,
    rgba(0, 0, 0, 0.82) 0%,
    rgba(0, 0, 0, 0.55) 42%,
    rgba(0, 0, 0, 0) 100%);
}

/* Playback progress, pinned to the bottom edge of the 9:16 frame */
/* Scrubbable. content-box + background-clip paints only the 3px track while the
   padding above it stays a transparent grab area, so the bar is hittable without
   looking chunky. */
.gh-shorts-progress {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  padding-top: 13px;
  box-sizing: content-box;
  background: rgba(255, 255, 255, 0.22);
  background-clip: content-box;
  pointer-events: auto;
  cursor: pointer;
  touch-action: none;                  /* let us own the horizontal drag */
  transition: height 120ms ease;
}
.gh-shorts-progress:hover,
.gh-shorts-progress.scrubbing { height: 6px; }
.gh-shorts-progress.scrubbing > i { transition: none; }
.gh-shorts-progress > i {
  display: block;
  height: 100%;
  width: 0;
  background: #BBA777;
  transition: width 200ms linear;
}

/* Right-hand action rail (Reels/Shorts style) */
.gh-shorts-rail {
  pointer-events: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  flex: 0 0 auto;
}
.gh-shorts-act {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: #fff;
  min-width: 44px;                   /* WCAG touch target */
  min-height: 44px;
  justify-content: center;
  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.7));
  transition: transform 120ms cubic-bezier(0.16, 1, 0.3, 1), color 120ms ease;
}
.gh-shorts-act:hover { transform: scale(1.08); }
.gh-shorts-act:active { transform: scale(0.94); }
.gh-shorts-act:disabled { opacity: 0.5; cursor: default; }
.gh-shorts-act:focus-visible {
  outline: 2px solid #BBA777;
  outline-offset: 4px;
  border-radius: 8px;
}
.gh-shorts-act.liked { color: #D40000; }
.gh-shorts-act.liked svg { fill: currentColor; }

/* Double-tap heart burst */
.gh-shorts-burst {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) scale(0.4);
  color: #D40000;
  opacity: 0;
  pointer-events: none;
  filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.55));
}
.gh-shorts-burst.show { animation: gh-shorts-burst 780ms cubic-bezier(0.16, 1, 0.3, 1); }
@keyframes gh-shorts-burst {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.4); }
  30%  { opacity: 1; transform: translate(-50%, -50%) scale(1.05); }
  55%  { opacity: 1; transform: translate(-50%, -50%) scale(0.95); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.3); }
}

/* Creator row: avatar + name, then Subscribe */
.gh-shorts-crow {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}
.gh-shorts-sub {
  pointer-events: auto;
  flex: 0 0 auto;
  border: 0;
  border-radius: 100px;
  padding: 7px 16px;
  background: #E8E6E1;
  color: #0B0B0D;
  font: 700 13px/1 "DM Sans", system-ui, sans-serif;
  cursor: pointer;
  transition: background 140ms ease, color 140ms ease, transform 120ms cubic-bezier(0.16, 1, 0.3, 1);
}
.gh-shorts-sub:hover { background: #fff; transform: scale(1.04); }
.gh-shorts-sub:active { transform: scale(0.97); }
.gh-shorts-sub.subscribed {
  background: rgba(255, 255, 255, 0.18);
  color: #E8E6E1;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35);
}
.gh-shorts-sub:focus-visible { outline: 2px solid #BBA777; outline-offset: 3px; }
.gh-shorts-count {
  font: 600 12px/1 "DM Sans", system-ui, sans-serif;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
}

/* Left column: title above the creator row */
.gh-shorts-meta {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
  flex: 1 1 auto;                    /* take the width the rail doesn't need */
}
.gh-shorts-title {
  pointer-events: none;
  margin: 0;
  font: 600 14px/1.35 "DM Sans", system-ui, sans-serif;
  color: #fff;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.75);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Screen-reader status for like/copy results */
.gh-shorts-live {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
}

.gh-shorts-retry {
  margin-top: 14px;
  padding: 10px 20px;
  border: 0;
  border-radius: 6px;
  background: #BBA777;
  color: #0B0B0D;
  font: 600 14px/1 "DM Sans", system-ui, sans-serif;
  cursor: pointer;
}
.gh-shorts-retry:hover { background: #D4C49A; }

.gh-shorts-creator {
  pointer-events: auto;
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: 100%;
  min-width: 0;
  text-decoration: none;
  color: #fff;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
}
.gh-shorts-avatar {
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: #252530 center / cover no-repeat;
  border: 2px solid rgba(255, 255, 255, 0.85);
  display: flex;
  align-items: center;
  justify-content: center;
  font: 600 16px/1 "DM Sans", system-ui, sans-serif;
  color: #E8E6E1;
}
.gh-shorts-cmeta { display: flex; flex-direction: column; min-width: 0; }
.gh-shorts-cname {
  font: 700 15px/1.2 "DM Sans", system-ui, sans-serif;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.gh-shorts-chandle { font-size: 12px; color: rgba(255, 255, 255, 0.82); }

.gh-shorts-loading,
.gh-shorts-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  min-height: 0;
  color: #E8E6E1;
  text-align: center;
  padding: 0 24px;
}
.gh-shorts-empty h2 { font-size: 22px; margin: 0 0 8px; }
.gh-shorts-empty p { color: #A0A0AC; max-width: 420px; }

/* ---- Conditional unmute cue -------------------------------------------------
   Browsers refuse unmuted autoplay until the viewer has engaged with the domain
   (Chrome grants it via Media Engagement Index on desktop; never on mobile web).
   YouTube solves this with a visible unmute control on BOTH platforms. This is
   that: shown only while audio is actually blocked, gone permanently once sound
   is on. It sits above the tap layer so it unmutes rather than pausing. */
.gh-shorts-unmute {
  position: absolute;
  top: 14px;
  left: 14px;
  z-index: 3;
  display: none;                       /* revealed by .gh-shorts-muted on the root */
  align-items: center;
  gap: 8px;
  pointer-events: auto;
  border: 0;
  border-radius: 100px;
  padding: 9px 14px 9px 11px;
  background: rgba(255, 255, 255, 0.94);
  color: #0B0B0D;
  cursor: pointer;
  font: 700 13px/1 "DM Sans", system-ui, sans-serif;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.45);
  transition: transform 120ms cubic-bezier(0.16, 1, 0.3, 1), background 140ms ease;
}
.gh-shorts-root.gh-shorts-muted .gh-shorts-unmute { display: inline-flex; }
.gh-shorts-unmute:hover { background: #fff; transform: scale(1.04); }
.gh-shorts-unmute:active { transform: scale(0.97); }
.gh-shorts-unmute:focus-visible { outline: 2px solid #BBA777; outline-offset: 3px; }
.gh-shorts-unmute svg { width: 20px; height: 20px; flex: 0 0 auto; }

/* Mobile mirrors YouTube's larger, icon-forward treatment */
.gh-shorts-root[data-layout="mobile"] .gh-shorts-unmute {
  top: 12px;
  left: 12px;
  padding: 11px 16px 11px 13px;
  font-size: 14px;
}

/* ---- Description ----------------------------------------------------------
   Hidden until asked for. It used to render clamped to one line, but
   -webkit-line-clamp does not hold against pre-wrap text on WebKit, so on iOS a
   long description covered the whole screen on load. Now it simply is not there
   until the toggle is pressed. */
.gh-shorts-descbtn {
  pointer-events: auto;
  align-self: flex-start;
  background: none;
  border: 0;
  padding: 0;
  color: rgba(255, 255, 255, 0.92);
  font: 700 13px/1.3 "DM Sans", system-ui, sans-serif;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
  cursor: pointer;
}
.gh-shorts-descbtn:hover { text-decoration: underline; }
.gh-shorts-desc {
  pointer-events: auto;
  color: rgba(255, 255, 255, 0.9);
  font: 400 13px/1.45 "DM Sans", system-ui, sans-serif;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  overflow-y: auto;
  max-height: 30vh;
  max-width: 100%;
  background: rgba(0, 0, 0, 0.45);
  border-radius: 8px;
  padding: 8px 10px;
}
.gh-shorts-desc[hidden] { display: none; }

.gh-shorts-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  pointer-events: auto;
}
.gh-shorts-tag {
  color: #BBA777;
  font: 600 13px/1.3 "DM Sans", system-ui, sans-serif;
  text-decoration: none;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
}
.gh-shorts-tag:hover { color: #D4C49A; text-decoration: underline; }

/* Fullscreen is a desktop affordance: a phone short already fills the screen,
   and YouTube's mobile web has no fullscreen control either. */
.gh-shorts-root[data-layout="mobile"] .gh-shorts-fs { display: none; }

/* In fullscreen the slide becomes the whole screen; keep the stage centred. */
.gh-shorts-slide:fullscreen { background: #0B0B0D; }
.gh-shorts-slide:fullscreen .gh-shorts-frame { height: 100%; }

/* ---- Comments -------------------------------------------------------------
   Desktop: a panel beside the feed. Mobile: a bottom sheet. Playback continues
   behind it either way — the point is not losing the feed to open a thread. */
.gh-shorts-comments {
  position: absolute;
  z-index: 6;
  display: flex;
  flex-direction: column;
  background: #17171D;
  color: #E8E6E1;
  box-shadow: 0 -8px 40px rgba(0, 0, 0, 0.55);
}
.gh-shorts-comments[hidden] { display: none; }

/* desktop: right-hand panel, full height */
.gh-shorts-root[data-layout="desktop"] .gh-shorts-comments {
  top: 0;
  right: 0;
  bottom: 0;
  width: 400px;
  border-left: 1px solid #252530;
}
/* mobile: bottom sheet */
.gh-shorts-root[data-layout="mobile"] .gh-shorts-comments {
  left: 0;
  right: 0;
  bottom: 0;
  height: 68%;
  border-radius: 16px 16px 0 0;
  padding-bottom: env(safe-area-inset-bottom, 0);
}

.gh-shorts-chead {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  border-bottom: 1px solid #252530;
  flex: 0 0 auto;
}
.gh-shorts-ctitle { font: 700 15px/1 "DM Sans", system-ui, sans-serif; }
.gh-shorts-ccount { color: #A0A0AC; font: 400 13px/1 "Space Mono", monospace; }
.gh-shorts-cclose {
  margin-left: auto;
  background: none;
  border: 0;
  color: #A0A0AC;
  font-size: 26px;
  line-height: 1;
  cursor: pointer;
  padding: 0 4px;
}
.gh-shorts-cclose:hover { color: #E8E6E1; }

.gh-shorts-clist { flex: 1; min-height: 0; overflow-y: auto; padding: 8px 0; }
.gh-shorts-cempty { color: #6A6A78; text-align: center; padding: 28px 16px; font-size: 14px; }

.gh-shorts-c { display: flex; gap: 10px; padding: 10px 16px; }
.gh-shorts-cav {
  flex: 0 0 auto;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: #252530 center / cover no-repeat;
  display: flex;
  align-items: center;
  justify-content: center;
  font: 600 13px/1 "DM Sans", system-ui, sans-serif;
  color: #E8E6E1;
}
.gh-shorts-cbody { min-width: 0; }
.gh-shorts-cmeta { display: flex; gap: 6px; flex-wrap: wrap; align-items: baseline;
  font: 400 12px/1.3 "DM Sans", system-ui, sans-serif; color: #6A6A78; }
.gh-shorts-cmeta b { color: #E8E6E1; font-size: 13px; }
.gh-shorts-ctext { font: 400 14px/1.45 "DM Sans", system-ui, sans-serif; white-space: pre-wrap;
  overflow-wrap: anywhere; margin-top: 2px; }
.gh-shorts-creplies { display: inline-block; margin-top: 4px; color: #00A3E0; font-size: 12px; }

.gh-shorts-cform { flex: 0 0 auto; display: flex; gap: 8px; padding: 12px 16px;
  border-top: 1px solid #252530; align-items: flex-end; }
.gh-shorts-cinput {
  flex: 1;
  resize: none;
  background: #0B0B0D;
  border: 1px solid #252530;
  border-radius: 8px;
  color: #E8E6E1;
  padding: 9px 11px;
  font: 400 14px/1.4 "DM Sans", system-ui, sans-serif;
}
.gh-shorts-cinput:focus { outline: none; border-color: #BBA777; }
.gh-shorts-csend {
  border: 0; border-radius: 8px; padding: 10px 15px; cursor: pointer;
  background: #BBA777; color: #0B0B0D; font: 700 13px/1 "DM Sans", system-ui, sans-serif;
}
.gh-shorts-csend:disabled { opacity: 0.45; cursor: default; }
.gh-shorts-clogin { color: #00A3E0; font-size: 14px; text-decoration: none; }
.gh-shorts-clogin:hover { text-decoration: underline; }

/* Desktop: shift the stage left so the panel doesn't cover the video. */
.gh-shorts-root[data-layout="desktop"].gh-shorts-comments-open .gh-shorts-feed { margin-right: 400px; }
.gh-shorts-root[data-layout="desktop"].gh-shorts-comments-open .gh-shorts-nav { right: 432px; }

/* ---- Overflow menu --------------------------------------------------------- */
.gh-shorts-more {
  position: absolute;
  top: 14px;
  right: 14px;
  z-index: 3;
  pointer-events: auto;
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.42);
  color: #fff;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  backdrop-filter: blur(4px);
}
.gh-shorts-more:hover { background: rgba(0, 0, 0, 0.62); }
.gh-shorts-more:focus-visible { outline: 2px solid #BBA777; outline-offset: 2px; }

.gh-shorts-menu {
  position: absolute;
  top: 56px;
  right: 14px;
  z-index: 5;
  pointer-events: auto;
  min-width: 176px;
  background: #17171D;
  border: 1px solid #252530;
  border-radius: 10px;
  padding: 6px;
  box-shadow: 0 10px 34px rgba(0, 0, 0, 0.6);
  display: flex;
  flex-direction: column;
}
.gh-shorts-menu[hidden] { display: none; }
.gh-shorts-menu [role="menuitem"] {
  background: none;
  border: 0;
  text-align: left;
  padding: 10px 12px;
  border-radius: 6px;
  color: #E8E6E1;
  font: 400 14px/1 "DM Sans", system-ui, sans-serif;
  cursor: pointer;
}
.gh-shorts-menu [role="menuitem"]:hover { background: #1E1E26; }
.gh-shorts-menu [role="menuitem"]:focus-visible { outline: 2px solid #BBA777; outline-offset: -2px; }

/* View count / duration under the title */
.gh-shorts-stats {
  pointer-events: none;
  font: 400 12px/1.3 "Space Mono", ui-monospace, monospace;
  color: rgba(255, 255, 255, 0.78);
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
}

/* Replies */
.gh-shorts-creplies {
  display: inline-block;
  margin-top: 5px;
  background: none;
  border: 0;
  padding: 0;
  color: #00A3E0;
  font: 600 12px/1 "DM Sans", system-ui, sans-serif;
  cursor: pointer;
}
.gh-shorts-creplies:hover { text-decoration: underline; }
.gh-shorts-creplies::before { content: "\25BE  "; display: inline-block; transition: transform 120ms ease; }
.gh-shorts-creplies[aria-expanded="true"]::before { content: "\25B4  "; }
.gh-shorts-cchildren { margin-top: 6px; border-left: 2px solid #252530; padding-left: 10px; }
.gh-shorts-cchildren[hidden] { display: none; }
.gh-shorts-creply { padding: 8px 0; }

/* ?diag=1 only — never rendered for normal visitors. */
.gh-shorts-diag {
  position: fixed;
  top: env(safe-area-inset-top, 0);
  left: 0;
  right: 0;
  z-index: 2147483647;
  margin: 0;
  padding: 8px 10px;
  font: 11px/1.35 "Space Mono", ui-monospace, Menlo, monospace;
  white-space: pre;
  color: #4ADE80;
  background: rgba(0, 0, 0, 0.88);
  border-bottom: 1px solid #BBA777;
  pointer-events: none;
  overflow-x: auto;
}

/* Hide the embed until it has a real frame. PeerTube's player lays out at 16:9
   for a beat before the video's own dimensions arrive, which flashed a
   letterboxed crop on every slide change. Fades in rather than popping. */
.gh-shorts-root[data-layout="mobile"] .gh-shorts-slide .gh-shorts-frame iframe {
  opacity: 0;
  transition: opacity 140ms ease-out;
}
.gh-shorts-root[data-layout="mobile"] .gh-shorts-slide.gh-shorts-ready .gh-shorts-frame iframe {
  opacity: 1;
}

/* ---- shared <video> (replaces the per-slide iframe) ----------------------
   One element for the whole feed, moved into the active slide. object-fit
   actually works on a real video element — it never did on an iframe, which is
   why the old cover crop needed aspect-ratio and negative offsets. */
.gh-shorts-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #0B0B0D;
  /* No opacity gate. Pooled elements are already decoded by the time a slide
     reaches the viewport, so fading them in would add a flash rather than hide
     one. */
}
/* Desktop letterboxes rather than crops, so the whole 9:16 frame is visible
   beside the rail. */
.gh-shorts-root[data-layout="desktop"] .gh-shorts-video { object-fit: contain; }

/* Plain black behind the players. The per-slide still image that used to live
   here is gone: with a three-element pool the next short is already decoded and
   rendering in its own slide, so there is no gap to cover — and a 16:9 still
   under a 9:16 video only ever read as an awkward flash. */
.gh-shorts-frame { background-color: #0B0B0D; }

/* Collapsing the left menu hides every entry's label, but that behaviour is not
   PeerTube's — it lives in the left-menu-discounts plugin and is keyed on ITS
   `lmd-internal-quick` class. addNav() strips all `lmd*` classes off our cloned
   entry on purpose, so that plugin never treats the Shorts link as one of its
   own; the side effect was that the label kept its rule-free default and the
   word "Shorts" stayed visible beside icon-only neighbours whenever the menu was
   collapsed. Own the rule here rather than borrowing another plugin's class, so
   this cannot break when that plugin renames or drops it.

   `body.menu-open` is the state PeerTube itself toggles (verified live: present
   expanded, absent collapsed), so the absence of it is the honest signal. */
body:not(.menu-open) #gh-shorts-nav .menu-link > span {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
/*
 * VAPR™ Products picker — v2 design (see design/design-spec.md).
 *
 * Every selector starts at `.gh-vapr` (the panel root) or `.gh-vapr-entry` (the
 * lateral-menu clone, which by definition lives outside the panel), so nothing
 * leaks into PeerTube's own UI. No global resets, no unscoped bare-tag rules.
 *
 * Type: Lato for everything, to match the host video-manage UI. Space Mono is
 * the only exception and only on the counter and prices. Greyhive shows up in
 * colour — gold #BBA777 and blue #00A3E0 — not in the typeface. Always dark.
 *
 * Breakpoints are CONTAINER-relative: the panel sits beside PeerTube's lateral
 * menu, so viewport width is not panel width. `container-type: inline-size` on
 * the root plus @container queries at 640px and 860px.
 *
 * Fonts (Lato, Space Mono) are injected at runtime by the client script when the
 * picker mounts (injectFonts) — NOT @import-ed here, because PeerTube folds this
 * file into its site-wide global stylesheet and an @import would make every
 * visitor's browser contact Google Fonts, not just picker users.
 */

/* ── Injected lateral-menu entry ─────────────────────────────────────────────
   A clone of a native menu entry, so it inherits the menu's own layout. These
   values are measured from the native item: the VAPR™ tab must read as one of
   PeerTube's own tabs. --gh-* vars are panel-scoped, so literals here. */
.gh-vapr-entry {
  padding: 8px 0 8px 24px;
  font-family: Lato, sans-serif;
  font-size: 16px;
  line-height: 24px;
  letter-spacing: normal;
  text-transform: none;
  font-weight: 500;
  color: #D9D9D9;
  cursor: pointer;
}
.gh-vapr-entry span { color: inherit; font-weight: inherit; }
.gh-vapr-entry.active { font-weight: 700; color: #E6E6E6; }
/* Icon behaves like native menu icons: inherits the link colour when idle, turns
   dark on the gold active circle (native selected icons are dark-on-gold), so it
   no longer vanishes into the circle when VAPR™ Products is selected. */
.gh-vapr-entry .global-icon-wrapper svg { stroke: #BBA777; }
.gh-vapr-entry.active .global-icon-wrapper svg { stroke: #0B0B0D; }

/* ── Panel root ──────────────────────────────────────────────────────────── */
.gh-vapr {
  /* Neutrals track PeerTube's own theme so the panel reads like a native manage
     page (its bg was a cooler #0B0B0D vs the page's warm #14110f). Greyhive
     literals stay as fallbacks if a theme var is ever absent. Accents (gold/blue)
     stay branded — PeerTube's own accent here is already the same gold. */
  --gh-bg: var(--mainBackgroundColor, #0B0B0D);
  --gh-bg-2: var(--input-bg, #111115);
  --gh-card: var(--bg-secondary-450, #17171D);
  --gh-card-hover: var(--bg-secondary-500, #1E1E26);
  --gh-surface: var(--bg-secondary-500, #252530);
  --gh-gold: #BBA777;
  --gh-gold-hover: #D4C49A;
  --gh-gold-muted: #8A7C58;
  --gh-blue: #00A3E0;
  --gh-blue-hover: #33B8E8;
  --gh-blue-muted: #007FB0;
  --gh-text: var(--fg, #E8E6E1);
  --gh-text-mid: var(--fg-300, #A0A0AC);
  /* Decoration only — on a #17171D card this lands near 3.2:1, under AA. Every
     text node uses --gh-text or --gh-text-mid (~6.4:1). */
  --gh-text-dim: #6A6A78;
  --gh-green: #4ADE80;
  --gh-red: #D40000;
  --gh-ease: cubic-bezier(0.16, 1, 0.3, 1);

  container-type: inline-size;
  position: relative;
  background: transparent; /* content sits flat on the page, like native manage pages — no boxed card */
  color: var(--gh-text);
  font-family: Lato, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  box-sizing: border-box;
}
.gh-vapr *,
.gh-vapr *::before,
.gh-vapr *::after { box-sizing: border-box; }

/* Grain overlay removed: the panel is transparent flat content now, no boxed
   background to texture. */

/* ── Header + counter ────────────────────────────────────────────────────── */
.gh-vapr .gh-vapr-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
}
.gh-vapr .gh-vapr-title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-weight: 700;
  font-size: 32px; /* match native manage-page section titles (e.g. "Customization") */
  letter-spacing: 0.01em;
  line-height: 1.1;
  margin: 0;
  color: var(--gh-text);
}
/* The menu glyph carried onto the page beside the title, in the title's white so
   it reads as part of the heading (the gold lives on the menu glyph). */
.gh-vapr .gh-vapr-title-icon { display: inline-flex; flex: none; color: var(--gh-text); }
.gh-vapr .gh-vapr-title-icon svg { width: 26px; height: 26px; }
.gh-vapr .gh-vapr-sub { margin: 4px 0 0; font-size: 13px; color: var(--gh-text-mid); }

/* "See selections" — jumps to the Featured/Related buckets. Solid near-black fill
   with gold text + border so it stands out; shows the live "(N/20)" count. */
.gh-vapr .gh-vapr-see-selections {
  margin: 12px 0 0;
  padding: 7px 14px;
  font-family: Lato, sans-serif;
  font-size: 13px;
  font-weight: 600;
  background: #0B0B0D;
  color: var(--gh-gold);
  border: 1px solid var(--gh-gold);
  border-radius: 6px;
  cursor: pointer;
  transition: background 200ms var(--gh-ease), color 200ms var(--gh-ease);
}
.gh-vapr .gh-vapr-see-selections:hover { background: var(--gh-gold); color: #0B0B0D; }

/* Results pager — 4 rows per page, Prev/Next below the grid. */
.gh-vapr .gh-vapr-pager { display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 20px; }
.gh-vapr .gh-vapr-pager-btn {
  padding: 8px 16px;
  font-family: Lato, sans-serif;
  font-size: 13px;
  font-weight: 600;
  background: transparent;
  color: var(--gh-blue);
  border: 1px solid var(--gh-blue);
  border-radius: 6px;
  cursor: pointer;
  transition: background 200ms var(--gh-ease), color 200ms var(--gh-ease);
}
.gh-vapr .gh-vapr-pager-btn:hover:not(:disabled) { background: var(--gh-blue); color: #0B0B0D; }
.gh-vapr .gh-vapr-pager-btn:disabled { color: var(--gh-text-dim); border-color: var(--gh-surface); cursor: not-allowed; }
.gh-vapr .gh-vapr-pager-info { font-family: 'Space Mono', monospace; font-size: 13px; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-counter { text-align: right; }
.gh-vapr .gh-vapr-counter-n {
  font-family: 'Space Mono', monospace;
  font-size: 20px;
  font-weight: 700;
  color: var(--gh-text);
}
.gh-vapr .gh-vapr-counter-tally {
  font-family: 'Space Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--gh-text-mid);
  margin-top: 3px;
}
.gh-vapr .gh-vapr-counter--loading .gh-vapr-counter-n { font-size: 13px; font-weight: 400; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-counter--full .gh-vapr-counter-n { color: var(--gh-red); font-size: 22px; }
.gh-vapr .gh-vapr-counter--full .gh-vapr-counter-tally { color: var(--gh-text-mid); }

.gh-vapr .gh-vapr-note {
  margin: 16px 0 0;
  padding: 10px 14px;
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-gold-muted);
  border-radius: 8px;
  font-size: 13px;
  color: var(--gh-gold);
}

/* ── Search ──────────────────────────────────────────────────────────────── */
.gh-vapr .gh-vapr-search {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 20px;
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-surface);
  border-radius: 8px;
  padding: 4px 16px;
}
.gh-vapr .gh-vapr-search--loading { border-color: var(--gh-card-hover); opacity: 0.5; }
.gh-vapr .gh-vapr-search--busy { border-color: var(--gh-blue); }
.gh-vapr .gh-vapr-search-glyph { flex: none; font-size: 18px; line-height: 1; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-search--busy .gh-vapr-search-glyph { color: var(--gh-blue); }
.gh-vapr .gh-vapr-search-input {
  flex: 1;
  min-width: 0;
  background: transparent;
  border: none;
  outline: none;
  color: var(--gh-text);
  font-family: Lato, sans-serif;
  font-size: 14px;
  padding: 9px 0;
}
.gh-vapr .gh-vapr-search-input::placeholder { color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-search-status { flex: none; font-size: 12px; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-search-status--failed { color: var(--gh-red); }

/* ── Alert rows: gold warning, green success, red failure ────────────────── */
.gh-vapr .gh-vapr-alert {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  margin-top: 18px;
  padding: 14px 16px;
  background: var(--gh-card);
  border: 1px solid var(--gh-surface);
  border-radius: 8px;
}
.gh-vapr .gh-vapr-alert--warn { border-color: var(--gh-gold-muted); }
.gh-vapr .gh-vapr-alert--ok { background: var(--gh-bg-2); border-color: var(--gh-green); }
.gh-vapr .gh-vapr-alert--error { border-color: var(--gh-red); }
.gh-vapr .gh-vapr-alert-glyph {
  flex: none;
  width: 19px;
  height: 19px;
  margin-top: 1px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  font-size: 11px;
  font-weight: 700;
}
.gh-vapr .gh-vapr-alert--warn .gh-vapr-alert-glyph { color: var(--gh-gold); border: 1px solid var(--gh-gold-muted); }
.gh-vapr .gh-vapr-alert--ok .gh-vapr-alert-glyph { background: var(--gh-green); color: var(--gh-bg); }
.gh-vapr .gh-vapr-alert--error .gh-vapr-alert-glyph { color: var(--gh-red); border: 1.5px solid var(--gh-red); }
.gh-vapr .gh-vapr-alert-title { font-size: 14px; font-weight: 600; color: var(--gh-text); }
.gh-vapr .gh-vapr-alert-body { font-size: 13px; color: var(--gh-text-mid); margin-top: 3px; }
/* Diagnostics: a collapsed native <details>. Space Mono is reserved for the
   counter and prices, so this stays Lato. Colours are explicit on the element,
   the summary, AND the line — a PeerTube host rule on `details`/`summary` must
   not be able to hand any of them near-black on this dark card. */
.gh-vapr .gh-vapr-diag { margin-top: 10px; font-size: 12px; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-diag-summary {
  color: var(--gh-text-mid);
  font-size: 12px;
  cursor: pointer;
  width: fit-content;
}
.gh-vapr .gh-vapr-diag-summary:hover { color: var(--gh-text); }
.gh-vapr .gh-vapr-diag-line {
  color: var(--gh-text-mid);
  font-size: 11px;
  margin-top: 6px;
  word-break: break-word;
}
.gh-vapr .gh-vapr-alert-actions { display: flex; gap: 10px; margin-top: 12px; flex-wrap: wrap; }

/* ── Results area ────────────────────────────────────────────────────────── */
.gh-vapr .gh-vapr-results { margin-top: 24px; }

.gh-vapr .gh-vapr-grid {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 24px;
}

/* Prompt / zero-results / error blocks share one centred shell. */
.gh-vapr .gh-vapr-block {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  text-align: center;
  padding: 48px 24px;
  border: 1px dashed var(--gh-card-hover);
  border-radius: 10px;
}
.gh-vapr .gh-vapr-block--zero { border-color: var(--gh-surface); }
.gh-vapr .gh-vapr-block--error {
  border: 1px solid var(--gh-red);
  background: var(--gh-card);
  padding: 36px 24px;
}
.gh-vapr .gh-vapr-block-glyph {
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border: 1.5px solid var(--gh-surface);
  border-radius: 50%;
  font-size: 15px;
  color: var(--gh-text-mid);
}
.gh-vapr .gh-vapr-block--zero .gh-vapr-block-glyph { border-color: var(--gh-gold-muted); color: var(--gh-gold-muted); }
.gh-vapr .gh-vapr-block--error .gh-vapr-block-glyph { border-color: var(--gh-red); color: var(--gh-red); font-weight: 700; }
.gh-vapr .gh-vapr-block-title {
  font-weight: 700;
  font-size: 19px;
  letter-spacing: 0.01em;
  color: var(--gh-text);
  max-width: 34ch;
}
.gh-vapr .gh-vapr-block--idle .gh-vapr-block-title { font-size: 16px; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-block-body { font-size: 13px; color: var(--gh-text-mid); max-width: 50ch; }

/* Skeletons — loading and searching. Structure, not spinners. */
.gh-vapr .gh-vapr-skel {
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-card);
  border-radius: 10px;
  overflow: hidden;
}
.gh-vapr .gh-vapr-skel-tile { aspect-ratio: 4 / 3; background: var(--gh-bg); }
.gh-vapr .gh-vapr-skel-lines { padding: 12px; }
.gh-vapr .gh-vapr-skel-bar {
  height: 12px;
  background: var(--gh-card);
  border-radius: 4px;
}
.gh-vapr .gh-vapr-skel-bar + .gh-vapr-skel-bar { margin-top: 8px; }
/* Bucket-row skeleton: same surface, one bar, chip-height padding. */
.gh-vapr .gh-vapr-skel-row .gh-vapr-skel-bar { margin: 16px 12px; }

/* ── Product card ────────────────────────────────────────────────────────── */
.gh-vapr .gh-vapr-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
  border-radius: 10px;
  overflow: visible;
  transition: border-color 0.3s var(--gh-ease);
}
.gh-vapr .gh-vapr-card:hover { border-color: var(--gh-surface); }
.gh-vapr .gh-vapr-card--dim .gh-vapr-tile { opacity: 0.55; }
.gh-vapr .gh-vapr-card--dim .gh-vapr-card-name { color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-card--selected { border-color: var(--gh-gold-muted); }

/* Whole product image on a lighter tile, never cropped. The striped fallback is
   a CSS gradient so a missing photo still reads as a tile. */
.gh-vapr .gh-vapr-tile {
  aspect-ratio: 4 / 3;
  border-radius: 9px 9px 0 0;
  overflow: hidden;
  background: var(--gh-bg-2);
  background-image: repeating-linear-gradient(135deg, #17171D 0 6px, #111115 6px 12px);
  display: grid;
  place-items: center;
}
.gh-vapr .gh-vapr-tile-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.gh-vapr .gh-vapr-card-body {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 12px 12px 14px;
  min-width: 0;
}
.gh-vapr .gh-vapr-brand,
.gh-vapr-modal-body .gh-vapr-brand {
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gh-gold-muted);
}
.gh-vapr .gh-vapr-card-name {
  font-size: 13px;
  font-weight: 600;
  line-height: 1.35;
  color: var(--gh-text);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
/* Wraps rather than overflows: a long price beside the Featured switch runs out
   of room on a 6-up card. */
.gh-vapr .gh-vapr-card-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
}
.gh-vapr .gh-vapr-price {
  font-family: 'Space Mono', monospace;
  font-size: 14px;
  font-weight: 700;
  color: var(--gh-gold);
}
/* Retailer / source catalog. Quiet by design with one catalog; the dot + name
   read as a scannable source marker once several retailers are live. */
.gh-vapr .gh-vapr-retailer-tag {
  margin-top: 8px;
  display: inline-flex;
  align-items: center;
  align-self: flex-start;
  gap: 6px;
  max-width: 100%;
  font-size: 11px;
  letter-spacing: 0.02em;
  color: var(--gh-text-mid);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.gh-vapr .gh-vapr-retailer-tag::before {
  content: "";
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--gh-gold-muted);
  flex: 0 0 auto;
}

/* Add — blue outline, fills on hover. Disabled at cap and when already picked. */
.gh-vapr .gh-vapr-add {
  flex: none;
  font-family: Lato, sans-serif;
  font-size: 12px;
  font-weight: 600;
  background: transparent;
  color: var(--gh-blue);
  border: 1px solid var(--gh-blue);
  border-radius: 6px;
  padding: 6px 11px;
  cursor: pointer;
  transition: background 0.25s var(--gh-ease), color 0.25s var(--gh-ease);
}
.gh-vapr .gh-vapr-add:hover:not(:disabled) { background: var(--gh-blue); color: var(--gh-bg); }
/* Only the cap disables Add now: a selected card carries the Featured switch
   where the dead `Added ✓` used to sit. */
.gh-vapr .gh-vapr-add:disabled { cursor: not-allowed; background: var(--gh-bg-2); color: var(--gh-text-mid); border-color: var(--gh-surface); }

/* "See details" — every result card, every viewport. Opens the shared
   quick-look modal (below); the card itself does nothing else on click. */
.gh-vapr .gh-vapr-seemore {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  min-height: 44px;
  padding: 9px;
  font-family: Lato, sans-serif;
  font-size: 12px;
  font-weight: 600;
  background: var(--gh-surface);
  color: var(--gh-text);
  border: 1px solid var(--gh-surface);
  border-radius: 6px;
  cursor: pointer;
}
.gh-vapr .gh-vapr-seemore:hover { background: var(--gh-card-hover); }

/* Detail fields, shared by the result card's "See details" and the quick-look
   modal it opens. The modal is body-mounted (see the "Quick-look modal"
   block), so these selectors also match there — one set of styles, two mount
   points. Both surfaces state their text colour outright: inheriting it let a
   PeerTube host rule paint the block near-black on a near-black card. */
.gh-vapr .gh-vapr-detail-img,
.gh-vapr-modal-body .gh-vapr-detail-img {
  display: block;
  width: 100%;
  aspect-ratio: 21 / 9;
  object-fit: contain;
  background: var(--gh-bg-2);
  border-radius: 8px;
}
.gh-vapr .gh-vapr-detail-meta,
.gh-vapr-modal-body .gh-vapr-detail-meta { display: flex; align-items: center; gap: 8px; margin-top: 11px; flex-wrap: wrap; }
.gh-vapr .gh-vapr-pill,
.gh-vapr-modal-body .gh-vapr-pill {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--gh-text-mid);
  border: 1px solid var(--gh-surface);
  border-radius: 100px;
  padding: 3px 9px;
}
.gh-vapr .gh-vapr-detail-name,
.gh-vapr-modal-body .gh-vapr-detail-name { font-size: 15px; font-weight: 700; line-height: 1.3; color: var(--gh-text); margin-top: 6px; }
.gh-vapr .gh-vapr-detail-prices,
.gh-vapr-modal-body .gh-vapr-detail-prices { display: flex; align-items: baseline; gap: 10px; margin-top: 8px; }
.gh-vapr .gh-vapr-detail-price,
.gh-vapr-modal-body .gh-vapr-detail-price { font-family: 'Space Mono', monospace; font-size: 19px; font-weight: 700; color: var(--gh-gold); }
.gh-vapr .gh-vapr-detail-was,
.gh-vapr-modal-body .gh-vapr-detail-was { font-size: 12px; color: var(--gh-text-mid); text-decoration: line-through; }
.gh-vapr .gh-vapr-detail-cat,
.gh-vapr-modal-body .gh-vapr-detail-cat { font-size: 12px; color: var(--gh-text-mid); margin-top: 6px; }
.gh-vapr .gh-vapr-detail-desc,
.gh-vapr-modal-body .gh-vapr-detail-desc {
  font-size: 13px;
  line-height: 1.5;
  color: var(--gh-text-mid);
  margin: 6px 0 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.gh-vapr .gh-vapr-detail-sku,
.gh-vapr-modal-body .gh-vapr-detail-sku {
  font-size: 10px;
  color: var(--gh-text-mid);
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--gh-surface);
}
/* The only outbound link in the panel. A real anchor, 44px. */
.gh-vapr .gh-vapr-retailer,
.gh-vapr-modal-body .gh-vapr-retailer {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-height: 44px;
  margin-top: 10px;
  padding: 11px;
  background: var(--gh-card);
  border: 1px solid var(--gh-surface);
  border-radius: 6px;
  font-size: 12px;
  font-weight: 600;
  color: var(--gh-blue);
  text-decoration: none;
}
.gh-vapr .gh-vapr-retailer:hover,
.gh-vapr-modal-body .gh-vapr-retailer:hover { border-color: var(--gh-blue); background: var(--gh-card-hover); color: var(--gh-blue-hover); }

/* ── Quick-look modal (content only) ─────────────────────────────────────── */
/* The modal's container — `.gh-vapr-modal` (position: fixed + backdrop),
   `.gh-vapr-modal-card`, `-close`, `-handle`, `-grid`/`-image`/`-specs`, and
   the mobile bottom-sheet/reduced-motion media queries — is injected via a
   runtime <style> in document.head instead of living in this declared file.
   PeerTube's plugin-CSS pipeline drops the base `.gh-vapr-modal { position:
   fixed; ... }` rule from a declared stylesheet (confirmed: 0 matching rules
   in the parsed sheet), which left the body-mounted modal rendering with no
   positioning or backdrop. See MODAL_STYLE_CSS in
   client/video-manage-client.js for the container CSS and injectModalStyles().
   The shared .gh-vapr-detail-*/.gh-vapr-retailer/.gh-vapr-pill/.gh-vapr-brand
   dual-selector rules above still apply inside the modal — those survive the
   pipeline — so only the modal-body spacing rules stay declared here. */
.gh-vapr-modal-body { margin-top: 4px; }
.gh-vapr-modal-body .gh-vapr-copy-link { width: 100%; margin-top: 14px; padding: 11px; min-height: 44px; }

/* Modal's own Add action — mirrors the search-result card's .gh-vapr-add
   language (blue outline, fills blue on hover) at the copy-link's sizing. */
.gh-vapr-modal-body .gh-vapr-modal-add {
  width: 100%; margin-top: 14px; padding: 11px; min-height: 44px;
  font-family: Lato, sans-serif; font-size: 14px; font-weight: 700;
  background: transparent; color: var(--gh-blue); border: 1px solid var(--gh-blue);
  border-radius: 8px; cursor: pointer; transition: background .2s var(--gh-ease), color .2s var(--gh-ease);
}
.gh-vapr-modal-body .gh-vapr-modal-add:hover { background: var(--gh-blue); color: #0B0B0D; }
.gh-vapr-modal-body .gh-vapr-modal-add:disabled { background: transparent; color: var(--gh-text-mid); border-color: var(--gh-surface); cursor: default; }
.gh-vapr-modal-body .gh-vapr-modal-add--done:disabled { color: var(--gh-green); border-color: var(--gh-green); }

/* ── One-time Featured hint (above the buckets) ──────────────────────────── */
/* Gold-muted rule on the card surface. Retired by the first star click on
   either surface or by the dismiss ×, and it does not come back. */
.gh-vapr .gh-vapr-hint {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-top: 24px;
  padding: 10px 14px;
  background: var(--gh-card);
  border-left: 3px solid var(--gh-gold-muted);
  border-radius: 0 8px 8px 0;
  font-family: Lato, sans-serif;
  font-size: 13px;
  color: var(--gh-text-mid);
}
.gh-vapr .gh-vapr-hint-text { color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-hint-x {
  flex: none;
  width: 28px;
  height: 28px;
  background: transparent;
  border: 1px solid var(--gh-surface);
  border-radius: 6px;
  color: var(--gh-text-mid);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
}
.gh-vapr .gh-vapr-hint-x:hover { border-color: var(--gh-gold-muted); color: var(--gh-text); }

/* ── Buckets ─────────────────────────────────────────────────────────────── */
/* Featured | Related | VAPR-Selected, in DOM order — the mobile breakpoint
   below collapses this to one column and that DOM order becomes the stack
   order, so it stays Featured, then Related, then VAPR-Selected. */
.gh-vapr .gh-vapr-buckets {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 24px;
  margin-top: 28px;
}
.gh-vapr .gh-vapr-bucket { min-width: 0; }
.gh-vapr .gh-vapr-bucket-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 6px;
}
.gh-vapr .gh-vapr-bucket-label { font-weight: 700; font-size: 15px; letter-spacing: 0.01em; color: var(--gh-gold); }
/* VAPR-Selected is read-only, so its label follows the badge's blue rather
   than the gold the two editable (creator-owned) columns use. */
.gh-vapr .gh-vapr-bucket--readonly .gh-vapr-bucket-label { color: var(--gh-blue); }
.gh-vapr .gh-vapr-bucket-count { font-size: 11px; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-bucket-hint { font-size: 12px; color: var(--gh-text-mid); margin-bottom: 12px; }
.gh-vapr .gh-vapr-chips { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; align-items: start; }
/* Skeleton, empty, note, and undo rows span the full width of the 2-up grid. */
.gh-vapr .gh-vapr-chips > :not(.gh-vapr-chip) { grid-column: 1 / -1; }
.gh-vapr .gh-vapr-chips-empty {
  border: 1px dashed var(--gh-card-hover);
  border-radius: 8px;
  padding: 16px;
  text-align: center;
  font-size: 12px;
  color: var(--gh-text-mid);
}
/* Graceful-degrade note: the carousel fetch failed, so VAPR-selected picks
   are simply absent — not an error state on the whole panel. */
.gh-vapr .gh-vapr-chips-note { font-size: 11px; color: var(--gh-text-mid); margin-top: 8px; }

.gh-vapr .gh-vapr-chip {
  display: flex;
  align-items: center;
  gap: 12px;
  /* Wrap the controls to their own row whenever the chip is too narrow to fit
     the title beside them (a 2-up bucket on a mid-width window, or a mobile
     panel). The title's min-width below is what forces the break, so the title
     is never squeezed to a few characters regardless of screen size. */
  flex-wrap: wrap;
  row-gap: 10px;
  background: var(--gh-card);
  border: 1px solid var(--gh-card-hover);
  border-radius: 8px;
  padding: 10px 12px;
}
.gh-vapr .gh-vapr-chip:hover { background: var(--gh-card-hover); }
.gh-vapr .gh-vapr-chip--featured { border-color: var(--gh-surface); }
.gh-vapr .gh-vapr-chip-thumb {
  flex: none;
  width: 44px;
  height: 44px;
  border-radius: 6px;
  overflow: hidden;
  background: var(--gh-bg-2);
  background-image: repeating-linear-gradient(135deg, #17171D 0 4px, #111115 4px 8px);
}
.gh-vapr .gh-vapr-chip-thumb-img { display: block; width: 100%; height: 100%; object-fit: contain; }
/* min-width is the wrap trigger: the title reserves ~160px, so once thumb +
   title + controls no longer fit, the controls wrap below instead of crushing
   the title. When the controls have wrapped, the title is alone on line 1 and
   grows to the full width. */
.gh-vapr .gh-vapr-chip-main { flex: 1 1 0; min-width: 160px; }
.gh-vapr .gh-vapr-chip-name {
  font-size: 13px;
  font-weight: 600;
  color: var(--gh-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.gh-vapr .gh-vapr-chip-price { font-family: 'Space Mono', monospace; font-size: 12px; color: var(--gh-gold); margin-top: 2px; }

/* Featured = a gold star toggle with a visible label. Unstarred = Related. */
.gh-vapr .gh-vapr-star {
  display: flex;
  align-items: center;
  gap: 6px;
  flex: none;
  background: transparent;
  border: 1px solid var(--gh-surface);
  border-radius: 100px;
  padding: 6px 11px;
  cursor: pointer;
  font-family: Lato, sans-serif;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--gh-text-mid);
}
.gh-vapr .gh-vapr-star:hover { border-color: var(--gh-gold-muted); color: var(--gh-text); }
.gh-vapr .gh-vapr-star[aria-checked="true"] { border-color: var(--gh-gold-muted); color: var(--gh-gold); }
/* The glyph and the label follow the switch, never a host `span` colour rule. */
.gh-vapr .gh-vapr-star-glyph,
.gh-vapr .gh-vapr-star-label { color: inherit; }
.gh-vapr .gh-vapr-star-glyph { font-size: 12px; }
/* Same switch on the result card, so promoting a pick doesn't mean scrolling to
   the buckets first. Tighter, because the card row also carries the price. */
.gh-vapr .gh-vapr-card-row .gh-vapr-star { padding: 6px 9px; font-size: 10px; }
.gh-vapr .gh-vapr-chip-remove {
  flex: none;
  width: 28px;
  height: 28px;
  background: transparent;
  border: 1px solid var(--gh-surface);
  border-radius: 6px;
  color: var(--gh-text-mid);
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
}
.gh-vapr .gh-vapr-chip-remove:hover { border-color: var(--gh-red); color: var(--gh-red); }
/* Controls wrapper: sits inline at the end of the chip on a wide panel; on a
   narrow panel (container query below) it drops to its own row so the title
   keeps the full width instead of being squeezed by the buttons. */
.gh-vapr .gh-vapr-chip-actions { display: flex; align-items: center; gap: 10px; flex: none; }

/* Undo row — holds the removed chip's place in its own bucket for 5s, dashed so
   it reads as a gap rather than a pick. Roughly chip-sized, so the stack barely
   moves when it appears or expires. */
.gh-vapr .gh-vapr-undo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 44px;
  background: var(--gh-bg-2);
  border: 1px dashed var(--gh-surface);
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 13px;
  color: var(--gh-text-mid);
}
.gh-vapr .gh-vapr-undo-text { color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-undo-btn {
  flex: none;
  min-height: 44px;
  background: transparent;
  border: 1px solid var(--gh-blue);
  border-radius: 6px;
  padding: 6px 16px;
  font-family: Lato, sans-serif;
  font-size: 12px;
  font-weight: 600;
  color: var(--gh-blue);
  cursor: pointer;
}
.gh-vapr .gh-vapr-undo-btn:hover:not(:disabled) { background: var(--gh-blue); color: var(--gh-bg); }
.gh-vapr .gh-vapr-undo-btn:disabled { border-color: var(--gh-surface); color: var(--gh-text-mid); cursor: not-allowed; }

/* ── Carousel-origin badge (VAPR-selected chip in the Related bucket) ────── */
/* Still used on a product card's corner (absolute) if one ever needs it again,
   and — via .gh-vapr-chip-badge below — inline in a read-only Related chip. */
.gh-vapr .gh-vapr-carousel-badge {
  position: absolute;
  top: 8px;
  left: 8px;
  z-index: 1;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 3px 9px;
  border-radius: 100px;
}
/* Your own pick — gold, matches the Featured star's colour language. */
.gh-vapr .gh-vapr-carousel-badge--creator { background: var(--gh-gold); color: var(--gh-bg); }
/* VAPR-selected — blue text on a quiet surface: distinct from a creator's own
   gold picks, but not loud enough to outrank them. */
.gh-vapr .gh-vapr-carousel-badge--agent { background: var(--gh-surface); color: var(--gh-blue); border: 1px solid var(--gh-card-hover); }
/* Inline in a chip row (not a card corner): back in normal flow. */
.gh-vapr .gh-vapr-chip .gh-vapr-chip-badge { position: static; flex: none; }
/* Copy link — same shape/behaviour as Add (blue outline, fills on hover). */
.gh-vapr .gh-vapr-copy-link {
  flex: none;
  font-family: Lato, sans-serif;
  font-size: 12px;
  font-weight: 600;
  background: transparent;
  color: var(--gh-blue);
  border: 1px solid var(--gh-blue);
  border-radius: 6px;
  padding: 6px 11px;
  cursor: pointer;
  transition: background 0.25s var(--gh-ease), color 0.25s var(--gh-ease);
}
.gh-vapr .gh-vapr-copy-link:hover:not(:disabled) { background: var(--gh-blue); color: var(--gh-bg); }
.gh-vapr .gh-vapr-copy-link:disabled { cursor: not-allowed; opacity: 0.6; }

/* ── Inline request panel (replaces the results area — never a modal) ────── */
.gh-vapr .gh-vapr-request {
  background: var(--gh-bg-2);
  border: 1px solid var(--gh-surface);
  border-radius: 10px;
  padding: 20px;
}
.gh-vapr .gh-vapr-request-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}
.gh-vapr .gh-vapr-request-title { font-weight: 700; font-size: 18px; letter-spacing: 0.01em; color: var(--gh-text); }
.gh-vapr .gh-vapr-request-sub { font-size: 13px; color: var(--gh-text-mid); margin-top: 3px; }
.gh-vapr .gh-vapr-fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  margin-top: 20px;
}
.gh-vapr .gh-vapr-field { display: flex; flex-direction: column; gap: 7px; }
.gh-vapr .gh-vapr-field--wide { grid-column: 1 / -1; }
.gh-vapr .gh-vapr-field-label { font-size: 12px; font-weight: 600; letter-spacing: 0.03em; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-req { color: var(--gh-red); }
.gh-vapr .gh-vapr-optional { color: var(--gh-text-mid); font-weight: 400; }
.gh-vapr .gh-vapr-input {
  background: var(--gh-card);
  color: var(--gh-text);
  border: 1px solid var(--gh-card-hover);
  border-radius: 6px;
  padding: 11px 13px;
  font-family: Lato, sans-serif;
  font-size: 14px;
  min-height: 44px;
}
.gh-vapr .gh-vapr-input:focus { outline: none; border-color: var(--gh-blue); }
.gh-vapr .gh-vapr-input--area { min-height: 72px; resize: vertical; }
.gh-vapr .gh-vapr-request-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 20px;
}
.gh-vapr .gh-vapr-sla { font-size: 12px; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-request-actions { display: flex; gap: 10px; }

/* ── Buttons ─────────────────────────────────────────────────────────────── */
.gh-vapr .gh-vapr-btn {
  font-family: Lato, sans-serif;
  font-size: 14px;
  font-weight: 600;
  border-radius: 6px;
  padding: 11px 18px;
  min-height: 44px;
  cursor: pointer;
  border: 1px solid var(--gh-surface);
  background: transparent;
  color: var(--gh-text-mid);
  transition: background 0.25s var(--gh-ease), color 0.25s var(--gh-ease), border-color 0.25s var(--gh-ease);
}
.gh-vapr .gh-vapr-btn:hover:not(:disabled) { border-color: var(--gh-text-dim); color: var(--gh-text); }
.gh-vapr .gh-vapr-btn--blue { background: var(--gh-blue); border-color: var(--gh-blue); color: var(--gh-bg); }
.gh-vapr .gh-vapr-btn--blue:hover:not(:disabled) { background: var(--gh-blue-hover); border-color: var(--gh-blue-hover); color: var(--gh-bg); }
.gh-vapr .gh-vapr-btn--blue-outline { border-color: var(--gh-blue); color: var(--gh-blue); }
.gh-vapr .gh-vapr-btn--blue-outline:hover:not(:disabled) { background: var(--gh-blue); border-color: var(--gh-blue); color: var(--gh-bg); }
.gh-vapr .gh-vapr-btn--strong { border-color: var(--gh-text); color: var(--gh-text); }
.gh-vapr .gh-vapr-btn--strong:hover:not(:disabled) { background: var(--gh-text); color: var(--gh-bg); }

/* ── Save footer ─────────────────────────────────────────────────────────── */
.gh-vapr .gh-vapr-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 24px;
  padding-top: 20px;
  border-top: 1px solid var(--gh-card);
}
.gh-vapr .gh-vapr-footer-hint { font-size: 13px; color: var(--gh-text-mid); }
/* Right-side status. Product picks save with the video via the top-right Save,
   so this only echoes state (loading / saving / saved) and, when there are
   unsaved picks, points the creator at that one Save button (gold emphasis). */
.gh-vapr .gh-vapr-savenote { font-size: 12px; letter-spacing: 0.02em; color: var(--gh-text-mid); }
.gh-vapr .gh-vapr-savenote--dirty { color: var(--gh-gold); font-weight: 600; }

/* ── Container breakpoints (panel width, not viewport) ───────────────────── */
@container (max-width: 860px) {
  .gh-vapr .gh-vapr-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@container (max-width: 640px) {
  .gh-vapr .gh-vapr-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .gh-vapr .gh-vapr-tile { aspect-ratio: 1 / 1; }
  .gh-vapr .gh-vapr-buckets { grid-template-columns: minmax(0, 1fr); }
  .gh-vapr .gh-vapr-chips { grid-template-columns: minmax(0, 1fr); }
  .gh-vapr .gh-vapr-fields { grid-template-columns: minmax(0, 1fr); }
  .gh-vapr .gh-vapr-request-actions { flex-direction: column-reverse; width: 100%; }
  .gh-vapr .gh-vapr-request-actions .gh-vapr-btn { width: 100%; }
  /* In a chip, star and remove become 44px icon buttons; the star keeps its
     aria-label. On a card the label stays: a bare glyph beside a price teaches
     a first-time creator nothing. */
  .gh-vapr .gh-vapr-chip .gh-vapr-star { width: 44px; height: 44px; justify-content: center; border-radius: 6px; padding: 0; }
  .gh-vapr .gh-vapr-chip .gh-vapr-star-label { display: none; }
  .gh-vapr .gh-vapr-chip-remove { width: 44px; height: 44px; font-size: 15px; }
  /* The chip already wraps (base rule) once it is too narrow for the controls;
     on a mobile panel we additionally let the title wrap to two lines and give
     the wrapped controls their own full-width row with the Copy button
     stretched to a comfortable touch target. */
  .gh-vapr .gh-vapr-chip-name { white-space: normal; }
  .gh-vapr .gh-vapr-chip-actions { flex: 1 1 100%; }
  .gh-vapr .gh-vapr-chip-actions .gh-vapr-copy-link { flex: 1; }
  .gh-vapr .gh-vapr-chip .gh-vapr-copy-link { width: auto; min-height: 44px; padding: 0 12px; }
  .gh-vapr .gh-vapr-hint-x { width: 44px; height: 44px; font-size: 15px; }
  .gh-vapr .gh-vapr-add { width: 100%; padding: 9px; min-height: 44px; }
  .gh-vapr .gh-vapr-card-row .gh-vapr-star { width: 100%; min-height: 44px; justify-content: center; padding: 9px; font-size: 11px; }
  .gh-vapr .gh-vapr-card-row { flex-direction: column; align-items: stretch; gap: 6px; }
  .gh-vapr .gh-vapr-copy-link { width: 100%; padding: 9px; min-height: 44px; }
}

@media (prefers-reduced-motion: reduce) {
  .gh-vapr .gh-vapr-card,
  .gh-vapr .gh-vapr-add,
  .gh-vapr .gh-vapr-btn { transition: none; }
}
