/* Gun Vault Chrome — auto-generated, v3.0.22 */

/* === chrome-nav.css === */
@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@400;500;700;900&display=swap');

/* ============================================================
   GUN VAULT — Site Chrome v2 (two-row nav + full footer + modal)
   Row 1: Platform funnel (01-05)
   Row 2: Site navigation (Features, Plans, Stories, etc.)
============================================================ */
:root{
  --black:#0a0a0a;--off-black:#111;--near-black:#161616;
  --white:#ffffff;--off-white:#f8f8f8;--light:#f2f2f2;
  --border:#e0e0e0;--border-dark:#cccccc;
  --border-gold:rgba(212,160,23,.25);
  --muted:#666;--hint:#aaa;
  --gold-grad:linear-gradient(135deg,#7a5200 0%,#D4A017 22%,#f0c040 44%,#C8962A 66%,#8B6914 88%,#D4A017 100%);
  --gold-grad-btn:linear-gradient(135deg,#9a6800 0%,#f0c040 25%,#FFD060 50%,#D4A017 75%,#a07800 100%);
}
/* v3.0.14: removed the global html,body,elementor-* black background rules.
   They were forcing #0a0a0a on every page across all 5 sites, breaking
   ~450 white-background pages on guntransfer.com (checkout, create-new-
   transfer, etc.) and on gunprice.com which uses light backgrounds. Pages
   that genuinely want a dark background should set it via their own
   page/template CSS, not via global chrome rules. */
body{font-family:'Barlow',sans-serif;overflow-x:hidden}
.theme-generatepress .site-footer,.theme-generatepress footer,.elementor-template-canvas .site-footer,footer.site-footer,#colophon{display:none !important;height:0 !important;margin:0 !important;padding:0 !important}

/* ============ NAV WRAPPER (contains both rows) ============ */
.nav-wrap{position:fixed !important;top:0 !important;left:0 !important;right:0 !important;z-index:9999 !important;background:#0a0a0a !important;border-bottom:1px solid rgba(212,160,23,.15)}
/* v3.0.17: defensive bg on the inner nav row so legacy/leftover Elementor
   CSS (e.g. cream-color #d8d8d2 rules from the original HTML page builds
   on share/price) can't override the chrome's intended dark nav. The
   wrapper bg is normally enough but legacy rules sometimes target
   .nav directly with !important — we have to fight back. */
.nav-wrap nav.nav{background:#0a0a0a !important}
/* GunPrice intentionally uses a gray nav (NOT cream) per design system. */
.nav-wrap[data-gv-site="price"] nav.nav{background:#bbbbbb !important}
/* v3.0.20: GunShare also uses the light-gray nav (matches the per-site
   text-color overrides further down that already anticipate dark text
   on a light bg for both price AND share). The original Share build
   shipped with a black nav by accident — the bg override was missing
   even though the supporting text-color rules existed. */
.nav-wrap[data-gv-site="share"] nav.nav{background:#bbbbbb !important}

/* ============ TOP NAV (platforms, row 1) ============ */
.nav{height:80px;display:flex !important;align-items:center;justify-content:space-between;padding:0 40px;border-bottom:1px solid rgba(255,255,255,0.06)}
.nav-logo img{height:72px;display:block;max-height:72px}
.nav-logo-icon{display:none}.nav-logo-full{display:block}
.nav-right-group{display:flex;align-items:center;gap:4px}
.nav-steps{display:flex;align-items:center;gap:4px}
.nav-step{display:flex;flex-direction:column;align-items:center;padding:8px 18px;border-radius:8px;text-decoration:none;transition:all .15s}
.nav-step:hover{background:rgba(255,255,255,.07)}
.nav-step-num{font-family:'Barlow Condensed',sans-serif;font-size:10px;font-weight:700;letter-spacing:1px;color:rgba(255,255,255,.35);margin-bottom:2px;display:block}
.nav-step-word{font-family:'Barlow Condensed',sans-serif;font-size:16px;font-weight:900;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.55);transition:color .15s;display:block}
.nav-step:hover .nav-step-word{color:#fff}
.nav-step:hover .nav-step-num{color:rgba(255,255,255,.55)}
.nav-step.active{background:#C8962A}
.nav-step.active .nav-step-num{color:rgba(255,255,255,.6)}
.nav-step.active .nav-step-word{color:#fff}
.nav-step.active:hover{background:#b8831d}
.nav-divider{width:1px;height:28px;background:rgba(255,255,255,.12);margin:0 2px;flex-shrink:0}
.nav-user-divider{width:1px;height:28px;background:rgba(255,255,255,.12);margin:0 10px;flex-shrink:0}
.nav-user{display:flex;align-items:center;position:relative !important}
.nav-user-btn{width:48px;height:48px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .2s;background:transparent;flex-shrink:0;position:relative;border:none;padding:0}
.nav-user-btn:hover{opacity:.85}
/* Logged-out: gold OUTLINE shield + gold outline person, matching the 4 spoke
   sites which each use their site color in the same outline style. Stroke
   widths tuned against the spoke screenshots; these viewBoxes are different
   sizes (shield is 424 wide, person is 24 wide) so stroke-width values are
   not comparable cross-element. */
.nav-user-btn .shield-bg{width:48px;height:48px;position:absolute;top:0;left:0}
.nav-user-btn .shield-bg path{fill:none;stroke:#D4A017;stroke-width:28;stroke-linejoin:round;transition:stroke .2s}
.nav-user-btn:hover .shield-bg path{stroke:#f0c040}
.nav-user-btn .person-icon{width:26px;height:26px;position:relative;z-index:2;fill:none;stroke:#D4A017;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;transition:stroke .2s;transform:translateY(-3px)}
.nav-user-btn:hover .person-icon{stroke:#f0c040}
/* Logged-in: FILLED gold gradient shield with black initial — unchanged, this
   is the "you're signed in" affordance and should remain distinct from the
   logged-out outline style. */
.nav-user-initial{display:none;width:48px;height:48px;align-items:center;justify-content:center;cursor:pointer;position:relative;flex-shrink:0}
.nav-user-initial .shield-fill{width:48px;height:48px;position:absolute;top:0;left:0;fill:url(#shieldGoldNav)}
.nav-user-initial span{font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:900;color:#0a0a0a;position:relative;z-index:2;letter-spacing:.5px;line-height:1}
.nav-user-dropdown{position:absolute !important;top:calc(100% + 12px) !important;right:0 !important;background:#0a0a0a !important;border:1px solid rgba(212,160,23,.25) !important;border-radius:8px !important;padding:6px !important;min-width:200px !important;box-shadow:0 10px 30px rgba(0,0,0,.7) !important;display:none;z-index:99999 !important}
/* v3.0.17: vault has a 2nd nav row below row 1 (~48px + 1px border). The
   user icon is in row 1, so the absolute-positioned dropdown would
   overlap row 2. Push it down to clear it. */
/* v3.0.19: REVERTED — Rand wants dropdown directly under the icon on ALL
   5 sites, including hub. The dropdown overlapping the secondary nav row
   visually is acceptable (it's standard dropdown behavior — z-index puts
   it on top, just like every product UI). The unified single rule wins. */
.nav-user-dropdown.open{display:block}
.nav-user-dropdown a{display:block !important;padding:9px 14px !important;font-size:13px !important;color:rgba(255,255,255,.85) !important;text-decoration:none;border-radius:6px !important;transition:all .12s;font-weight:500 !important}
.nav-user-dropdown a:hover{background:rgba(212,160,23,.12) !important;color:#f0c040 !important}
/* v3.0.20: Defensive reset — spoke themes (price, clear, share) add
   global border-bottom/text-decoration on every <a> that bleeds into
   the dropdown rows as white horizontal lines between every menu
   item. Transfer doesn't have those theme rules, which is why its
   dropdown reads cleanly. Force OFF every border/outline/decoration
   on dropdown <a>s so every site matches Transfer's clean panel. */
.nav-user-dropdown a,
.nav-user-dropdown a:hover,
.nav-user-dropdown a:focus,
.nav-user-dropdown a:active,
.nav-user-dropdown a:visited{
  border:0 !important;
  outline:0 !important;
  text-decoration:none !important;
  box-shadow:none !important;
}
.nav-user-dropdown a::before,
.nav-user-dropdown a::after{
  display:none !important;
  border:0 !important;
  background:none !important;
}

/* v3.0.16: icon rows in dropdown — show site icon next to label for
   destination-site rows (My Vault / My Transfers / My Listings). Account /
   Billing / Sign Out stay text-only since they're user actions, not site
   destinations. */
.nav-user-dropdown a.nav-user-dd-icon-row{display:flex !important;align-items:center !important;gap:10px !important}
.nav-user-dropdown a.nav-user-dd-icon-row img{width:20px !important;height:20px !important;object-fit:contain !important;flex-shrink:0 !important;display:block !important}
/* v3.0.22: Top-3 destination rows (My Vault / My Transfers / My Listings)
   render their label inside a <span> so the icon and text can sit on a
   flex row. On guntransfer.com a theme rule was incidentally inflating
   any <span> font-size to 18px, which made the top 3 read noticeably
   bigger than the bottom 3 (My Account / Billing / Sign Out — no spans,
   inherit 13px straight from the <a>). Rand wanted this look on every
   site, not just Transfer-by-accident. So we lock the span at 18px
   here, !important to defeat any spoke-theme rule that might want to
   reshape it. The bottom-3 items have no .nav-user-dd-icon-row class,
   so they keep the base 13px and the size hierarchy is preserved by
   design rather than by theme leak. */
.nav-user-dropdown a.nav-user-dd-icon-row span{display:block !important;font-size:18px !important;font-weight:500 !important;letter-spacing:0.2px !important;line-height:1.2 !important}
.nav-user-dd-divider{height:1px !important;background:rgba(255,255,255,.08) !important;margin:6px 6px !important}
.nav-user-dd-signout{color:rgba(239,83,80,.85)!important}
.nav-user-dd-signout:hover{background:rgba(239,83,80,.1)!important;color:#ef5350!important}

/* ============ SECONDARY NAV (site pages, row 2) ============ */
.nav-secondary{height:48px;display:flex;align-items:center;justify-content:center;padding:0 40px;gap:2px;background:#080808;position:relative}
.nav-sec-link{font-family:'Barlow Condensed',sans-serif;font-weight:700;font-size:13px;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,0.55);padding:10px 18px;border-radius:6px;text-decoration:none;transition:all .15s;display:flex;align-items:center;gap:6px;position:relative}
.nav-sec-link:hover{color:#fff;background:rgba(255,255,255,0.04)}
.nav-sec-link.active{color:#D4A017}
.nav-sec-link.active::after{content:"";position:absolute;bottom:-1px;left:18px;right:18px;height:2px;background:#D4A017;border-radius:2px}
.nav-sec-divider{width:1px;height:16px;background:rgba(255,255,255,0.08);margin:0 4px}
.nav-sec-parent{position:relative}
.nav-sec-parent > .nav-sec-link::after{content:"▾";font-size:9px;margin-left:2px;opacity:0.6;transition:transform .15s}
.nav-sec-parent:hover > .nav-sec-link::after{transform:rotate(180deg);opacity:1}
.nav-sec-submenu{position:absolute;top:100%;left:50%;transform:translateX(-50%);background:#111;border:1px solid rgba(212,160,23,0.2);border-radius:8px;padding:8px 6px 6px;min-width:200px;box-shadow:0 10px 30px rgba(0,0,0,.7);display:none;z-index:10001}
/* Hover-gap fix: use an invisible ::before bar that sits directly above the
   submenu background, filling the 2px visual gap between the parent link and
   the submenu. This extends the submenu's hit area UP to touch the parent,
   so the cursor never crosses an un-hovered region on its way down. The
   submenu itself also needs :hover coverage so we don't rely on the parent
   alone — without this, moving from the parent into the submenu briefly
   drops :hover and collapses the menu. */
.nav-sec-submenu::before{content:"";position:absolute;left:0;right:0;top:-6px;height:6px;background:transparent;pointer-events:auto}
.nav-sec-parent:hover .nav-sec-submenu,.nav-sec-parent:focus-within .nav-sec-submenu,.nav-sec-submenu:hover{display:block}
.nav-sec-submenu a{display:block;padding:10px 14px;font-family:'Barlow',sans-serif;font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:rgba(255,255,255,0.75);text-decoration:none;border-radius:6px;transition:all .12s}
.nav-sec-submenu a:hover{background:rgba(212,160,23,0.1);color:#f0c040}
.nav-sec-submenu a.active{color:#D4A017;background:rgba(212,160,23,0.06)}

/* ============ FULL FOOTER ============ */
.gv-footer{
  background:#080808;
  border-top:1px solid rgba(212,160,23,0.12);
  padding:60px 0 0;
  margin-top:60px;
  position:relative;
}
.gv-footer::before{
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:0;
  height:1px;
  background:linear-gradient(90deg,transparent 0%,rgba(212,160,23,0.3) 50%,transparent 100%);
}
.gv-footer-inner{
  max-width:1180px;
  margin:0 auto;
  padding:0 40px;
}
.gv-footer-top{
  display:grid;
  grid-template-columns:1.5fr 1fr 1fr 1fr 1fr;
  gap:40px;
  margin-bottom:50px;
}
.gv-footer-brand{
  display:flex;
  flex-direction:column;
  gap:18px;
}
.gv-footer-logo img{height:40px;display:block}
.gv-footer-tagline{
  font-family:'Barlow Condensed',sans-serif;
  font-weight:700;
  font-size:15px;
  line-height:1.4;
  color:rgba(255,255,255,0.55);
  letter-spacing:0.3px;
  max-width:280px;
}
.gv-footer-social{
  display:flex;
  gap:10px;
  margin-top:6px;
}
.gv-footer-social a{
  width:34px;
  height:34px;
  border-radius:8px;
  background:rgba(255,255,255,0.04);
  border:1px solid rgba(255,255,255,0.08);
  display:flex;
  align-items:center;
  justify-content:center;
  color:rgba(255,255,255,0.55);
  transition:all .15s;
  text-decoration:none;
}
.gv-footer-social a:hover{
  border-color:rgba(212,160,23,0.3);
  color:#D4A017;
  background:rgba(212,160,23,0.08);
}
.gv-footer-col h4{
  font-family:'Barlow Condensed',sans-serif;
  font-weight:800;
  font-size:12px;
  letter-spacing:2.5px;
  text-transform:uppercase;
  color:#D4A017;
  margin:0 0 18px;
}
.gv-footer-col ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.gv-footer-col a{
  font-family:'Barlow',sans-serif;
  font-size:14px;
  color:rgba(255,255,255,0.62);
  text-decoration:none;
  transition:color .15s;
}
.gv-footer-col a:hover{color:#fff}
.gv-footer-col a.gv-footer-badge{
  display:inline-flex;
  align-items:center;
  gap:6px;
}
.gv-footer-col a.gv-footer-badge::after{
  content:"Free";
  font-family:'Barlow Condensed',sans-serif;
  font-size:9px;
  letter-spacing:1.2px;
  font-weight:700;
  text-transform:uppercase;
  padding:2px 6px;
  border-radius:3px;
  background:rgba(74,222,128,0.12);
  color:#4ade80;
  border:1px solid rgba(74,222,128,0.25);
}

/* ============ PLATFORM STRIP ============ */
.gv-footer-platforms{
  padding:30px 0;
  border-top:1px solid rgba(255,255,255,0.06);
  border-bottom:1px solid rgba(255,255,255,0.06);
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  flex-wrap:wrap;
}
.gv-footer-platforms-label{
  font-family:'Barlow Condensed',sans-serif;
  font-weight:800;
  font-size:12px;
  letter-spacing:2.5px;
  text-transform:uppercase;
  color:rgba(255,255,255,0.4);
}
.gv-footer-platforms-grid{
  display:flex;
  gap:4px;
  flex-wrap:wrap;
}
.gv-footer-platform{
  display:flex;
  flex-direction:column;
  align-items:center;
  padding:8px 14px;
  border-radius:6px;
  text-decoration:none;
  transition:all .15s;
}
.gv-footer-platform:hover{background:rgba(255,255,255,0.05)}
.gv-footer-platform-num{
  font-family:'Barlow Condensed',sans-serif;
  font-size:9px;
  font-weight:700;
  letter-spacing:1px;
  color:rgba(255,255,255,0.3);
}
.gv-footer-platform-word{
  font-family:'Barlow Condensed',sans-serif;
  font-size:13px;
  font-weight:900;
  letter-spacing:1.5px;
  text-transform:uppercase;
  color:rgba(255,255,255,0.5);
  transition:color .15s;
}
.gv-footer-platform:hover .gv-footer-platform-word{color:#fff}
.gv-footer-platform.current .gv-footer-platform-word{color:#D4A017}

/* ============ COPYRIGHT BAR ============ */
.gv-footer-bottom{
  padding:24px 0;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
  flex-wrap:wrap;
}
.gv-footer-copy{
  font-family:'Barlow',sans-serif;
  font-size:12px;
  color:rgba(255,255,255,0.4);
  letter-spacing:0.3px;
}
.gv-footer-copy .gv-footer-sep{margin:0 10px;opacity:0.5}
.gv-footer-made{
  font-family:'Barlow Condensed',sans-serif;
  font-size:11px;
  font-weight:700;
  letter-spacing:2px;
  text-transform:uppercase;
  color:rgba(255,255,255,0.35);
  display:flex;
  align-items:center;
  gap:8px;
}
.gv-footer-made svg{width:20px;height:14px}

/* ============ LOGIN MODAL (inherited) ============ */
.gv-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);backdrop-filter:blur(8px);z-index:99999;display:none;align-items:center;justify-content:center;padding:20px}
.gv-modal-overlay.open{display:flex}
.gv-modal{background:#111;border-radius:14px;padding:32px;max-width:420px;width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.7);position:relative;border:1px solid rgba(212,160,23,.2)}
.gv-modal-close{position:absolute;top:14px;right:14px;background:transparent;border:none;color:rgba(255,255,255,.4);font-size:28px;cursor:pointer;width:36px;height:36px;display:flex;align-items:center;justify-content:center;transition:color .15s}
.gv-modal-close:hover{color:#fff}
.gv-modal-logo{text-align:center;margin-bottom:14px}
.gv-modal-logo img{height:48px;display:inline-block;max-height:48px}
.gv-modal h2{font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:900;letter-spacing:-.3px;color:#fff;text-align:center;margin:0 0 6px;line-height:1.1}
.gv-modal-sub{text-align:center;font-size:13px;color:rgba(255,255,255,.45);margin:0 0 22px}
.gv-modal-tabs{display:flex;gap:8px;background:rgba(255,255,255,.04);padding:4px;border-radius:10px;margin-bottom:22px}
.gv-modal-tab{flex:1;background:transparent;border:none;color:rgba(255,255,255,.55);font-family:'Barlow',sans-serif;font-size:13px;font-weight:600;letter-spacing:.5px;padding:10px;border-radius:7px;cursor:pointer;transition:all .15s}
.gv-modal-tab.active{background:rgba(212,160,23,.15);color:#f0c040}
.gv-modal-tab:hover:not(.active){color:rgba(255,255,255,.8)}
.gv-modal-field{margin-bottom:16px}
.gv-modal-label{display:block;font-family:'Barlow Condensed',sans-serif;font-size:11px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:rgba(255,255,255,.55);margin-bottom:6px}
.gv-modal-input{width:100%;background:#0a0a0a !important;border:1px solid rgba(255,255,255,.1) !important;border-radius:8px;padding:12px 14px;color:#fff !important;font-size:14px;font-family:'Barlow',sans-serif;transition:all .15s;outline:none;box-sizing:border-box}
.gv-modal-input:focus{border-color:#D4A017 !important;background:#0f0f0f !important}
.gv-modal-input::placeholder{color:rgba(255,255,255,.25)}
.gv-modal-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;font-size:12px;color:rgba(255,255,255,.55)}
.gv-modal-row label{display:flex;align-items:center;gap:6px;cursor:pointer}
.gv-modal-forgot{color:#D4A017;text-decoration:none}
.gv-modal-forgot:hover{text-decoration:underline}
.gv-modal-submit{width:100%;background:var(--gold-grad-btn);border:none;color:#0a0a0a;padding:13px;border-radius:8px;font-family:'Barlow Condensed',sans-serif;font-size:14px;font-weight:900;letter-spacing:2px;text-transform:uppercase;cursor:pointer;transition:all .15s;box-shadow:0 2px 10px rgba(212,160,23,.2)}
.gv-modal-submit:hover{transform:translateY(-1px);box-shadow:0 4px 16px rgba(212,160,23,.35)}
.gv-modal-footer{text-align:center;margin-top:18px;font-size:12px;color:rgba(255,255,255,.4)}
.gv-modal-footer a{color:#D4A017;text-decoration:none;font-weight:600}
.gv-modal-footer a:hover{text-decoration:underline}
.gv-modal-error{background:rgba(239,83,80,.1);border:1px solid rgba(239,83,80,.3);color:#ef5350;padding:10px 12px;border-radius:8px;font-size:13px;margin-bottom:14px;display:none}
.gv-modal-error.show{display:block}
.gv-modal-success{background:rgba(76,175,80,.1);border:1px solid rgba(76,175,80,.3);color:#4caf50;padding:10px 12px;border-radius:8px;font-size:13px;margin-bottom:14px;display:none}
.gv-modal-success.show{display:block}
.gv-loggedin-panel{display:none;text-align:center}
.gv-loggedin-panel.show{display:block}
.gv-loggedin-avatar{width:72px;height:72px;border-radius:50%;background:var(--gold-grad);display:flex;align-items:center;justify-content:center;color:#0a0a0a;font-family:'Barlow Condensed',sans-serif;font-size:30px;font-weight:900;margin:0 auto 14px}
.gv-loggedin-name{font-family:'Barlow Condensed',sans-serif;font-size:22px;font-weight:900;color:#fff;margin-bottom:4px;letter-spacing:-.3px}
.gv-loggedin-email{font-size:13px;color:rgba(255,255,255,.4);margin-bottom:6px}
.gv-loggedin-links{display:flex;flex-direction:column;gap:6px;margin-bottom:18px}
.gv-loggedin-link{padding:10px 14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:8px;color:rgba(255,255,255,.75);font-size:13px;text-decoration:none;text-align:left;transition:all .15s;font-weight:500}
.gv-loggedin-link:hover{background:rgba(212,160,23,.08);border-color:rgba(212,160,23,.25);color:#f0c040}
.gv-loggedin-logout{width:100%;background:transparent;border:1px solid rgba(239,83,80,.3);color:#ef5350;padding:10px;border-radius:8px;font-family:'Barlow',sans-serif;font-size:13px;font-weight:600;letter-spacing:1px;text-transform:uppercase;cursor:pointer;transition:all .15s}
.gv-loggedin-logout:hover{background:rgba(239,83,80,.08);border-color:rgba(239,83,80,.5)}

/* ============ LOGIN MODAL — MOBILE ============
 * The modal is the most-used surface on the ecosystem (every sign-in across
 * all 5 sites). Base styles target desktop; on phone we need to:
 *   - Reduce horizontal padding so inputs get usable width on narrow screens
 *   - Stack First/Last Name fields (2-col grid is inline-only in modal.html,
 *     so we override via direct selector)
 *   - Let the credit chips wrap cleanly
 *   - Tighten the OTP input letter-spacing so 6 digits fit at 380px width
 *   - Use dvh fallback for iOS Safari where 90vh is wrong under dynamic toolbars
 */
@media (max-width:600px){
  .gv-modal-overlay{padding:12px}
  .gv-modal{padding:22px 18px;border-radius:12px;max-height:calc(100vh - 24px)}
  .gv-modal-close{top:8px;right:8px;width:40px;height:40px;font-size:26px}
  .gv-modal-logo img{height:40px;max-height:40px}
  .gv-modal h2{font-size:22px}
  .gv-modal-sub{font-size:12px;margin-bottom:16px}
  .gv-modal-tabs{margin-bottom:16px}
  .gv-modal-tab{font-size:12px;padding:9px 6px;letter-spacing:.3px}
  .gv-modal-field{margin-bottom:12px}
  .gv-modal-input{font-size:16px;padding:12px 12px} /* 16px prevents iOS Safari zoom on focus */
  /* Stack the First/Last Name row (uses inline grid-template-columns in markup) */
  #gvRegisterForm > div[style*="grid-template-columns"]{grid-template-columns:1fr !important;gap:0 !important}
  /* OTP field — tighten letter-spacing so 6 digits don't overflow */
  #gvOtpCode{font-size:24px !important;letter-spacing:6px !important}
  .gv-modal-submit{padding:14px;font-size:13px;letter-spacing:1.6px}
  /* Logged-in panel — credit chips wrap nicely */
  .gv-loggedin-avatar{width:60px;height:60px;font-size:24px;margin-bottom:10px}
  .gv-loggedin-name{font-size:19px}
  .gv-loggedin-plan-row,.gv-loggedin-credits{flex-wrap:wrap;justify-content:center}
  .gv-loggedin-link{font-size:13px;padding:11px 14px}
  .gv-loggedin-logout{padding:12px;font-size:13px}
}
@media (max-width:380px){
  .gv-modal{padding:18px 14px}
  .gv-modal h2{font-size:20px}
  /* 6 digits × (24px + 6px spacing) ≈ 180px needed; tighten further on SE */
  #gvOtpCode{font-size:22px !important;letter-spacing:4px !important}
}

/* ============ RESPONSIVE ============ */
@media(max-width:1100px){
  .gv-footer-top{grid-template-columns:1.5fr 1fr 1fr 1fr}
  .gv-footer-col.gv-footer-col-last{display:none}
}
@media(max-width:900px){
  .nav{padding:0 20px}
  .nav-step{padding:6px 12px}
  .nav-step-word{font-size:14px;letter-spacing:1.5px}
  .nav-logo img{height:56px}
  .nav-secondary{padding:0 20px;overflow-x:auto;-webkit-overflow-scrolling:touch;justify-content:flex-start;scrollbar-width:none}
  .nav-secondary::-webkit-scrollbar{display:none}
  .nav-sec-link{flex-shrink:0;padding:10px 14px;font-size:12px;letter-spacing:1.5px}
  .nav-sec-submenu{position:fixed;top:auto;left:20px;right:20px;transform:none;margin-top:0;padding-top:12px}
  .gv-footer-top{grid-template-columns:1fr 1fr;gap:32px}
  .gv-footer-brand{grid-column:span 2}
  .gv-footer-col-last{display:block}
}
@media(max-width:720px){
  .nav-steps{gap:2px}
  .nav-step{padding:4px 8px}
  .nav-step-word{font-size:11px;letter-spacing:1px}
  .nav-step-num{font-size:9px}
  .nav-divider{height:20px}
  .nav-logo-full{display:none}.nav-logo-icon{display:block}
  .nav-user-btn,.nav-user-initial{width:40px;height:40px}
  .gv-footer-inner{padding:0 24px}
  .gv-footer-platforms{flex-direction:column;align-items:flex-start;gap:12px}
  .gv-footer-bottom{flex-direction:column;align-items:flex-start;gap:12px}
}
@media(max-width:480px){
  .nav{padding:0 12px;height:68px}
  .nav-user-divider{margin:0 6px}
  .nav-wrap{border-bottom:1px solid rgba(212,160,23,.15)}
  .nav-secondary{height:44px;padding:0 12px}
  .nav-user-dropdown{min-width:180px}
  .gv-footer-top{grid-template-columns:1fr}
  .gv-footer-brand{grid-column:span 1}
}

/* ============================================================
 * Per-site brand color overrides for the sign-in modal (v2.0.3).
 *
 * The render_modal() PHP sets `--gv-modal-accent` and
 * `--gv-modal-accent-rgb` as inline CSS vars on .gv-modal-overlay
 * based on the current host:
 *
 *   gunvault.co     #C8962A   (gold)
 *   gunshare.com    #c0392b   (red)
 *   guntransfer.com #6E9631   (green)
 *   gunprice.com    #1E88E5   (blue)
 *   gunclear.com    #FFFFFF   (white — strict B&W only)
 *
 * These rules are scoped under .gv-modal-overlay so they only
 * affect the sign-in modal, NOT the rest of the site (which
 * keeps its gold/brand styling). Specificity is higher than the
 * default gold-styled rules above, so these win without !important.
 * ============================================================ */

.gv-modal-overlay .gv-modal{
  border-color: rgba(var(--gv-modal-accent-rgb, 212,160,23), .25);
}
.gv-modal-overlay .gv-modal-tab.active{
  background: rgba(var(--gv-modal-accent-rgb, 212,160,23), .15);
  color: var(--gv-modal-accent, #f0c040);
}
.gv-modal-overlay .gv-modal-input:focus{
  border-color: var(--gv-modal-accent, #D4A017);
  box-shadow: 0 0 0 3px rgba(var(--gv-modal-accent-rgb, 212,160,23), .15);
}
.gv-modal-overlay .gv-modal-forgot{
  color: var(--gv-modal-accent, #D4A017);
}
.gv-modal-overlay .gv-modal-link-resend{
  color: var(--gv-modal-accent, #D4A017);
}
.gv-modal-overlay .gv-modal-submit{
  background: var(--gv-modal-accent, #D4A017);
  color: #fff;
  box-shadow: 0 2px 10px rgba(var(--gv-modal-accent-rgb, 212,160,23), .3);
}
.gv-modal-overlay .gv-modal-submit:hover{
  filter: brightness(1.08);
}
.gv-modal-overlay .gv-modal-footer a{
  color: var(--gv-modal-accent, #D4A017);
}

/* Hub (gunvault.co) keeps the rich gold gradient on the Sign In
 * button — solid gold doesn't have the same shine. */
.gv-modal-overlay[data-gv-site="vault"] .gv-modal-submit{
  background: var(--gold-grad-btn);
  color: #0a0a0a;
}

/* GunClear is strict black & white. White button looks washed out
 * against the dark modal, so use a near-white button with a thin
 * dark border for contrast and dark text. */
.gv-modal-overlay[data-gv-site="clear"] .gv-modal-submit{
  background: #fff;
  color: #111;
  box-shadow: 0 2px 10px rgba(255,255,255,.15);
}
.gv-modal-overlay[data-gv-site="clear"] .gv-modal-tab.active{
  background: rgba(255,255,255,.12);
  color: #fff;
}
.gv-modal-overlay[data-gv-site="clear"] .gv-modal-input:focus{
  border-color: #fff;
  box-shadow: 0 0 0 3px rgba(255,255,255,.12);
}

/* ============================================================
 * Chrome/Safari autofill override (v2.0.6).
 *
 * When Chrome auto-fills a field — or when iOS suggests an OTP
 * from a recent email — the browser paints its own background
 * (typically near-white). With our default `color:#fff` text
 * that makes the typed code invisible in the OTP field. This
 * forces the input to keep the dark modal-style background and
 * white text regardless of autofill state.
 *
 * The 1000px box-shadow trick is the canonical way to recolor
 * an autofilled input — vendor APIs don't expose direct background
 * control. -webkit-text-fill-color overrides the autofill text
 * color (which `color` alone can't reach).
 * ============================================================ */
.gv-modal-overlay .gv-modal-input:-webkit-autofill,
.gv-modal-overlay .gv-modal-input:-webkit-autofill:hover,
.gv-modal-overlay .gv-modal-input:-webkit-autofill:focus,
.gv-modal-overlay .gv-modal-input:-webkit-autofill:active{
  -webkit-text-fill-color: #fff !important;
  -webkit-box-shadow: 0 0 0 1000px #0a0a0a inset !important;
          box-shadow: 0 0 0 1000px #0a0a0a inset !important;
  caret-color: #fff !important;
  transition: background-color 5000s ease-in-out 0s; /* defer browser repaint */
}

/* ============================================================
 * OTP input placeholder — show "000000" in the per-site brand
 * color so it reads as a hint pattern, not a forgotten placeholder.
 * The accent CSS variable is set on .gv-modal-overlay by render_modal.
 * On GunClear (B&W) we keep the placeholder near-white at lower
 * opacity since the accent there is pure white.
 * ============================================================ */
.gv-modal-overlay .gv-otp-input::placeholder{
  color: var(--gv-modal-accent, #C8962A);
  opacity: .35;
  font-weight: 800;
  letter-spacing: 10px;
}
.gv-modal-overlay .gv-otp-input::-webkit-input-placeholder{
  color: var(--gv-modal-accent, #C8962A);
  opacity: .35;
}
.gv-modal-overlay[data-gv-site="clear"] .gv-otp-input::placeholder{
  /* GunClear is strict B&W. The modal's input field has a
   * light background, so white-on-white was invisible. Mid-gray
   * reads on any background regardless of the surrounding theme.
   */
  color: rgba(140,140,140,.55);
}
.gv-modal-overlay[data-gv-site="clear"] .gv-otp-input{
  /* Slight off-white background so the gray placeholder digits
   * have a softer panel under them. Doesn't affect typed-in
   * digits since those use the input's normal text color. */
  background: #f4f4f4;
}

/* ============================================================
 * Legacy nav hide (v2.0.9). Replaces v2.0.8's destructive DOM
 * removal which nuked entire Elementor page sections. The chrome.js
 * runtime now adds `.gv-legacy-nav-hidden` to any <nav> element
 * containing nav-steps that aren't inside our canonical
 * .nav-wrap[data-gvc-version="2"]. We hide those visually only —
 * the surrounding Elementor section, columns, and any sibling
 * content stay intact.
 * ============================================================ */
nav.gv-legacy-nav-hidden,
nav.nav.gv-legacy-nav-hidden{
  display: none !important;
  visibility: hidden !important;
}

/* ============================================================
 * Per-site brand color on the active platform-funnel nav step.
 * `--gv-nav-accent` and `--gv-nav-accent-rgb` are inlined on the
 * .nav-wrap by render_nav, sourced from get_site_branding(). The
 * default (gold) is preserved when the variables aren't set.
 *
 * Hub (gunvault.co) keeps the gold step. Spokes get their own:
 *   gunprice.com   → blue
 *   gunclear.com   → near-white (B&W only)
 *   gunshare.com   → red
 *   guntransfer.com→ green
 * ============================================================ */
.nav-wrap .nav-step.active{
  background: var(--gv-nav-accent, #C8962A);
}
.nav-wrap[data-gv-site="clear"] .nav-step.active{
  /* GunClear is strict B&W. Solid white pill is too bright on the
     dark nav; use a darker shade with white text for contrast. */
  background: #fff;
  color: #111;
}
.nav-wrap[data-gv-site="clear"] .nav-step.active .nav-step-num,
.nav-wrap[data-gv-site="clear"] .nav-step.active .nav-step-word{
  color: #111;
}

/* ============================================================
 * v2.0.11 — Active step text readability + secondary-nav scope
 *
 * Problem 1: Inactive `.nav-step-word` is rgba(255,255,255,.55)
 * (translucent white). When the step is active the background
 * fills with a brand color (gold/red/green/blue) but no rule
 * upgraded the text to solid white, leaving washed-out text on
 * a vivid pill. Same for `.nav-step-num`.
 *
 * Problem 2: GunClear's active state uses a white pill, so the
 * text/number need to flip dark for contrast.
 *
 * Problem 3: The secondary row (Home/Features/Plans/Insurance/
 * Security/About) only makes sense on gunvault.co — the spokes
 * don't have those pages and rendering the row there produces
 * dead links and the inconsistent two-row nav height. Hide it
 * on every site whose data-gv-site is NOT "vault".
 *
 * Problem 4: The chrome plugin nav assumes top:0 of the
 * viewport, but when WordPress is showing its admin bar (logged-
 * in users) the bar sits on top and clips the logo. Push the
 * nav down by var(--wp-admin-bar-height) when admin-bar-showing.
 * ============================================================ */
.nav-wrap .nav-step.active .nav-step-word,
.nav-wrap .nav-step.active .nav-step-num{
  color: #fff;
}
.nav-wrap[data-gv-site="clear"] .nav-step.active .nav-step-word,
.nav-wrap[data-gv-site="clear"] .nav-step.active .nav-step-num{
  color: #111;
}

/* Hide the gunvault-only page menu on every spoke */
.nav-wrap:not([data-gv-site="vault"]) .nav-secondary{
  display: none !important;
}

/* v3.0.15: Compensate for the fixed nav so page content doesn't slide
   underneath it. Without this, the top ~81px of every page (or ~129px
   on the hub) is hidden behind the nav — invisible until v3.0.14 when
   the global black body background was removed and the underlap became
   visible.

   Scoped via :has() so it only applies on pages where our nav actually
   renders (e.g. not when gvc_should_render filter returns false). Hub
   has both rows visible; every spoke has only row 1. The WP admin bar
   is handled separately by an existing margin-top:32 rule on .nav-wrap. */
body:has(.nav-wrap[data-gvc-version="2"]){ padding-top: 81px; }
body:has(.nav-wrap[data-gvc-version="2"][data-gv-site="vault"]){ padding-top: 129px; }

/* Avoid the WP admin bar when it's present on admin sessions */
body.admin-bar .nav-wrap[data-gvc-version="2"]{
  margin-top: 32px;
}
@media screen and (max-width:782px){
  body.admin-bar .nav-wrap[data-gvc-version="2"]{
    margin-top: 46px;
  }
}

/* ============================================================
 * v2.0.12 — Per-site shield color, theme-leak hardening,
 *           universal secondary-nav hide
 *
 * 1) SHIELD COLOR: The base rules at lines 50-58 hardcode
 *    #D4A017 (gold). Override here using var(--gv-nav-accent)
 *    inlined on the .nav-wrap by render_nav. The selectors below
 *    have higher specificity than the base rules (added .nav-wrap
 *    parent), so they win cleanly. Logged-out outline shield +
 *    person icon now match the site's brand. Logged-in filled
 *    shield uses solid brand color too (gradient is preserved on
 *    gunvault.co only — its accent IS gold).
 *
 * 2) THEME LEAK: Spoke themes were overriding `.nav-step-word`
 *    color with their own dark text color (e.g. rgb(34,34,34)
 *    on gunshare). The base rule had specificity 0,1,0; the
 *    theme rules win. Bumped specificity to 0,2,0 by chaining
 *    .nav-wrap, with !important as a final safety net.
 *
 * 3) SECONDARY NAV: Hidden on every site for nav uniformity.
 *    Hub-only page menu (Home/Features/Plans/Insurance/Security/
 *    About) was making gunvault.co's nav visually taller than the
 *    spokes. Hub admins can re-enable per page via Customizer or
 *    by adding the menu through the theme.
 * ============================================================ */

/* --- Shield (logged out) --- */
.nav-wrap[data-gvc-version="2"] .nav-user-btn .shield-bg path{
  stroke: var(--gv-nav-accent, #D4A017);
}
.nav-wrap[data-gvc-version="2"] .nav-user-btn:hover .shield-bg path{
  stroke: var(--gv-nav-accent, #f0c040);
  filter: brightness(1.15);
}
.nav-wrap[data-gvc-version="2"] .nav-user-btn .person-icon{
  stroke: var(--gv-nav-accent, #D4A017);
}
.nav-wrap[data-gvc-version="2"] .nav-user-btn:hover .person-icon{
  stroke: var(--gv-nav-accent, #f0c040);
  filter: brightness(1.15);
}

/* --- Shield (logged in) --- */
.nav-wrap[data-gvc-version="2"] .nav-user-initial .shield-fill{
  fill: var(--gv-nav-accent, #C8962A);
}
/* Hub keeps the original gold gradient for the filled state — it's
   a richer treatment than a flat color, and gunvault's accent IS
   gold anyway. */
.nav-wrap[data-gv-site="vault"] .nav-user-initial .shield-fill{
  fill: url(#shieldGoldNav);
}
/* GunClear's accent is white. White on dark looks correct for the
   outline shield, but a pure-white FILLED shield clashes with the
   black initial letter for accessibility — use a darker contrast
   color for the filled state on Clear specifically. */
.nav-wrap[data-gv-site="clear"] .nav-user-initial .shield-fill{
  fill: #f0f0f0;
}
/* GunPrice's accent is blue (#1E88E5). White initials read better
   on the blue shield than the default black. !important because
   some build pipeline iteration was silently dropping this rule
   and the line-61 base (color:#0a0a0a) was winning. */
.nav-wrap[data-gv-site="price"] .nav-user-initial span,
.nav-wrap[data-gvc-version="2"][data-gv-site="price"] .nav-user-initial span {
  color: #fff !important;
}

/* --- Step-word/num color: high-specificity override against theme leaks --- */
.nav-wrap[data-gvc-version="2"] .nav-step .nav-step-word{
  color: rgba(255,255,255,.55) !important;
}
.nav-wrap[data-gvc-version="2"] .nav-step .nav-step-num{
  color: rgba(255,255,255,.35) !important;
}
.nav-wrap[data-gvc-version="2"] .nav-step:hover .nav-step-word{
  color: #fff !important;
}
.nav-wrap[data-gvc-version="2"] .nav-step.active .nav-step-word,
.nav-wrap[data-gvc-version="2"] .nav-step.active .nav-step-num{
  color: #fff !important;
}
.nav-wrap[data-gv-site="clear"] .nav-step.active .nav-step-word,
.nav-wrap[data-gv-site="clear"] .nav-step.active .nav-step-num{
  color: #111 !important;
}

/* ============================================================
 * v2.0.15 — Per-site text color on cream-nav themes
 *
 * Reverted v2.0.14 (which forced .nav background to #0a0a0a) —
 * gunshare.com and gunprice.com intentionally use cream navs as
 * their brand design. That bg should stay.
 *
 * The actual problem was the v2.0.12 rules forcing inactive +
 * hover step text to white via !important. White on cream =
 * invisible. Override per-site for the cream-nav spokes so the
 * inactive and hover text is dark instead — readable on cream.
 *
 * Active state is unaffected; the active pill paints its own
 * brand background (red on share, blue on price) and the white
 * active text remains correct on top of it.
 * ============================================================ */
.nav-wrap[data-gv-site="price"] .nav-step .nav-step-word,
.nav-wrap[data-gv-site="share"] .nav-step .nav-step-word{
  color: rgba(26,26,26,.65) !important;
}
.nav-wrap[data-gv-site="price"] .nav-step .nav-step-num,
.nav-wrap[data-gv-site="share"] .nav-step .nav-step-num{
  color: rgba(26,26,26,.45) !important;
}
.nav-wrap[data-gv-site="price"] .nav-step:hover .nav-step-word,
.nav-wrap[data-gv-site="share"] .nav-step:hover .nav-step-word{
  color: #111 !important;
}
.nav-wrap[data-gv-site="price"] .nav-step:hover,
.nav-wrap[data-gv-site="share"] .nav-step:hover{
  background: rgba(0,0,0,.05) !important;
}
/* Active step text override stays out of this block — the v2.0.12
   `.nav-step.active` white rules already handle it correctly on
   top of the colored pill. */

/* === Ghost-mode toggle (v3.0.10) — single-line layout with tagline ===========
   Native <input type="checkbox"> hidden offscreen for form semantics; the visible
   checkbox is a styled span. Theme-proof — bypasses input[type=checkbox] rules.
   Layout: [box] [Ghost Mode label] [flex spacer] [NO NAME · STAY PRIVATE tagline]
   On mobile (<= 480px) the tagline drops below the label to keep things readable.
   Border + fill use the per-site CSS vars set on .gv-modal-overlay:
     --gv-modal-accent       (hex string, e.g. #C8962A)
     --gv-modal-accent-rgb   (RGB triplet for opacity, e.g. 200,150,42) */

.gv-modal-overlay .gv-modal-ghost-row {
  padding: 14px 16px;
  background: rgba(var(--gv-modal-accent-rgb, 200, 150, 42), .06);
  border: 1px solid rgba(var(--gv-modal-accent-rgb, 200, 150, 42), .22);
  border-radius: 10px;
  margin: 0 0 14px;
  transition: border-color .15s, background .15s;
}
.gv-modal-overlay .gv-modal-ghost-row:hover {
  border-color: rgba(var(--gv-modal-accent-rgb, 200, 150, 42), .35);
}
.gv-modal-overlay .gv-modal-ghost-toggle {
  display: flex;
  align-items: center;
  gap: 11px;
  cursor: pointer;
  margin: 0;
  user-select: none;
  flex-wrap: wrap;
}
.gv-modal-overlay .gv-modal-ghost-cb {
  position: absolute !important;
  opacity: 0 !important;
  pointer-events: none !important;
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
}
.gv-modal-overlay .gv-modal-ghost-box {
  width: 20px;
  height: 20px;
  min-width: 20px;
  border: 2px solid rgba(var(--gv-modal-accent-rgb, 200, 150, 42), .6);
  border-radius: 5px;
  background: rgba(0, 0, 0, .35);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .35);
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition:
    background .18s cubic-bezier(.4, 0, .2, 1),
    border-color .18s cubic-bezier(.4, 0, .2, 1),
    box-shadow .18s cubic-bezier(.4, 0, .2, 1),
    transform .18s cubic-bezier(.4, 0, .2, 1);
  color: transparent;
  font-size: 14px;
  font-weight: 900;
  line-height: 1;
}
.gv-modal-overlay .gv-modal-ghost-toggle:hover .gv-modal-ghost-box {
  border-color: var(--gv-modal-accent, #C8962A);
  background: rgba(0, 0, 0, .5);
}
.gv-modal-overlay .gv-modal-ghost-cb:checked + .gv-modal-ghost-box {
  background: var(--gv-modal-accent, #C8962A);
  border-color: var(--gv-modal-accent, #C8962A);
  color: #0a0a0a;
  box-shadow:
    inset 0 1px 2px rgba(255, 255, 255, .25),
    0 0 0 4px rgba(var(--gv-modal-accent-rgb, 200, 150, 42), .18);
  transform: scale(1.05);
}
.gv-modal-overlay .gv-modal-ghost-cb:checked + .gv-modal-ghost-box::after {
  content: "\2713";  /* ✓ */
}
.gv-modal-overlay .gv-modal-ghost-cb:focus-visible + .gv-modal-ghost-box {
  outline: 2px solid var(--gv-modal-accent, #D4A017);
  outline-offset: 3px;
}
.gv-modal-overlay .gv-modal-ghost-text {
  font-size: 14px;
  color: rgba(255, 255, 255, .92);
  font-weight: 700;
  letter-spacing: .2px;
}
.gv-modal-overlay .gv-modal-ghost-tagline {
  margin-left: auto;       /* push to right edge of the flex row */
  font-family: 'Barlow Condensed', sans-serif;
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 1.4px;
  color: rgba(var(--gv-modal-accent-rgb, 200, 150, 42), .85);
  text-transform: uppercase;
  white-space: nowrap;     /* keep "NO NAME · STAY PRIVATE" on one line */
}
@media (max-width: 480px) {
  .gv-modal-overlay .gv-modal-ghost-tagline {
    margin-left: 31px;     /* under the label, past 20px box + 11px gap */
    flex-basis: 100%;      /* drop to its own line */
    white-space: normal;
    font-size: 11px;
    letter-spacing: 1.2px;
  }
}


/* === chrome-modal.css === */
/* Additions to the logged-in panel — plan badge + credits chips */
.gv-loggedin-plan-row{display:flex;align-items:center;justify-content:center;gap:10px;margin:14px auto 4px;padding:10px 14px;background:rgba(201,160,66,0.06);border:1px solid rgba(201,160,66,0.22);border-radius:10px;max-width:280px}
.gv-loggedin-plan-badge{font-family:'Barlow Condensed',sans-serif;font-size:10px;font-weight:800;letter-spacing:1.8px;padding:4px 9px;border-radius:4px;background:#c9a042;color:#111;text-transform:uppercase;white-space:nowrap;flex-shrink:0}
.gv-loggedin-plan-badge.free{background:rgba(255,255,255,0.12);color:rgba(255,255,255,0.75)}
.gv-loggedin-plan-name{font-size:13px;font-weight:600;color:#fff;white-space:nowrap}
.gv-loggedin-credits{display:flex;gap:8px;margin:10px auto 16px;justify-content:center;flex-wrap:wrap;max-width:280px}
.gv-loggedin-credit-chip{display:flex;align-items:center;gap:7px;padding:6px 11px;background:rgba(76,175,80,0.08);border:1px solid rgba(76,175,80,0.28);border-radius:8px;font-size:11px;color:rgba(255,255,255,0.85);font-weight:500}
.gv-loggedin-credit-num{font-family:'Barlow Condensed',sans-serif;font-size:15px;font-weight:800;color:#4caf50;line-height:1}
.gv-loggedin-credit-chip.zero{opacity:0.55}
.gv-loggedin-credit-chip.zero .gv-loggedin-credit-num{color:rgba(255,255,255,0.45)}


/* === chrome-platform-cards.css === */
.gv-plat-section{padding:72px 24px 100px;border-top:1px solid rgba(212,160,23,0.12);background:#080808}
.gv-plat-inner{max-width:1200px;margin:0 auto}
.gv-plat-eyebrow{font-family:'Barlow Condensed',sans-serif;font-size:clamp(12px,1.3vw,14px);font-weight:800;letter-spacing:3px;text-transform:uppercase;color:rgba(212,160,23,0.75);text-align:center;margin:0 0 10px 0}
.gv-plat-title{font-family:'Barlow Condensed',sans-serif;font-size:clamp(30px,3.5vw,48px);font-weight:900;color:#fff;letter-spacing:-0.5px;line-height:1;margin:0 0 12px 0;text-align:center}
.gv-plat-sub{font-family:'Barlow',sans-serif;font-size:clamp(13px,1.3vw,15px);color:rgba(255,255,255,0.55);text-align:center;margin:0 auto 52px;line-height:1.5;max-width:520px;text-wrap:balance}
.gv-plat-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;align-items:stretch}
.gv-plat-wrap{display:flex;flex-direction:column;align-items:center;height:100%}
.gv-plat-label{font-family:'Barlow Condensed',sans-serif;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#aaa;background:#111;border:1.5px solid #222;padding:7px 20px;border-radius:20px;margin-bottom:-14px;position:relative;z-index:5;white-space:nowrap;box-shadow:0 1px 4px rgba(0,0,0,.3);flex-shrink:0}
.gv-plat-label.active{background:#C8962A;color:#111;border-color:#C8962A;box-shadow:0 2px 8px rgba(212,160,23,.4)}
.gv-plat-card{flex:1;width:100%;border-radius:13px;padding:28px 16px 20px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px;cursor:pointer;transition:transform .15s,box-shadow .15s;box-sizing:border-box;position:relative;background:#111}
.gv-plat-card:hover{transform:translateY(-4px);box-shadow:0 10px 28px rgba(0,0,0,.5)}
.gv-plat-card img{height:46px;width:auto;flex-shrink:0}
.gv-plat-line{width:36px;height:2px;border-radius:2px}
.gv-plat-heading{font-family:'Barlow Condensed',sans-serif;font-size:17px;font-weight:700;color:#fff;line-height:1.1;margin-bottom:2px}
.gv-plat-copy{color:#888;font-size:12px;line-height:1.55;margin:0}
.gv-plat-btn{font-family:'Barlow Condensed',sans-serif;font-size:12px;font-weight:700;letter-spacing:1px;text-transform:uppercase;padding:10px 20px;border-radius:8px;border-width:1.5px;border-style:solid;margin-top:auto;display:block;width:100%;box-sizing:border-box;text-align:center;text-decoration:none}
.gv-plat-foot{font-family:'Barlow Condensed',sans-serif;font-size:clamp(15px,1.7vw,22px);font-weight:700;color:rgba(255,255,255,0.25);letter-spacing:.5px;text-align:center;margin:28px 0 0}
@media(max-width:900px){.gv-plat-grid{grid-template-columns:repeat(3,1fr)}.gv-plat-card:hover{transform:none}}
@media(max-width:700px){.gv-plat-grid{grid-template-columns:1fr;align-items:start}.gv-plat-wrap{height:auto}.gv-plat-card{flex:0 0 auto;height:auto;padding:20px 14px 16px;gap:8px}.gv-plat-card img{height:56px}.gv-plat-copy{flex:0 0 auto}.gv-plat-btn{margin-top:6px}.gv-plat-label{font-size:11px;padding:5px 14px;margin-bottom:-12px}}


/* === chrome-gating.css === */
/* ============================================================
   Gun Vault — Plan Gating UI
   Styles for locked-feature indicators and upgrade modal.
============================================================ */

/* Locked state — applied by plan-gating.js to elements with [data-gate]
   that the user's plan can't access. Subtle visual lock but still readable. */
.gv-locked{
  position:relative;
  opacity:0.55;
  cursor:pointer !important;
  filter:grayscale(0.25);
  transition:opacity .15s, filter .15s;
}
.gv-locked:hover{
  opacity:0.75;
  filter:grayscale(0);
}
.gv-locked::after{
  content:"🔒 Upgrade";
  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
  background:rgba(212,160,23,0.95);
  color:#1a1a1a;
  font-family:'Barlow Condensed',sans-serif;
  font-weight:900;
  font-size:11px;
  letter-spacing:1.5px;
  text-transform:uppercase;
  padding:6px 14px;
  border-radius:6px;
  box-shadow:0 4px 16px rgba(0,0,0,0.5);
  pointer-events:none;
  white-space:nowrap;
  z-index:2;
  opacity:0;
  transition:opacity .18s;
}
.gv-locked:hover::after{
  opacity:1;
}

/* Variant: inline badge rather than overlay — use data-gate-mode="inline" */
.gv-locked[data-gate-mode="inline"]{
  filter:none;
  opacity:1;
  cursor:default;
}
.gv-locked[data-gate-mode="inline"]::after{
  position:static;
  transform:none;
  display:inline-block;
  margin-left:8px;
  opacity:0.85;
  vertical-align:middle;
}

/* Input variant: locked form fields show the lock without an overlay */
input.gv-locked, textarea.gv-locked, select.gv-locked{
  background:rgba(212,160,23,0.04) !important;
  border-color:rgba(212,160,23,0.3) !important;
  cursor:not-allowed !important;
}
input.gv-locked::after, textarea.gv-locked::after, select.gv-locked::after{
  display:none;
}

/* Upgrade badge — decorative, shown next to gated features that aren't
   currently locked (e.g. "Contingency Heir [Legacy +]" header labels).
   Use manually via <span class="gv-upgrade-badge">Legacy +</span> */
.gv-upgrade-badge{
  display:inline-block;
  font-family:'Barlow Condensed',sans-serif;
  font-weight:800;
  font-size:10px;
  letter-spacing:1.2px;
  text-transform:uppercase;
  color:#D4A017;
  background:rgba(212,160,23,0.08);
  border:1px solid rgba(212,160,23,0.3);
  padding:3px 9px;
  border-radius:11px;
  margin-left:8px;
  vertical-align:middle;
}
.gv-upgrade-badge.legacy{color:#D4A017;border-color:rgba(212,160,23,0.4)}
.gv-upgrade-badge.trust{color:#c8962a;border-color:rgba(200,150,42,0.4)}
.gv-upgrade-badge.safe{color:#4ade80;border-color:rgba(76,222,128,0.4)}

/* Usage counter — shown on pages with resource caps ("2 of 3 firearms used") */
.gv-usage-counter{
  display:inline-flex;
  align-items:center;
  gap:10px;
  font-family:'Barlow Condensed',sans-serif;
  font-weight:700;
  font-size:12px;
  letter-spacing:1px;
  text-transform:uppercase;
  color:rgba(255,255,255,0.7);
  background:rgba(255,255,255,0.04);
  border:1px solid rgba(255,255,255,0.08);
  padding:8px 14px;
  border-radius:20px;
}
.gv-usage-counter.at-limit{
  background:rgba(212,160,23,0.08);
  color:#f0c040;
  border-color:rgba(212,160,23,0.3);
}
.gv-usage-counter strong{
  color:#fff;
  font-weight:900;
  font-size:14px;
}
.gv-usage-counter.at-limit strong{
  color:#f0c040;
}

/* ============ UPGRADE MODAL ============ */
.gv-upmodal{
  position:fixed;
  inset:0;
  background:rgba(0,0,0,0.88);
  backdrop-filter:blur(10px);
  z-index:100000;
  display:none;
  align-items:center;
  justify-content:center;
  padding:20px;
}
.gv-upmodal.open{
  display:flex;
}
.gv-upmodal-box{
  background:linear-gradient(180deg, #0f0d08 0%, #0a0a0a 100%);
  border:1px solid rgba(212,160,23,0.35);
  border-radius:16px;
  max-width:460px;
  width:100%;
  padding:36px 32px 28px;
  text-align:center;
  position:relative;
  box-shadow:0 20px 60px rgba(0,0,0,0.7);
}
.gv-upmodal-box::before{
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:0;
  height:2px;
  background:linear-gradient(90deg, transparent 0%, #D4A017 50%, transparent 100%);
}
.gv-upmodal-close{
  position:absolute;
  top:14px;
  right:16px;
  background:transparent;
  border:none;
  color:rgba(255,255,255,0.4);
  font-size:28px;
  line-height:1;
  cursor:pointer;
  padding:4px 10px;
  transition:color .12s;
}
.gv-upmodal-close:hover{
  color:#fff;
}
.gv-upmodal-icon{
  width:76px;
  height:76px;
  border-radius:50%;
  background:linear-gradient(135deg, #9a6800 0%, #f0c040 40%, #D4A017 100%);
  color:#1a1a1a;
  display:flex;
  align-items:center;
  justify-content:center;
  margin:0 auto 20px;
  box-shadow:0 8px 24px rgba(212,160,23,0.3);
}
.gv-upmodal-title{
  font-family:'Barlow Condensed',sans-serif;
  font-weight:900;
  font-size:30px;
  line-height:1;
  letter-spacing:-0.3px;
  text-transform:uppercase;
  color:#fff;
  margin-bottom:12px;
}
.gv-upmodal-reason{
  font-size:15px;
  line-height:1.55;
  color:rgba(255,255,255,0.75);
  margin-bottom:24px;
  max-width:340px;
  margin-left:auto;
  margin-right:auto;
}
.gv-upmodal-plan{
  background:rgba(212,160,23,0.06);
  border:1px solid rgba(212,160,23,0.25);
  border-radius:10px;
  padding:14px 18px;
  margin-bottom:22px;
}
.gv-upmodal-plan-label{
  font-family:'Barlow Condensed',sans-serif;
  font-weight:700;
  font-size:10px;
  letter-spacing:1.8px;
  text-transform:uppercase;
  color:rgba(212,160,23,0.8);
  margin-bottom:4px;
}
.gv-upmodal-plan-name{
  font-family:'Barlow Condensed',sans-serif;
  font-weight:900;
  font-size:22px;
  letter-spacing:0.2px;
  text-transform:uppercase;
  color:#fff;
}
.gv-upmodal-cta{
  display:block;
  width:100%;
  background:linear-gradient(135deg, #9a6800 0%, #f0c040 25%, #FFD060 50%, #D4A017 75%, #a07800 100%);
  color:#1a1a1a;
  font-family:'Barlow Condensed',sans-serif;
  font-weight:900;
  font-size:14px;
  letter-spacing:2px;
  text-transform:uppercase;
  padding:15px 20px;
  border-radius:9px;
  text-decoration:none;
  transition:transform .15s, box-shadow .15s;
  margin-bottom:10px;
  border:none;
  cursor:pointer;
}
.gv-upmodal-cta:hover{
  transform:translateY(-1px);
  box-shadow:0 6px 20px rgba(212,160,23,0.35);
  color:#1a1a1a;
}
.gv-upmodal-dismiss{
  background:transparent;
  border:none;
  color:rgba(255,255,255,0.5);
  font-family:'Barlow Condensed',sans-serif;
  font-weight:700;
  font-size:12px;
  letter-spacing:1.5px;
  text-transform:uppercase;
  padding:8px;
  cursor:pointer;
  transition:color .12s;
}
.gv-upmodal-dismiss:hover{
  color:#fff;
}

@media(max-width:480px){
  .gv-upmodal-box{padding:28px 22px 22px}
  .gv-upmodal-title{font-size:24px}
  .gv-upmodal-reason{font-size:14px}
}

