/*
Theme Name: Buzzly One
Theme URI: https://buzzly.net
Author: buzzly
Author URI: https://buzzly.net
Description: Twenty Twenty-Five child theme with navy/green/cream palette, Cormorant Garamond + Inter typography, and cards/buttons/hero styles. Designed to adapt native WordPress.
Template: twentytwentyfive
Version: 1.0
*/

/* ==========================================================
   1. Variables globales
   ========================================================== */
:root {
  --bo-bg: #0b0c10;
  --bo-bg-2: #15161c;
  --bo-bg-3: #1f2129;
  --bo-navy: #0b1f3a;
  --bo-navy-light: #162b4d;
  --bo-green: #1d9c5b;
  --bo-green-dark: #157a45;
  --bo-cream: #f7f1e3;
  --bo-gold: #c9a961;
  --bo-white: #ffffff;
  --bo-text: #e8eaf0;
  --bo-text-muted: #9aa2b2;
  --bo-border: rgba(255, 255, 255, 0.08);
  --bo-radius-sm: 8px;
  --bo-radius-md: 14px;
  --bo-radius-lg: 24px;
  --bo-radius-xl: 32px;
  --bo-shadow-sm: 0 4px 12px rgba(0, 0, 0, 0.2);
  --bo-shadow-md: 0 12px 32px rgba(0, 0, 0, 0.35);
  --bo-shadow-lg: 0 24px 64px rgba(0, 0, 0, 0.5);
  --bo-shadow-glow: 0 0 40px rgba(29, 156, 91, 0.18);
  --bo-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --bo-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
  --bo-font-sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --bo-font-serif: 'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --bo-container: 1200px;
}

/* ==========================================================
   2. Base
   ========================================================== */
html {
  scroll-behavior: smooth;
}

body {
  background-color: var(--bo-bg);
  color: var(--bo-text);
  font-family: var(--bo-font-sans);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body .is-layout-constrained > .alignwide,
body .is-layout-constrained > .alignfull {
  max-width: var(--bo-container);
}

h1, h2, h3, h4, h5, h6 {
  color: var(--bo-white);
  font-family: var(--bo-font-sans);
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.02em;
}

h1 em, h2 em, h3 em {
  font-family: var(--bo-font-serif);
  font-style: italic;
  font-weight: 500;
  color: var(--bo-green);
}

p {
  color: var(--bo-text-muted);
  line-height: 1.7;
}

a {
  color: var(--bo-green);
  transition: color 0.2s var(--bo-ease);
}

a:hover {
  color: var(--bo-gold);
}

/* ==========================================================
   3. Backgrounds
   ========================================================== */
.has-dark-bg { background-color: var(--bo-bg); }
.has-dark-2-bg { background-color: var(--bo-bg-2); }
.has-dark-3-bg { background-color: var(--bo-bg-3); }
.has-navy-bg { background-color: var(--bo-navy); }
.has-green-bg { background-color: var(--bo-green); }

/* ==========================================================
   3b. Iconos SVG inline (data URI) — evitan filtrado WP
   ========================================================== */
.bo-icon {
  display: inline-block;
  width: 28px;
  height: 28px;
  background-color: currentColor;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.bo-icon-code {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='16 18 22 12 16 6'%3E%3C/polyline%3E%3Cpolyline points='8 6 2 12 8 18'%3E%3C/polyline%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='16 18 22 12 16 6'%3E%3C/polyline%3E%3Cpolyline points='8 6 2 12 8 18'%3E%3C/polyline%3E%3C/svg%3E");
}

.bo-icon-search {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
}

.bo-icon-wordpress {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpath d='M12 6v12'%3E%3C/path%3E%3Cpath d='M8 8c0 4 4 8 4 12'%3E%3C/path%3E%3Cpath d='M16 8c0 4-4 8-4 12'%3E%3C/path%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpath d='M12 6v12'%3E%3C/path%3E%3Cpath d='M8 8c0 4 4 8 4 12'%3E%3C/path%3E%3Cpath d='M16 8c0 4-4 8-4 12'%3E%3C/path%3E%3C/svg%3E");
}

.bo-icon-shield {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'%3E%3C/path%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'%3E%3C/path%3E%3C/svg%3E");
}

.bo-icon-rocket {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z'%3E%3C/path%3E%3Cpath d='M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z'%3E%3C/path%3E%3Cpath d='M9 12H4s.55-3.03 2-4c1.62-1.08 4 0 4 0'%3E%3C/path%3E%3Cpath d='M12 15v5s3.03-.55 4-2c1.08-1.62 0-4 0-4'%3E%3C/path%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z'%3E%3C/path%3E%3Cpath d='M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z'%3E%3C/path%3E%3Cpath d='M9 12H4s.55-3.03 2-4c1.62-1.08 4 0 4 0'%3E%3C/path%3E%3Cpath d='M12 15v5s3.03-.55 4-2c1.08-1.62 0-4 0-4'%3E%3C/path%3E%3C/svg%3E");
}

.bo-icon-speed {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='13 2 3 14 12 14 11 22 21 10 12 10 13 2'%3E%3C/polygon%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='13 2 3 14 12 14 11 22 21 10 12 10 13 2'%3E%3C/polygon%3E%3C/svg%3E");
}

.bo-icon-check {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
}

/* ==========================================================
   4. Padding rule #1 — REGLA ABSOLUTA
   ========================================================== */
.has-py-120 { padding: 120px 0; }
.has-py-100 { padding: 100px 0; }
.has-py-80  { padding: 80px 0; }
.has-py-140 { padding: 140px 0 100px 0; }
.has-px-30  { padding-left: 30px; padding-right: 30px; }

@media (max-width: 782px) {
  .has-py-120,
  .has-py-100,
  .has-py-80,
  .has-py-140 { padding-top: 60px; padding-bottom: 60px; }
}

/* ==========================================================
   5. Tipografía
   ========================================================== */
.bo-display-1 {
  font-size: clamp(42px, 6vw, 84px);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.03em;
}

.bo-display-2 {
  font-size: clamp(32px, 4.5vw, 64px);
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.bo-lead {
  font-size: clamp(18px, 1.6vw, 22px);
  color: var(--bo-text-muted);
  line-height: 1.7;
  max-width: 680px;
}

.bo-serif {
  font-family: var(--bo-font-serif);
}

.bo-label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--bo-green);
}

.bo-label::before {
  content: '';
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bo-green);
  box-shadow: 0 0 12px var(--bo-green);
}

/* ==========================================================
   6. Botones
   ========================================================== */
.bo-btn,
.has-btn-cta,
.has-btn-outline {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 16px 28px;
  border-radius: 100px;
  font-family: var(--bo-font-sans);
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition: transform 0.25s var(--bo-ease), box-shadow 0.25s var(--bo-ease), background 0.2s;
  border: none;
}

.bo-btn:hover,
.has-btn-cta:hover,
.has-btn-outline:hover {
  transform: translateY(-2px);
}

.has-btn-cta {
  background: var(--bo-green);
  color: var(--bo-white);
  box-shadow: 0 8px 24px rgba(29, 156, 91, 0.35);
}

.has-btn-cta:hover {
  background: #22b368;
  box-shadow: 0 12px 32px rgba(29, 156, 91, 0.45);
  color: var(--bo-white);
}

.has-btn-outline {
  background: transparent;
  color: var(--bo-white);
  border: 1px solid var(--bo-border);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}

.has-btn-outline:hover {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.2);
  color: var(--bo-white);
}

/* Botón nativo de WordPress */
.wp-block-button.is-style-buzzly .wp-block-button__link {
  background: var(--bo-green);
  color: var(--bo-white);
  border-radius: 100px;
  padding: 16px 28px;
  font-weight: 600;
  transition: transform 0.25s var(--bo-ease), box-shadow 0.25s var(--bo-ease), background 0.2s;
}

.wp-block-button.is-style-buzzly .wp-block-button__link:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 32px rgba(29, 156, 91, 0.45);
}

.wp-block-button.is-style-buzzly-outline .wp-block-button__link {
  background: transparent;
  color: var(--bo-white);
  border: 1px solid var(--bo-border);
  border-radius: 100px;
  padding: 16px 28px;
  font-weight: 600;
}

.wp-block-button.is-style-buzzly-outline .wp-block-button__link:hover {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.2);
}

/* ==========================================================
   7. Header
   ========================================================== */
.bo-header {
  position: relative;
  z-index: 1000;
  background: rgba(11, 12, 16, 0.72);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid var(--bo-border);
  transition: background 0.3s var(--bo-ease), box-shadow 0.3s var(--bo-ease);
}

.bo-header.is-scrolled {
  background: rgba(11, 12, 16, 0.92);
  box-shadow: var(--bo-shadow-md);
}

.bo-header .wp-block-group {
  max-width: var(--bo-container);
  margin: 0 auto;
  padding: 24px 30px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.bo-header-brand {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}

.bo-logo {
  font-family: var(--bo-font-serif);
  font-size: 30px;
  font-weight: 700;
  color: var(--bo-white);
  text-decoration: none;
  letter-spacing: -0.02em;
  margin: 0;
}

.bo-logo span {
  color: var(--bo-green);
}

.bo-header-tag {
  font-size: 12px;
  color: var(--bo-text-muted);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin: 0;
}

/* ==========================================================
   8. Hero
   ========================================================== */
.bv-hero {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  min-height: 100svh;
  overflow: hidden;
}

.bv-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 20% 30%, rgba(29, 156, 91, 0.12), transparent 40%),
    radial-gradient(circle at 80% 70%, rgba(201, 169, 97, 0.08), transparent 40%);
  pointer-events: none;
}

.bv-hero .bo-label {
  position: relative;
  z-index: 1;
  margin-bottom: 24px;
}

.bv-hero h1 {
  position: relative;
  z-index: 1;
  max-width: 900px;
  margin: 0 auto 28px;
}

.bv-hero p {
  position: relative;
  z-index: 1;
  margin: 0 auto 40px;
}

.bv-hero .bo-cta-row {
  position: relative;
  z-index: 1;
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  justify-content: center;
}

.bv-hero .bo-scroll {
  position: absolute;
  bottom: 40px;
  left: 50%;
  transform: translateX(-50%);
  width: 26px;
  height: 40px;
  border: 2px solid rgba(255, 255, 255, 0.2);
  border-radius: 13px;
}

.bv-hero .bo-scroll::before {
  content: '';
  position: absolute;
  top: 7px;
  left: 50%;
  transform: translateX(-50%);
  width: 4px;
  height: 8px;
  background: var(--bo-green);
  border-radius: 2px;
  animation: bo-scroll-wheel 1.6s infinite;
}

@keyframes bo-scroll-wheel {
  0% { opacity: 1; transform: translateX(-50%) translateY(0); }
  100% { opacity: 0; transform: translateX(-50%) translateY(12px); }
}

/* ==========================================================
   8b. Logos de stack (con bloques nativos: párrafos vacíos + CSS)
   ========================================================== */
.bo-logos {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 48px;
  flex-wrap: wrap;
}

.bo-logo-item {
  display: flex;
  align-items: center;
  gap: 12px;
  color: var(--bo-text-muted);
  font-size: 16px;
  font-weight: 600;
}

.bo-logo-item p {
  margin: 0;
  color: inherit;
}

.bo-logo-mark,
.bo-logo-mark.bo-logo-wordpress,
.bo-logo-mark.bo-logo-n8n,
.bo-logo-mark.bo-logo-aws {
  width: 32px;
  height: 32px;
  display: inline-block;
  background-color: currentColor;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.bo-logo-wordpress {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm6.155 17.655c-1.533.888-3.31 1.4-5.213 1.4-1.92 0-3.69-.505-5.22-1.396L17.04 7.332l1.115 5.86c.023.115.039.236.039.36 0 1.38-1.155 2.505-2.58 2.505-.12 0-.234-.022-.346-.042l2.51 4.642c2.11-.975 3.66-3.018 3.965-5.546h.002l1.459-8.5zM6.87 6.87l6.93 14.93c.003.008.01.014.014.022-.04-.002-.08-.01-.12-.013L6.87 6.87zM7.17 5.62l-.006-.012 6.99 14.85c.17-.035.336-.08.5-.135L7.17 5.62zm4.79-1.61c.92 0 1.74.07 1.74.07s.78 3.36.86 3.72c.08.36-.24.74-.6.6-.36-.14-1.48-.56-1.48-.56s-1.13.42-1.49.56c-.36.14-.68-.24-.6-.6.08-.36.86-3.72.86-3.72s.82-.07 1.74-.07zm-4.63 4.6l2.22 11.75c.06.32-.1.62-.38.72-.28.1-.59-.04-.7-.34L6.62 8.73c-.11-.3.06-.64.34-.74.28-.1.62.08.72.36v.02zm10.7-.01l2.28 11.74c.06.3-.04.61-.32.71-.28.1-.6-.06-.71-.36l-2.14-11.75c-.11-.3.06-.63.34-.73.28-.1.61.08.72.36l-.17.07z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm6.155 17.655c-1.533.888-3.31 1.4-5.213 1.4-1.92 0-3.69-.505-5.22-1.396L17.04 7.332l1.115 5.86c.023.115.039.236.039.36 0 1.38-1.155 2.505-2.58 2.505-.12 0-.234-.022-.346-.042l2.51 4.642c2.11-.975 3.66-3.018 3.965-5.546h.002l1.459-8.5zM6.87 6.87l6.93 14.93c.003.008.01.014.014.022-.04-.002-.08-.01-.12-.013L6.87 6.87zM7.17 5.62l-.006-.012 6.99 14.85c.17-.035.336-.08.5-.135L7.17 5.62zm4.79-1.61c.92 0 1.74.07 1.74.07s.78 3.36.86 3.72c.08.36-.24.74-.6.6-.36-.14-1.48-.56-1.48-.56s-1.13.42-1.49.56c-.36.14-.68-.24-.6-.6.08-.36.86-3.72.86-3.72s.82-.07 1.74-.07zm-4.63 4.6l2.22 11.75c.06.32-.1.62-.38.72-.28.1-.59-.04-.7-.34L6.62 8.73c-.11-.3.06-.64.34-.74.28-.1.62.08.72.36v.02zm10.7-.01l2.28 11.74c.06.3-.04.61-.32.71-.28.1-.6-.06-.71-.36l-2.14-11.75c-.11-.3.06-.63.34-.73.28-.1.61.08.72.36l-.17.07z'/%3E%3C/svg%3E");
}

.bo-logo-n8n {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M21.4 10.5l-4.2-7.3c-.8-1.4-2.3-2.2-3.8-2.2H9.6c-1.6 0-3 .8-3.8 2.2L1.6 10.5c-.8 1.4-.8 3.1 0 4.5l4.2 7.3c.8 1.4 2.3 2.2 3.8 2.2h4c1.6 0 3-.8 3.8-2.2l4.2-7.3c.8-1.4.8-3.1-.2-4.5zm-8.9 7.5h-1V14l-2.6 3.3-.7-.6 3.2-4-3.2-4 .7-.6 2.6 3.3V6h1v5.4l2.6-3.3.7.6-3.2 4 3.2 4-.7.6-2.6-3.3v4z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M21.4 10.5l-4.2-7.3c-.8-1.4-2.3-2.2-3.8-2.2H9.6c-1.6 0-3 .8-3.8 2.2L1.6 10.5c-.8 1.4-.8 3.1 0 4.5l4.2 7.3c.8 1.4 2.3 2.2 3.8 2.2h4c1.6 0 3-.8 3.8-2.2l4.2-7.3c.8-1.4.8-3.1-.2-4.5zm-8.9 7.5h-1V14l-2.6 3.3-.7-.6 3.2-4-3.2-4 .7-.6 2.6 3.3V6h1v5.4l2.6-3.3.7.6-3.2 4 3.2 4-.7.6-2.6-3.3v4z'/%3E%3C/svg%3E");
}

.bo-logo-aws {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M6.763 10.036c0 .296.032.535.088.71.064.176.144.368.256.576.04.063.056.127.056.183 0 .08-.048.16-.152.24l-.503.335a.383.383 0 0 1-.208.072c-.08 0-.16-.04-.239-.112a2.47 2.47 0 0 1-.287-.375 6.18 6.18 0 0 1-.248-.471c-.622.734-1.405 1.101-2.347 1.101-.67 0-1.205-.191-1.596-.574-.391-.384-.59-.894-.59-1.533 0-.678.239-1.23.726-1.644.487-.415 1.133-.623 1.955-.623.272 0 .551.024.846.064.296.04.6.104.918.176v-.583c0-.607-.127-1.03-.375-1.277-.255-.248-.686-.367-1.3-.367-.28 0-.568.031-.863.103-.295.072-.583.16-.863.272a2.16 2.16 0 0 1-.28.104.488.488 0 0 1-.127.023c-.112 0-.168-.08-.168-.247v-.391c0-.128.016-.224.056-.28a.597.597 0 0 1 .224-.167c.279-.144.614-.264 1.005-.36a4.84 4.84 0 0 1 1.246-.145c.95 0 1.644.216 2.091.647.439.43.662 1.085.662 1.963v2.586zm-3.24 1.096c.263 0 .534-.048.822-.144.287-.096.543-.271.758-.502.127-.152.223-.32.272-.502.047-.183.08-.402.08-.658v-.31a6.68 6.68 0 0 0-.735-.136 6.02 6.02 0 0 0-.75-.048c-.535 0-.926.104-1.19.32-.263.215-.39.518-.39.917 0 .375.095.655.295.846.191.2.47.297.838.297zm6.41.862c-.144 0-.24-.024-.304-.08-.064-.048-.12-.16-.168-.311L7.586 5.55a1.398 1.398 0 0 1-.072-.32c0-.128.064-.2.191-.2h.783c.151 0 .255.025.31.08.065.048.113.16.16.312l1.342 5.284 1.245-5.284c.04-.16.088-.264.151-.312a.549.549 0 0 1 .32-.08h.638c.152 0 .256.025.32.08.063.048.12.16.151.312l1.261 5.348 1.381-5.348c.048-.16.104-.264.16-.312a.547.547 0 0 1 .311-.08h.743c.128 0 .2.065.2.2 0 .04-.009.08-.018.129a1.137 1.137 0 0 1-.056.2l-1.923 6.17c-.048.16-.104.263-.168.311a.548.548 0 0 1-.303.08h-.687c-.151 0-.255-.024-.32-.08-.063-.056-.119-.16-.15-.32l-1.238-5.148-1.23 5.14c-.04.16-.087.264-.15.32-.065.056-.177.08-.32.08h-.686zm10.256.216c-.415 0-.83-.048-1.229-.143-.399-.096-.71-.2-.918-.32-.128-.071-.215-.151-.247-.223a.563.563 0 0 1-.048-.224v-.407c0-.167.064-.247.183-.247.048 0 .096.008.144.024.048.016.12.048.2.08.271.12.566.215.878.28.319.064.63.096.967.096.51 0 .91-.088 1.189-.263.28-.176.431-.431.431-.75 0-.224-.08-.407-.239-.551-.16-.144-.454-.272-.886-.399l-1.277-.354c-.643-.183-1.117-.454-1.405-.814-.288-.36-.439-.766-.439-1.213 0-.351.08-.662.239-.942.16-.28.375-.527.646-.734.272-.2.583-.349.95-.454.368-.104.758-.152 1.174-.152.16 0 .335.008.51.032.184.024.358.056.534.088.175.032.342.08.502.127.16.048.287.096.383.144a.78.78 0 0 1 .287.2.436.436 0 0 1 .08.263v.375c0 .168-.064.256-.184.256-.064 0-.168-.032-.303-.096-.454-.208-.964-.312-1.53-.312-.463 0-.834.071-1.101.223-.264.151-.4.375-.4.67 0 .216.08.4.24.543.16.144.472.288.926.415l1.197.343c.636.183 1.101.439 1.381.766.28.328.415.702.415 1.117 0 .36-.072.686-.216.975-.143.288-.343.543-.598.758-.256.215-.566.375-.926.487-.367.12-.758.176-1.174.176z'/%3E%3Cpath fill='%23fff' d='M18.901 19.504c-2.478 1.826-6.073 2.795-9.166 2.795-4.334 0-8.242-1.6-11.199-4.262-.232-.208-.024-.496.256-.335 3.193 1.858 7.134 2.98 11.206 2.98 2.747 0 5.766-.572 8.535-1.752.419-.176.775.28.368.574z'/%3E%3Cpath fill='%23fff' d='M19.868 18.407c-.316-.407-2.076-.199-2.875-.1-.24.03-.279-.176-.06-.327 1.406-.99 3.72-.703 3.988-.371.27.327-.072 2.643-1.39 3.75-.203.175-.399.08-.31-.143.3-.75.975-2.42.647-2.809z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M6.763 10.036c0 .296.032.535.088.71.064.176.144.368.256.576.04.063.056.127.056.183 0 .08-.048.16-.152.24l-.503.335a.383.383 0 0 1-.208.072c-.08 0-.16-.04-.239-.112a2.47 2.47 0 0 1-.287-.375 6.18 6.18 0 0 1-.248-.471c-.622.734-1.405 1.101-2.347 1.101-.67 0-1.205-.191-1.596-.574-.391-.384-.59-.894-.59-1.533 0-.678.239-1.23.726-1.644.487-.415 1.133-.623 1.955-.623.272 0 .551.024.846.064.296.04.6.104.918.176v-.583c0-.607-.127-1.03-.375-1.277-.255-.248-.686-.367-1.3-.367-.28 0-.568.031-.863.103-.295.072-.583.16-.863.272a2.16 2.16 0 0 1-.28.104.488.488 0 0 1-.127.023c-.112 0-.168-.08-.168-.247v-.391c0-.128.016-.224.056-.28a.597.597 0 0 1 .224-.167c.279-.144.614-.264 1.005-.36a4.84 4.84 0 0 1 1.246-.145c.95 0 1.644.216 2.091.647.439.43.662 1.085.662 1.963v2.586zm-3.24 1.096c.263 0 .534-.048.822-.144.287-.096.543-.271.758-.502.127-.152.223-.32.272-.502.047-.183.08-.402.08-.658v-.31a6.68 6.68 0 0 0-.735-.136 6.02 6.02 0 0 0-.75-.048c-.535 0-.926.104-1.19.32-.263.215-.39.518-.39.917 0 .375.095.655.295.846.191.2.47.297.838.297zm6.41.862c-.144 0-.24-.024-.304-.08-.064-.048-.12-.16-.168-.311L7.586 5.55a1.398 1.398 0 0 1-.072-.32c0-.128.064-.2.191-.2h.783c.151 0 .255.025.31.08.065.048.113.16.16.312l1.342 5.284 1.245-5.284c.04-.16.088-.264.151-.312a.549.549 0 0 1 .32-.08h.638c.152 0 .256.025.32.08.063.048.12.16.151.312l1.261 5.348 1.381-5.348c.048-.16.104-.264.16-.312a.547.547 0 0 1 .311-.08h.743c.128 0 .2.065.2.2 0 .04-.009.08-.018.129a1.137 1.137 0 0 1-.056.2l-1.923 6.17c-.048.16-.104.263-.168.311a.548.548 0 0 1-.303.08h-.687c-.151 0-.255-.024-.32-.08-.063-.056-.119-.16-.15-.32l-1.238-5.148-1.23 5.14c-.04.16-.087.264-.15.32-.065.056-.177.08-.32.08h-.686zm10.256.216c-.415 0-.83-.048-1.229-.143-.399-.096-.71-.2-.918-.32-.128-.071-.215-.151-.247-.223a.563.563 0 0 1-.048-.224v-.407c0-.167.064-.247.183-.247.048 0 .096.008.144.024.048.016.12.048.2.08.271.12.566.215.878.28.319.064.63.096.967.096.51 0 .91-.088 1.189-.263.28-.176.431-.431.431-.75 0-.224-.08-.407-.239-.551-.16-.144-.454-.272-.886-.399l-1.277-.354c-.643-.183-1.117-.454-1.405-.814-.288-.36-.439-.766-.439-1.213 0-.351.08-.662.239-.942.16-.28.375-.527.646-.734.272-.2.583-.349.95-.454.368-.104.758-.152 1.174-.152.16 0 .335.008.51.032.184.024.358.056.534.088.175.032.342.08.502.127.16.048.287.096.383.144a.78.78 0 0 1 .287.2.436.436 0 0 1 .08.263v.375c0 .168-.064.256-.184.256-.064 0-.168-.032-.303-.096-.454-.208-.964-.312-1.53-.312-.463 0-.834.071-1.101.223-.264.151-.4.375-.4.67 0 .216.08.4.24.543.16.144.472.288.926.415l1.197.343c.636.183 1.101.439 1.381.766.28.328.415.702.415 1.117 0 .36-.072.686-.216.975-.143.288-.343.543-.598.758-.256.215-.566.375-.926.487-.367.12-.758.176-1.174.176z'/%3E%3Cpath fill='%23fff' d='M18.901 19.504c-2.478 1.826-6.073 2.795-9.166 2.795-4.334 0-8.242-1.6-11.199-4.262-.232-.208-.024-.496.256-.335 3.193 1.858 7.134 2.98 11.206 2.98 2.747 0 5.766-.572 8.535-1.752.419-.176.775.28.368.574z'/%3E%3Cpath fill='%23fff' d='M19.868 18.407c-.316-.407-2.076-.199-2.875-.1-.24.03-.279-.176-.06-.327 1.406-.99 3.72-.703 3.988-.371.27.327-.072 2.643-1.39 3.75-.203.175-.399.08-.31-.143.3-.75.975-2.42.647-2.809z'/%3E%3C/svg%3E");
}

/* ==========================================================
   9. Grids y cards
   ========================================================== */
.bo-grid-2,
.bo-grid-3,
.bo-grid-4 {
  display: grid;
  gap: 24px;
}

.bo-grid-2 { grid-template-columns: repeat(2, 1fr); }
.bo-grid-3 { grid-template-columns: repeat(3, 1fr); }
.bo-grid-4 { grid-template-columns: repeat(4, 1fr); }

@media (max-width: 980px) {
  .bo-grid-3,
  .bo-grid-4 { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 640px) {
  .bo-grid-2,
  .bo-grid-3,
  .bo-grid-4 { grid-template-columns: 1fr; }
}

.bo-card {
  position: relative;
  background: var(--bo-bg-2);
  border: 1px solid var(--bo-border);
  border-radius: var(--bo-radius-lg);
  padding: 32px;
  transition: transform 0.3s var(--bo-ease), box-shadow 0.3s var(--bo-ease), border-color 0.3s;
  overflow: hidden;
}

.bo-card::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--bo-green), var(--bo-gold));
  opacity: 0;
  transition: opacity 0.3s;
}

.bo-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--bo-shadow-lg), var(--bo-shadow-glow);
  border-color: rgba(255, 255, 255, 0.14);
}

.bo-card:hover::before {
  opacity: 1;
}

.bo-card-icon {
  width: 56px;
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--bo-radius-md);
  background: rgba(29, 156, 91, 0.12);
  color: var(--bo-green);
  margin-bottom: 24px;
  font-size: 24px;
}

.bo-card-icon svg {
  width: 28px;
  height: 28px;
  stroke-width: 2;
}

.bo-card-icon:is([class*="has-icon"]) svg {
  width: 100%;
  height: 100%;
}

.bo-card h3 {
  font-size: 20px;
  margin-bottom: 12px;
}

.bo-card p {
  font-size: 15px;
  margin: 0;
}

/* ==========================================================
   10. Section header
   ========================================================== */
.bv-section-header {
  text-align: center;
  max-width: 720px;
  margin: 0 auto 64px;
}

.bv-section-header h2 {
  margin-bottom: 18px;
}

/* ==========================================================
   11. Stats
   ========================================================== */
.bo-stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 24px;
  text-align: center;
}

@media (max-width: 782px) {
  .bo-stats { grid-template-columns: repeat(2, 1fr); }
}

.bo-stat-number {
  font-size: clamp(40px, 5vw, 64px);
  font-weight: 700;
  background: linear-gradient(135deg, var(--bo-green), var(--bo-gold));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  line-height: 1;
  margin-bottom: 8px;
}

.bo-stat-label {
  font-size: 14px;
  color: var(--bo-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

/* ==========================================================
   12. Testimonials
   ========================================================== */
.bo-testimonial {
  background: var(--bo-bg-2);
  border: 1px solid var(--bo-border);
  border-radius: var(--bo-radius-lg);
  padding: 36px;
  position: relative;
}

.bo-testimonial::before {
  content: '"';
  position: absolute;
  top: 20px;
  left: 28px;
  font-family: var(--bo-font-serif);
  font-size: 80px;
  line-height: 1;
  color: var(--bo-green);
  opacity: 0.25;
}

.bo-testimonial p {
  font-family: var(--bo-font-serif);
  font-size: 20px;
  font-style: italic;
  color: var(--bo-text);
  margin-bottom: 24px;
  position: relative;
  z-index: 1;
}

/* ==========================================================
   13. CTA / Banner
   ========================================================== */
.bv-cta {
  position: relative;
  text-align: center;
  border-radius: var(--bo-radius-xl);
  overflow: hidden;
  background: linear-gradient(135deg, var(--bo-navy), var(--bo-navy-light));
  border: 1px solid rgba(255, 255, 255, 0.08);
}

.bv-cta::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 50% 0%, rgba(29, 156, 91, 0.18), transparent 50%),
    radial-gradient(circle at 80% 100%, rgba(201, 169, 97, 0.12), transparent 40%);
  pointer-events: none;
}

.bv-cta > * {
  position: relative;
  z-index: 1;
}

/* ==========================================================
   14. FAQ con bloque Details nativo
   ========================================================== */
.bo-faq {
  display: flex;
  flex-direction: column;
  gap: 0;
  max-width: 800px;
  margin: 0 auto;
}

.bo-faq .wp-block-details.bo-faq-item,
.bo-faq-item {
  border-bottom: 1px solid var(--bo-border);
  padding: 24px 0;
  color: var(--bo-text-muted);
}

.bo-faq .wp-block-details.bo-faq-item summary,
.bo-faq-item summary,
.bo-faq-question {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  font-size: 18px;
  font-weight: 600;
  color: var(--bo-white);
  cursor: pointer;
  list-style: none;
}

.bo-faq .wp-block-details.bo-faq-item summary::-webkit-details-marker,
.bo-faq-item summary::-webkit-details-marker {
  display: none;
}

.bo-faq .wp-block-details.bo-faq-item summary::after,
.bo-faq-item summary::after,
.bo-faq-question::after {
  content: '+';
  font-size: 24px;
  color: var(--bo-green);
  flex-shrink: 0;
  transition: transform 0.2s var(--bo-ease);
}

.bo-faq .wp-block-details.bo-faq-item[open] summary::after,
.bo-faq-item[open] summary::after {
  transform: rotate(45deg);
}

.bo-faq .wp-block-details.bo-faq-item p,
.bo-faq-answer {
  color: var(--bo-text-muted);
  padding-top: 12px;
  max-width: 760px;
}

/* ==========================================================
   15. Footer
   ========================================================== */
.bo-footer {
  background: var(--bo-bg-2);
  border-top: 1px solid var(--bo-border);
}

.bo-footer a {
  color: var(--bo-text-muted);
  text-decoration: none;
  font-size: 14px;
}

.bo-footer a:hover {
  color: var(--bo-white);
}

/* ==========================================================
   16. Reveal scroll
   ========================================================== */
.bo-reveal {
  opacity: 1;
  transform: none;
  transition: opacity 0.6s var(--bo-ease), transform 0.6s var(--bo-ease);
}

.bo-reveal.js-animate {
  opacity: 0;
  transform: translateY(24px);
}

.bo-reveal.js-animate.is-visible {
  opacity: 1;
  transform: none;
}

/* Checklist */
.bo-checklist {
  list-style: none;
  padding: 0;
  margin: 0;
}

.bo-checklist li {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  color: var(--bo-text);
  font-size: 15px;
}

.bo-checklist li svg {
  flex-shrink: 0;
  color: var(--bo-green);
}

/* ==========================================================
   17. Formularios (dark)
   ========================================================== */
input[type="text"],
input[type="email"],
input[type="tel"],
textarea,
select,
.wpcf7-form-control {
  background: var(--bo-bg-3);
  border: 1px solid var(--bo-border);
  border-radius: var(--bo-radius-md);
  color: var(--bo-white);
  padding: 14px 18px;
  font-size: 15px;
  width: 100%;
  transition: border-color 0.2s, box-shadow 0.2s, background 0.2s;
}

input:focus,
textarea:focus,
select:focus,
.wpcf7-form-control:focus {
  outline: none;
  border-color: var(--bo-green);
  box-shadow: 0 0 0 3px rgba(29, 156, 91, 0.15);
  background: var(--bo-bg-2);
}

input::placeholder,
textarea::placeholder,
.wpcf7-form-control::placeholder {
  color: var(--bo-text-muted);
}

label,
.wpcf7-form-label {
  display: block;
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--bo-text-muted);
  margin-bottom: 8px;
}

/* Contact Form 7 custom layout */
.bo-form-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}

.bo-form-grid > p,
.bo-form-field {
  display: flex;
  flex-direction: column;
  margin: 0;
}

.bo-form-grid > p:nth-child(1),
.bo-form-grid > p:nth-child(2) {
  grid-column: span 1;
}

.bo-form-grid > p:nth-child(n+3),
.bo-form-full {
  grid-column: 1 / -1;
}

@media (max-width: 640px) {
  .bo-form-grid {
    grid-template-columns: 1fr;
  }
  .bo-form-grid > p {
    grid-column: 1 / -1 !important;
  }
}

.bo-form-grid .wpcf7-submit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 16px 32px;
  border-radius: 100px;
  font-family: var(--bo-font-sans);
  font-size: 15px;
  font-weight: 600;
  background: var(--bo-green);
  color: var(--bo-white);
  border: none;
  cursor: pointer;
  transition: transform 0.25s var(--bo-ease), box-shadow 0.25s var(--bo-ease), background 0.2s;
  width: auto;
}

.bo-form-grid .wpcf7-submit:hover {
  transform: translateY(-2px);
  background: #22b368;
  box-shadow: 0 12px 32px rgba(29, 156, 91, 0.45);
}

/* CF7 response messages */
.wpcf7-response-output {
  background: var(--bo-bg-3);
  border: 1px solid var(--bo-border);
  border-radius: var(--bo-radius-md);
  color: var(--bo-text);
  padding: 16px 20px;
  margin: 24px 0 0;
  font-size: 15px;
}

.wpcf7-form-sent .wpcf7-response-output {
  border-color: var(--bo-green);
  color: var(--bo-green);
  background: rgba(29, 156, 91, 0.1);
}

.wpcf7-form.invalid .wpcf7-response-output,
.wpcf7-form .wpcf7-not-valid-tip {
  border-color: #e74c3c;
  color: #e74c3c;
}

.wpcf7-form-control-wrap {
  display: block;
}

.wpcf7-not-valid-tip {
  font-size: 13px;
  margin-top: 6px;
}

.wpcf7-spinner {
  background: var(--bo-green);
  margin-left: 12px;
}

/* ==========================================================
   18. Bloques nativos overrides
   ========================================================== */
.wp-block-separator {
  border-color: var(--bo-border);
  opacity: 0.5;
}

.wp-block-image img {
  border-radius: var(--bo-radius-lg);
}

.wp-block-columns {
  gap: 32px;
}

/* ==========================================================
   19. Admin bar disabled compensation
   ========================================================== */
body.logged-in .bo-header {
  top: 0;
}
/* ==========================================================
   20. Modal contacto
   ========================================================== */
.bo-modal {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  visibility: hidden;
  opacity: 0;
  transition: opacity 0.3s var(--bo-ease), visibility 0.3s;
}

.bo-modal.is-open {
  visibility: visible;
  opacity: 1;
}

.bo-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(11, 12, 16, 0.85);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

.bo-modal-panel {
  position: relative;
  width: 100%;
  max-width: 640px;
  max-height: calc(100svh - 48px);
  overflow-y: auto;
  background: linear-gradient(135deg, var(--bo-navy), var(--bo-navy-light));
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: var(--bo-radius-xl);
  padding: 40px;
  box-shadow: var(--bo-shadow-lg);
}

.bo-modal-panel::-webkit-scrollbar {
  width: 8px;
}

.bo-modal-panel::-webkit-scrollbar-thumb {
  background: var(--bo-border);
  border-radius: 4px;
}

.bo-modal-close {
  position: absolute;
  top: 18px;
  right: 18px;
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid var(--bo-border);
  border-radius: 50%;
  color: var(--bo-text-muted);
  cursor: pointer;
  font-size: 22px;
  line-height: 1;
  transition: background 0.2s, color 0.2s;
}

.bo-modal-close:hover {
  background: rgba(255, 255, 255, 0.12);
  color: var(--bo-white);
}

.bo-modal-title {
  font-size: clamp(28px, 4vw, 40px);
  font-weight: 700;
  color: var(--bo-white);
  margin-bottom: 12px;
  text-align: center;
}

.bo-modal-intro {
  text-align: center;
  color: var(--bo-text-muted);
  margin-bottom: 32px;
}

body.bo-modal-active {
  overflow: hidden;
}

@media (max-width: 640px) {
  .bo-modal {
    padding: 16px;
  }
  .bo-modal-panel {
    padding: 28px 24px;
    max-height: calc(100svh - 32px);
  }
}
.has-py-160 { padding: 160px 0; }

@media (max-width: 782px) {
  .has-py-160 { padding-top: 100px; padding-bottom: 100px; }
}

.bo-copy-text {
  font-size: clamp(18px, 2vw, 24px);
  color: var(--bo-text-muted);
  line-height: 1.7;
  text-align: center;
  max-width: 820px;
  margin: 0 auto;
}

/* ==========================================================
   21. Landing global texture
   ========================================================== */
.bo-landing {
  position: relative;
  min-height: 100vh;
  background: var(--bo-bg);
  overflow: hidden;
}

.bo-landing::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 20% 30%, rgba(29, 156, 91, 0.14), transparent 45%),
    radial-gradient(circle at 80% 75%, rgba(201, 169, 97, 0.10), transparent 45%),
    radial-gradient(circle at 50% 90%, rgba(29, 156, 91, 0.08), transparent 50%);
  pointer-events: none;
  z-index: 0;
}

.bo-landing > * {
  position: relative;
  z-index: 1;
}

.bv-hero::before {
  display: none;
}

.bv-hero {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  min-height: 100svh;
}

.has-py-180 { padding: 180px 0; }

@media (max-width: 782px) {
  .has-py-180 { padding-top: 80px; padding-bottom: 80px; }
}

.bo-footer-line {
  margin-top: auto;
  padding-top: 60px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bo-text-muted);
  text-align: center;
}

.bo-footer-line::before {
  content: '';
  display: block;
  width: 60px;
  height: 1px;
  background: var(--bo-border);
  margin: 0 auto 24px;
}

/* ==========================================================
   21. Landing global texture (full viewport, no container bounds)
   ========================================================== */
.bo-landing {
  position: relative;
  min-height: 100vh;
  background: var(--bo-bg);
  overflow: hidden;
}

.bo-landing::before {
  content: '';
  position: fixed;
  inset: 0;
  background:
    radial-gradient(circle at 20% 30%, rgba(29, 156, 91, 0.14), transparent 45%),
    radial-gradient(circle at 80% 75%, rgba(201, 169, 97, 0.10), transparent 45%),
    radial-gradient(circle at 50% 90%, rgba(29, 156, 91, 0.08), transparent 50%);
  pointer-events: none;
  z-index: 0;
}

.bo-landing > * {
  position: relative;
  z-index: 1;
}

.bv-hero {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  min-height: 100svh;
  padding: 80px 24px;
  box-sizing: border-box;
}

.bv-hero::before {
  display: none;
}

.bo-footer-line {
  margin-top: auto;
  padding-top: 60px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bo-text-muted);
  text-align: center;
}

.bo-footer-line::before {
  content: '';
  display: block;
  width: 60px;
  height: 1px;
  background: var(--bo-border);
  margin: 0 auto 24px;
}

/* ==========================================================
   22. Compact hero (no scroll)
   ========================================================== */
.bv-hero {
  min-height: 100svh;
  padding: 60px 24px 40px;
  justify-content: center;
}

.bv-hero .bo-label {
  margin-bottom: 16px;
}

.bv-hero h1 {
  margin: 0 auto 18px;
}

.bv-hero .bo-lead {
  margin: 0 auto 28px;
  max-width: 760px;
}

.bv-hero .bo-cta-row {
  margin-bottom: 24px;
}

.bo-logos {
  gap: 36px;
  margin-bottom: 20px;
}

.bo-footer-line {
  padding-top: 24px;
  margin-top: 0;
  font-size: 11px;
}

.bo-footer-line::before {
  margin-bottom: 16px;
}

@media (max-height: 780px) {
  .bv-hero {
    padding-top: 40px;
    padding-bottom: 28px;
  }
  .bv-hero h1 {
    margin-bottom: 14px;
  }
  .bv-hero .bo-lead {
    margin-bottom: 22px;
  }
  .bo-logos {
    gap: 28px;
    margin-bottom: 14px;
  }
  .bo-footer-line {
    padding-top: 16px;
  }
}

/* ==========================================================
   23. Logo carousel
   ========================================================== */
.bo-logos {
  width: 100%;
  max-width: 100%;
  overflow: hidden;
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  margin-bottom: 16px;
}

.bo-logos-track {
  display: flex;
  align-items: center;
  gap: 56px;
  width: max-content;
  animation: bo-logos-scroll 35s linear infinite;
}

.bo-logos:hover .bo-logos-track {
  animation-play-state: paused;
}

.bo-logo-item {
  flex-shrink: 0;
}

@keyframes bo-logos-scroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

.bo-logo-php {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12.07 1.7c-3.88 0-7.06 1.55-7.06 3.45 0 1.9 3.18 3.44 7.06 3.44 3.88 0 7.06-1.54 7.06-3.44 0-1.9-3.18-3.45-7.06-3.45zm-4.5 14.1h-3.2c-.5 0-.9-.1-1.2-.3-.3-.2-.5-.5-.6-.9l-1.7-8.8c-.1-.4 0-.7.2-1 .3-.3.6-.4 1-.4h1.6c.5 0 .9.1 1.2.3.3.2.5.5.6.9l.4 2.2h2.2c1.7 0 3 .3 3.9 1 .9.7 1.3 1.7 1.1 3-.2 1.1-.8 2-1.7 2.6-1 .6-2.2.9-3.7.9h-2.1v-.4zm1.5-2.6c.5 0 1-.1 1.4-.4.4-.2.6-.6.7-1 .1-.5 0-.8-.3-1.1-.3-.2-.8-.3-1.4-.3H7.3l.5 2.8h1.3zm5.6 2.6h-1.6c-.5 0-.9-.1-1.2-.3-.3-.2-.5-.5-.6-.9l-1.7-8.8c-.1-.4 0-.7.2-1 .3-.3.6-.4 1-.4h1.6c.5 0 .9.1 1.2.3.3.2.5.5.6.9l.4 2.2H18c1.7 0 3 .3 3.9 1 .9.7 1.3 1.7 1.1 3-.2 1.1-.8 2-1.7 2.6-1 .6-2.2.9-3.7.9h-2.1v-.4zm1.5-2.6c.5 0 1-.1 1.4-.4.4-.2.6-.6.7-1 .1-.5 0-.8-.3-1.1-.3-.2-.8-.3-1.4-.3h-1.7l.5 2.8h1.3z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12.07 1.7c-3.88 0-7.06 1.55-7.06 3.45 0 1.9 3.18 3.44 7.06 3.44 3.88 0 7.06-1.54 7.06-3.44 0-1.9-3.18-3.45-7.06-3.45zm-4.5 14.1h-3.2c-.5 0-.9-.1-1.2-.3-.3-.2-.5-.5-.6-.9l-1.7-8.8c-.1-.4 0-.7.2-1 .3-.3.6-.4 1-.4h1.6c.5 0 .9.1 1.2.3.3.2.5.5.6.9l.4 2.2h2.2c1.7 0 3 .3 3.9 1 .9.7 1.3 1.7 1.1 3-.2 1.1-.8 2-1.7 2.6-1 .6-2.2.9-3.7.9h-2.1v-.4zm1.5-2.6c.5 0 1-.1 1.4-.4.4-.2.6-.6.7-1 .1-.5 0-.8-.3-1.1-.3-.2-.8-.3-1.4-.3H7.3l.5 2.8h1.3zm5.6 2.6h-1.6c-.5 0-.9-.1-1.2-.3-.3-.2-.5-.5-.6-.9l-1.7-8.8c-.1-.4 0-.7.2-1 .3-.3.6-.4 1-.4h1.6c.5 0 .9.1 1.2.3.3.2.5.5.6.9l.4 2.2H18c1.7 0 3 .3 3.9 1 .9.7 1.3 1.7 1.1 3-.2 1.1-.8 2-1.7 2.6-1 .6-2.2.9-3.7.9h-2.1v-.4zm1.5-2.6c.5 0 1-.1 1.4-.4.4-.2.6-.6.7-1 .1-.5 0-.8-.3-1.1-.3-.2-.8-.3-1.4-.3h-1.7l.5 2.8h1.3z'/%3E%3C/svg%3E");
}

.bo-logo-python {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 2c-2.7 0-5 1.1-5 2.5v2c0 1.4 2.3 2.5 5 2.5s5-1.1 5-2.5v-2C17 3.1 14.7 2 12 2zm-5 5.5C5 9 2 10.1 2 11.5v7C2 20 5 21 8 21h8c3 0 6-1 6-2.5v-7c0-1.4-3-2.5-6-2.5h-3v-1.5zM8 11c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1zm8 4c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 2c-2.7 0-5 1.1-5 2.5v2c0 1.4 2.3 2.5 5 2.5s5-1.1 5-2.5v-2C17 3.1 14.7 2 12 2zm-5 5.5C5 9 2 10.1 2 11.5v7C2 20 5 21 8 21h8c3 0 6-1 6-2.5v-7c0-1.4-3-2.5-6-2.5h-3v-1.5zM8 11c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1zm8 4c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1z'/%3E%3C/svg%3E");
}

.-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3 3h18v18H3V3zm4.44 14.34l1.66-1c.3.52.6.9 1.24.9.66 0 1.06-.26 1.06-.78 0-.54-.42-.76-1.16-.76H8.5v-1.62h2.54c1.18 0 2.04-.64 2.04-1.76 0-1.06-.72-1.7-1.84-1.7-1.06 0-1.72.5-2.08 1.16l-1.58-1.06c.64-1.16 1.78-1.9 3.76-1.9 2.32 0 3.82 1.16 3.82 3.04 0 1.42-.78 2.34-2.02 2.64v.04c1.26.2 2.14 1.1 2.14 2.5 0 1.88-1.48 3.18-4.02 3.18-2.22 0-3.64-1-4.2-2.46zm9.8-6.3h1.86v6.76c0 2.52-1.24 3.44-3.18 3.44-.78 0-1.6-.2-2.02-.56l.72-1.38c.28.22.72.36 1.1.36.92 0 1.52-.42 1.52-1.7V7.04z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3 3h18v18H3V3zm4.44 14.34l1.66-1c.3.52.6.9 1.24.9.66 0 1.06-.26 1.06-.78 0-.54-.42-.76-1.16-.76H8.5v-1.62h2.54c1.18 0 2.04-.64 2.04-1.76 0-1.06-.72-1.7-1.84-1.7-1.06 0-1.72.5-2.08 1.16l-1.58-1.06c.64-1.16 1.78-1.9 3.76-1.9 2.32 0 3.82 1.16 3.82 3.04 0 1.42-.78 2.34-2.02 2.64v.04c1.26.2 2.14 1.1 2.14 2.5 0 1.88-1.48 3.18-4.02 3.18-2.22 0-3.64-1-4.2-2.46zm9.8-6.3h1.86v6.76c0 2.52-1.24 3.44-3.18 3.44-.78 0-1.6-.2-2.02-.56l.72-1.38c.28.22.72.36 1.1.36.92 0 1.52-.42 1.52-1.7V7.04z'/%3E%3C/svg%3E");
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect width='24' height='24' rx='3' fill='%23fff'/%3E%3Cpath fill='%230b0c10' d='M16.6 18.2c0 1.8-1.1 2.6-2.7 2.6-1.4 0-2.3-.8-2.4-2h1.5c.1.6.4.9 1 .9.6 0 .9-.3.9-1 0-.6-.2-.8-1-.9-.7-.1-1.1-.2-1.5-.4-.7-.4-1-1-1-1.7 0-1.4 1-2.1 2.4-2.1 1.3 0 2.2.7 2.3 1.9h-1.4c-.1-.5-.4-.8-1-.8-.5 0-.8.3-.8.8 0 .5.2.7.9.9l1.2.3c.9.2 1.6.9 1.6 2zM9 20.5H7.4V9.8H9v10.7z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect width='24' height='24' rx='3' fill='%23fff'/%3E%3Cpath fill='%230b0c10' d='M16.6 18.2c0 1.8-1.1 2.6-2.7 2.6-1.4 0-2.3-.8-2.4-2h1.5c.1.6.4.9 1 .9.6 0 .9-.3.9-1 0-.6-.2-.8-1-.9-.7-.1-1.1-.2-1.5-.4-.7-.4-1-1-1-1.7 0-1.4 1-2.1 2.4-2.1 1.3 0 2.2.7 2.3 1.9h-1.4c-.1-.5-.4-.8-1-.8-.5 0-.8.3-.8.8 0 .5.2.7.9.9l1.2.3c.9.2 1.6.9 1.6 2zM9 20.5H7.4V9.8H9v10.7z'/%3E%3C/svg%3E");
}

.bo-logo-gcloud {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12.19 2.38a9.344 9.344 0 0 0-9.234 6.893c.053-.02-.055.013 0 0-3.875 1.551-4.922 6.11-2.555 9.438l3.705 5.181c.84 1.174 2.19 1.873 3.62 1.873h7.18c2.2 0 4.1-1.5 4.64-3.63l1.32-5.26a5.9 5.9 0 0 0-5.83-7.35h-.62a9.35 9.35 0 0 0-3.75-6.14zm2.62 8.62a3.37 3.37 0 1 1 0 6.74 3.37 3.37 0 0 1 0-6.74z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12.19 2.38a9.344 9.344 0 0 0-9.234 6.893c.053-.02-.055.013 0 0-3.875 1.551-4.922 6.11-2.555 9.438l3.705 5.181c.84 1.174 2.19 1.873 3.62 1.873h7.18c2.2 0 4.1-1.5 4.64-3.63l1.32-5.26a5.9 5.9 0 0 0-5.83-7.35h-.62a9.35 9.35 0 0 0-3.75-6.14zm2.62 8.62a3.37 3.37 0 1 1 0 6.74 3.37 3.37 0 0 1 0-6.74z'/%3E%3C/svg%3E");
}

.bo-logo-hetzner {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M2 2h9v9H2V2zm0 11h9v9H2v-9zm11-11h9v9h-9V2zm0 11h9v9h-9v-9z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M2 2h9v9H2V2zm0 11h9v9H2v-9zm11-11h9v9h-9V2zm0 11h9v9h-9v-9z'/%3E%3C/svg%3E");
}
.bo-logos {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 48px;
  flex-wrap: wrap;
  width: auto;
  max-width: none;
  overflow: visible;
  mask-image: none;
  -webkit-mask-image: none;
  margin-bottom: 16px;
}

.bo-logos-track {
  display: contents;
  animation: none;
  width: auto;
  gap: 0;
}

.bo-logos:hover .bo-logos-track {
  animation-play-state: running;
}

/* ==========================================================
   24. 3-logo sliding carousel (window shows 3, total 9)
   ========================================================== */
.bo-logos {
  display: flex;
  justify-content: center;
  width: 100%;
  overflow: visible;
  mask-image: none;
  -webkit-mask-image: none;
  margin-bottom: 16px;
}

.bo-logos-window {
  width: 100%;
  max-width: 560px;
  overflow: hidden;
  mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
}

.bo-logos-track {
  display: flex;
  width: max-content;
  animation: bo-logos-slide-3 18s ease-in-out infinite;
}

.bo-logos:hover .bo-logos-track {
  animation-play-state: paused;
}

.bo-logos-slide {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 48px;
  width: 560px;
  flex-shrink: 0;
  padding: 0 10px;
  box-sizing: border-box;
}

.bo-logo-item {
  flex-shrink: 0;
}

@keyframes bo-logos-slide-3 {
  0%, 22% { transform: translateX(0); }
  33%, 55% { transform: translateX(-560px); }
  66%, 88% { transform: translateX(-1120px); }
  100% { transform: translateX(0); }
}

@media (max-width: 640px) {
  .bo-logos-window {
    max-width: 320px;
  }
  .bo-logos-slide {
    width: 320px;
    gap: 28px;
  }
  @keyframes bo-logos-slide-3 {
    0%, 22% { transform: translateX(0); }
    33%, 55% { transform: translateX(-320px); }
    66%, 88% { transform: translateX(-640px); }
    100% { transform: translateX(0); }
  }
}
.bo-logo-javascript,
.bo-logo-javascript.bo-logo-mark {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Cpath fill=%27%23fff%27 d=%27M3 3h18v18H3V3zm4.44 14.34l1.66-1c.3.52.6.9 1.24.9.66 0 1.06-.26 1.06-.78 0-.54-.42-.76-1.16-.76H8.5v-1.62h2.54c1.18 0 2.04-.64 2.04-1.76 0-1.06-.72-1.7-1.84-1.7-1.06 0-1.72.5-2.08 1.16l-1.58-1.06c.64-1.16 1.78-1.9 3.76-1.9 2.32 0 3.82 1.16 3.82 3.04 0 1.42-.78 2.34-2.02 2.64v.04c1.26.2 2.14 1.1 2.14 2.5 0 1.88-1.48 3.18-4.02 3.18-2.22 0-3.64-1-4.2-2.46zm9.8-6.3h1.86v6.76c0 2.52-1.24 3.44-3.18 3.44-.78 0-1.6-.2-2.02-.56l.72-1.38c.28.22.72.36 1.1.36.92 0 1.52-.42 1.52-1.7V7.04z%27/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Cpath fill=%27%23fff%27 d=%27M3 3h18v18H3V3zm4.44 14.34l1.66-1c.3.52.6.9 1.24.9.66 0 1.06-.26 1.06-.78 0-.54-.42-.76-1.16-.76H8.5v-1.62h2.54c1.18 0 2.04-.64 2.04-1.76 0-1.06-.72-1.7-1.84-1.7-1.06 0-1.72.5-2.08 1.16l-1.58-1.06c.64-1.16 1.78-1.9 3.76-1.9 2.32 0 3.82 1.16 3.82 3.04 0 1.42-.78 2.34-2.02 2.64v.04c1.26.2 2.14 1.1 2.14 2.5 0 1.88-1.48 3.18-4.02 3.18-2.22 0-3.64-1-4.2-2.46zm9.8-6.3h1.86v6.76c0 2.52-1.24 3.44-3.18 3.44-.78 0-1.6-.2-2.02-.56l.72-1.38c.28.22.72.36 1.1.36.92 0 1.52-.42 1.52-1.7V7.04z%27/%3E%3C/svg%3E");
}
.bo-logos {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 48px;
  flex-wrap: wrap;
  width: auto;
  max-width: none;
  overflow: visible;
  mask-image: none;
  -webkit-mask-image: none;
  margin-bottom: 16px;
}

.bo-logos-window,
.bo-logos-track,
.bo-logos-slide {
  display: contents;
  width: auto;
  animation: none;
  padding: 0;
}

.bo-logos:hover .bo-logos-track {
  animation-play-state: running;
}
