/* Shared components also arrive in seeded prose and native templates.
   Keep their definitions here: vnc-layout loads on every frontend request. */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.btn {
  display: inline-flex;
  gap: var(--s2);
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: 0 var(--s5);
  border: 1px solid var(--accent);
  border-radius: var(--r-ctl);
  font-family: var(--font-display);
  font-size: 15px;
  font-weight: 500;
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease);
}

/* Doubled class, .btn.btn--primary, is deliberate and load-bearing. The Elementor kit emits
   `.elementor-kit-<id> a { color: var(--e-global-color-vnc_accent) }` at specificity (0,1,1),
   which beats a single-class (0,1,0) rule. Because these buttons are anchors, the kit's global
   link colour won and set the text to the same accent as the button background: a 1:1 contrast
   failure that only appears once the kit globals are actually applied to a site. A component's
   explicit colour must outrank a global element default, so these rules sit at (0,2,0). */
.btn.btn--primary,
.btn.btn--join {
  border-color: var(--accent);
  background: var(--accent);
  color: var(--accent-contrast);
}

.btn.btn--primary:hover,
.btn.btn--join:hover {
  border-color: var(--accent-ink);
  background: var(--accent-ink);
  color: var(--accent-contrast);
}

.btn.btn--quiet {
  border-color: var(--line);
  background: var(--bg);
  color: var(--accent);
}

.btn.btn--quiet:hover {
  border-color: var(--accent);
  color: var(--accent-ink);
}

.btn.btn--chrome {
  border-color: var(--chrome-line);
  background: var(--chrome);
  color: var(--chrome-text);
}

.btn.btn--chrome:hover {
  background: var(--chrome-raise);
  color: var(--chrome-text);
}

.btn--join {
  padding-right: var(--s4);
  padding-left: var(--s4);
  white-space: nowrap;
}

.btn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.dl-panel {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s3);
  width: 100%;
  margin: var(--s5) 0;
}

.dl-panel .btn {
  flex-wrap: wrap;
  max-width: 100%;
  min-height: 44px;
  padding-block: var(--s2);
  overflow-wrap: anywhere;
}

.dl-panel .btn:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.notice {
  margin: var(--s5) 0;
  padding: var(--s4) var(--s5);
  border: 1px solid var(--note-line);
  border-radius: var(--r-card);
  background: var(--note-bg);
  color: var(--note-text);
  font-size: 15px;
  overflow-wrap: anywhere;
}

/* Outrank BuddyPress body #buddypress div (1,0,2) with (1,1,0). */
#buddypress .notice {
  border-radius: var(--r-card);
}

.notice.notice strong {
  color: var(--note-text);
}

/* Component link colours outrank prose and Elementor global anchor defaults. */
.notice.notice a {
  color: var(--note-text);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

.notice--info {
  border-color: var(--accent);
  background: var(--accent-wash);
  color: var(--text);
}

.notice--info.notice--info strong,
.notice--info.notice--info a {
  color: var(--accent-ink);
}

.notice--warning {
  border-color: var(--danger);
  background: var(--danger-wash);
  color: var(--text);
}

.notice--warning.notice--warning strong,
.notice--warning.notice--warning a {
  color: var(--danger);
}

.notice a:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.grid {
  display: grid;
  gap: var(--s5);
}

.grid--2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.card,
.vnc-commercial-card.card.e-con,
.vnc-composition-grid > .elementor-widget.card {
  border: 1px solid var(--line);
  border-radius: var(--r-card);
  background: var(--bg);
  padding: var(--s5);
}

/* Match .wrap gutters while letting Elementor retain its boxed inner container. */
.vnc-page-section.e-con {
  --container-max-width: 100%;
  --padding-top: 0;
  --padding-bottom: 0;
  --padding-left: var(--s5);
  --padding-right: var(--s5);
  width: 100%;
  max-width: var(--max);
  margin-inline: auto;
  padding: 0 var(--s5);
}

/* Keep vertical rhythm on the outer container, above the kit and base section. */
.vnc-page-section.vnc-page-section--band-s5.e-con {
  --padding-top: var(--s5);
  --padding-bottom: var(--s8);
  padding-block: var(--s5) var(--s8);
}

.vnc-page-section.vnc-page-section--band-flush.e-con {
  --padding-top: 0;
  --padding-bottom: var(--s8);
  padding-block: 0 var(--s8);
}

.vnc-page-section.vnc-page-section--page-head.e-con {
  --padding-top: var(--s6);
  --padding-bottom: var(--s5);
  padding-block: var(--s6) var(--s5);
}

.vnc-page-section.e-con > .e-con-inner {
  padding: 0;
  min-width: 0;
}

/* Elementor's .e-con display and child widths otherwise defeat .grid. */
.vnc-composition-grid.grid.e-con {
  display: grid;
  gap: var(--s5);
  padding: 0;
  align-items: stretch;
}

.vnc-composition-grid.grid--3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.vnc-composition-grid.grid--2,
.elementor-widget-vnc_community_group_list .group-list.vnc-group-directory {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.vnc-composition-grid > .elementor-widget {
  min-width: 0;
  width: 100%;
}

:is(.vnc-route-grid > .elementor-widget > .elementor-widget-container, .vnc-route-grid > .elementor-widget:not(:has(> .elementor-widget-container))),
.vnc-route-grid > .elementor-widget .prose {
  height: 100%;
}

/* Prose emits no article for an unavailable card; remove its empty grid cell. */
.vnc-route-grid > .elementor-widget-vnc_prose:not(:has(.route-card)) {
  display: none;
}

.vnc-section-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s3);
}

.prose .vnc-section-head h2,
.vnc-commercial-card .prose > h2:first-child {
  margin: 0;
  padding: 0;
  border: 0;
}

.vnc-route-grid .route-card > h3,
.vnc-composition-grid > .card .prose > h3:first-child {
  margin-top: 0;
}

.vnc-commercial-card.card.e-con {
  padding: var(--s5);
  gap: var(--s5);
  align-items: center;
}

.vnc-commercial-card > .elementor-widget-vnc_prose {
  flex: 1 1 260px;
  min-width: 0;
}

.vnc-commercial-card > .elementor-widget-vnc_button {
  width: auto;
}

/* REF-03 F1: grid items are Elementor widget wrappers, not the anchors. */
.vnc-404-grid.grid.e-con {
  row-gap: var(--s3);
}

.vnc-404-grid > .elementor-widget:first-child {
  grid-column: 1 / -1;
}

.vnc-404-head.e-con {
  padding-block: var(--s6) var(--s5);
}

.vnc-404-head .dl-panel.e-con {
  padding: 0;
  justify-content: flex-start;
}

.vnc-group-directory .meta-strip,
.vnc-group-directory .latest-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--s2) var(--s4);
  color: var(--muted);
}

.vnc-group-directory .latest-meta {
  font-size: 13px;
  gap: var(--s2);
}

.vnc-group-directory .latest-meta time {
  font-family: var(--font-mono);
}

.vnc-group-directory .latest-meta .avatar {
  width: 24px;
  height: 24px;
}

.vnc-group-directory .group-card {
  min-width: 0;
  overflow-wrap: anywhere;
}

@media (max-width: 899px) {
  .vnc-404-grid.grid.e-con {
    row-gap: var(--s2);
  }

  .grid.grid--2 {
    grid-template-columns: minmax(0, 1fr);
  }

  .vnc-composition-grid.grid--3,
  .elementor-widget-vnc_community_group_list .group-list.vnc-group-directory {
    grid-template-columns: minmax(0, 1fr);
  }

  .vnc-page-section.e-con {
    --padding-left: var(--s4);
    --padding-right: var(--s4);
    padding-inline: var(--s4);
  }
}

/* Pure-layout Elementor library templates consumed through the Template widget. */
.vnc-layout-band {
  display: block;
  padding-block: var(--s8);
}

/* Home bands span the viewport and outrank Elementor's container kit padding. */
.home .vnc-layout-band.e-con {
  padding-block: var(--s8);
  padding-inline: 0;
}

/* REF-03 P5a: remove only the outer callout band's top padding. */
.home .vnc-layout-band.vnc-layout-band--callout.e-con {
  padding-top: 0;
}

.vnc-layout-band--panel {
  background: var(--bg-raise);
  border-block: 1px solid var(--line);
}

.vnc-layout-band__inner {
  inline-size: 100%;
  max-inline-size: var(--max);
  margin-inline: auto;
  padding-inline: var(--s5);
}

.vnc-layout-band__inner > .elementor-widget-heading + .elementor-widget-text-editor {
  margin-block-start: var(--s3);
}

.vnc-layout-band__inner > .elementor-widget-text-editor {
  max-inline-size: var(--readcol);
}

/* Elementor containers default to 10px on each side; the prototype's 760px
   reading measure is the usable content width, not the padded outer box. */
.vnc-reading-template .doc-grid > .vnc-doc-reading.e-con,
.vnc-reading-template .doc-grid > .vnc-doc-rail.e-con {
  --padding-top: 0;
  --padding-right: 0;
  --padding-bottom: 0;
  --padding-left: 0;
  padding: 0;
}

.vnc-layout-cta {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--s5) var(--s7);
  align-items: center;
  padding-block: var(--s6);
  border: 1px solid var(--line);
  border-radius: var(--r-card);
  background: var(--bg-raise);
}

.vnc-layout-cta__copy {
  min-inline-size: 0;
}

.vnc-layout-cta__copy > .elementor-widget-heading + .elementor-widget-text-editor {
  margin-block-start: var(--s2);
}

.vnc-layout-cta__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s3);
  justify-content: flex-end;
}

.vnc-layout-cta__actions .elementor-button,
.vnc-layout-discuss__action .elementor-button {
  min-block-size: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--accent);
  border-radius: var(--r-ctl);
  padding: var(--s2) var(--s4);
  background: var(--accent);
  color: var(--accent-contrast);
  font-weight: 600;
  text-decoration: none;
}

.vnc-layout-cta__secondary .elementor-button {
  border-color: var(--line);
  background: var(--bg);
  color: var(--text);
}

.vnc-layout-cta__actions .elementor-button:hover,
.vnc-layout-discuss__action .elementor-button:hover {
  border-color: var(--accent-ink);
  background: var(--accent-ink);
  color: var(--accent-contrast);
}

.vnc-layout-cta__secondary .elementor-button:hover {
  border-color: var(--accent);
  background: var(--bg);
  color: var(--accent-ink);
}

.vnc-layout-cta__actions .elementor-button:focus-visible,
.vnc-layout-discuss__action .elementor-button:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.vnc-layout-discuss {
  display: block;
  overflow: hidden;
  padding-inline: 0;
  border: 1px solid var(--line);
  border-radius: var(--r-frame);
  background: var(--bg);
}

.vnc-layout-discuss__bar {
  min-block-size: 44px;
  display: flex;
  align-items: center;
  padding: var(--s2) var(--s4);
  border-block-end: 1px solid var(--chrome-line);
  background: var(--chrome-raise);
  color: var(--chrome-text);
  font-family: var(--font-mono);
  font-size: 0.82rem;
}

.vnc-layout-discuss__bar p {
  margin: 0;
}

.vnc-layout-discuss__body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: var(--s4) var(--s5);
  align-items: center;
  padding: var(--s5);
}

.vnc-layout-discuss__copy {
  min-inline-size: 0;
}

.vnc-layout-discuss__copy > .elementor-widget-heading + .elementor-widget-text-editor {
  margin-block-start: var(--s2);
}

@media (max-width: 899px) {
  .vnc-layout-band {
    padding-block: var(--s7);
  }

  .home .vnc-layout-band.e-con {
    padding-block: var(--s7);
  }

  .vnc-layout-band__inner {
    padding-inline: var(--s4);
  }

  .vnc-layout-cta,
  .vnc-layout-discuss__body {
    grid-template-columns: minmax(0, 1fr);
  }

  .vnc-layout-cta__actions {
    justify-content: flex-start;
  }
}

@media (max-width: 599px) {
  /* Single Page Doc's exported root: remove Elementor's extra container
     insets, leaving one .wrap gutter (prototype site.css:178) for the head
     and reading content. The other reading templates keep their own layout. */
  .vnc-layout-band.e-con[data-id="d0c50001"],
  .vnc-layout-band[data-id="d0c50001"] .vnc-reading-template > .doc-grid.e-con {
    --padding-right: 0;
    --padding-left: 0;
    padding-inline: 0;
  }

  .vnc-layout-band[data-id="d0c50001"] > .vnc-reading-template.e-con {
    --padding-right: var(--s4);
    --padding-left: var(--s4);
    padding-inline: var(--s4);
  }

  .vnc-layout-cta {
    gap: var(--s4);
    padding-block: var(--s5);
  }

  .vnc-layout-cta__actions,
  .vnc-layout-cta__actions .elementor-widget-button,
  .vnc-layout-discuss__action,
  .vnc-layout-discuss__action .elementor-button {
    inline-size: 100%;
  }

  .vnc-layout-discuss__body {
    padding: var(--s4);
  }
}

/* W5-FIX-41: directory figures use the same metadata face as the mockup. */
.vnc-group-directory .meta-strip {
  font-family: var(--font-mono);
  font-size: 12.5px;
}

.vnc-composition-grid > .card .prose > p {
  color: var(--muted);
  font-size: 15.5px;
  line-height: 1.65;
}

/* Shared card hover (W6-CSS-15C-2): border colour only, no movement */
.tool-card:hover,
.tool-card:focus-within,
.vnc-guides-grid > .card:hover,
.vnc-guides-grid > .card:focus-within,
.comparison-list:not(.comparison-list--routes) > .topic-row:hover,
.comparison-list:not(.comparison-list--routes) > .topic-row:focus-within,
[class*="elementor-widget-vnc_community_"] .group-card:hover,
[class*="elementor-widget-vnc_community_"] .group-card:focus-within,
.post-card:hover,
.post-card:focus-within,
.route-card.route-card:hover,
.route-card.route-card:focus-within,
.comparison-list--routes .route-card:hover,
.comparison-list--routes .route-card:focus-within {
  border-color: var(--accent);
}

/* Dense community topics are list rows with a top divider, not bordered boxes. */
.topic-row--stats:hover,
.topic-row--stats:focus-within {
  background-color: var(--bg-raise);
}

.vnc-guides-grid > .card {
  position: relative;
}

.vnc-guides-grid > .card .prose > h3 a::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: var(--r-card);
}

.vnc-guides-grid > .card a,
.vnc-guides-grid > .card button {
  position: relative;
  z-index: 1;
}

.vnc-guides-grid > .card .prose > h3 a:focus-visible,
.vnc-guides-grid > .card .prose > h3 a:focus-visible::after {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.vnc-guides-grid > .card .prose > h3 a {
  position: static;
  z-index: auto;
  color: inherit;
  text-decoration: none;
}

.vnc-guides-grid > .card .prose > p {
  margin-top: var(--s2);
  margin-bottom: 0;
}

.vnc-guides-grid > .card .prose > .meta-strip {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s2) var(--s4);
  margin-top: var(--s3);
  font-family: var(--font-mono);
  font-size: 12.5px;
}

.vnc-guides-grid .meta-strip strong {
  color: var(--accent-ink);
  font-weight: 600;
}

/* One wrap gutter around the home route grid and commercial callout. */
.home .e-con:has(> .e-con-inner > .vnc-route-grid),
.home .e-con:has(> .e-con-inner > .vnc-commercial-card) {
  --container-max-width: 100%;
  width: 100%;
  max-width: var(--max);
  margin-inline: auto;
  padding-inline: var(--s5);
}

.home .e-con:has(> .e-con-inner > .vnc-route-grid) > .e-con-inner,
.home .e-con:has(> .e-con-inner > .vnc-commercial-card) > .e-con-inner {
  padding-inline: 0;
}

/* Elementor adds a flex gap between widgets; the mockup head uses margins. */
.vnc-404-head.e-con > .e-con-inner {
  gap: 0;
}

.vnc-404-head .elementor-widget-heading h1,
.vnc-404-head .elementor-widget-text-editor p {
  margin-bottom: 0;
}

/* Desktop heads retain the already-verified mobile template padding. */
@media (min-width: 900px) {
  .e-con.vnc-reading-template[data-id="a2060001"] {
    width: 100%;
    max-width: var(--max);
    margin-inline: auto;
    padding-inline: var(--s5);
  }

  .vnc-reading-template > .page-head.e-con[data-id="a2060003"],
  .vnc-reading-template > .page-head.e-con[data-id="7a1e0023"] {
    padding-inline: 0;
  }
}

@media (max-width: 899px) {
  .home .e-con:has(> .e-con-inner > .vnc-route-grid),
  .home .e-con:has(> .e-con-inner > .vnc-commercial-card) {
    padding-inline: var(--s4);
  }
}

a.external-marked--generated::after {
  content: "\00a0\2197";
  display: inline-block;
  flex: none;
  font-size: 0.82em;
  line-height: 1;
  vertical-align: 0.08em;
}
