/* Consultor SEO Almería — design system
   Editorial, premium, high-contrast. Warm paper base + deep emerald.
   No framework, no build step: this file is served as-is. */

/* Fuentes autoalojadas (sin peticiones a Google Fonts, sin cookies de terceros) */
@font-face{font-family:"Red Hat Text";font-style:normal;font-weight:400;font-display:swap;src:url("/assets/fonts/redhattext-400.woff2") format("woff2")}
@font-face{font-family:"Red Hat Text";font-style:normal;font-weight:500;font-display:swap;src:url("/assets/fonts/redhattext-500.woff2") format("woff2")}
@font-face{font-family:"Red Hat Text";font-style:normal;font-weight:700;font-display:swap;src:url("/assets/fonts/redhattext-700.woff2") format("woff2")}
@font-face{font-family:"Red Hat Display";font-style:normal;font-weight:700;font-display:swap;src:url("/assets/fonts/redhatdisplay-700.woff2") format("woff2")}
@font-face{font-family:"Red Hat Display";font-style:normal;font-weight:800;font-display:swap;src:url("/assets/fonts/redhatdisplay-800.woff2") format("woff2")}
@font-face{font-family:"Red Hat Display";font-style:normal;font-weight:900;font-display:swap;src:url("/assets/fonts/redhatdisplay-900.woff2") format("woff2")}

:root{
  /* Paper base: warm ivory reads richer than pure white */
  --bg:          #fbfaf6;
  --bg-alt:      #f4f1e8;
  --surface:     #ffffff;
  --surface-2:   #eef1ea;
  --border:      #e3ded1;
  --border-soft: #ebe7db;

  --text:        #12211a;
  --text-muted:  #4d5b53;
  --text-faint:  #616d66;

  --accent:        #05604a;
  --accent-strong: #033b2d;
  --accent-vivid:  #0f9268;
  --accent-lime:   #b8e04f;
  --accent-soft:   rgba(5,96,74,.07);
  --accent-line:   rgba(5,96,74,.18);
  --accent-gradient: linear-gradient(120deg, var(--accent-vivid) 0%, var(--accent-lime) 100%);

  /* Warm brass secondary — the detail that lifts green out of "template" territory */
  --brass:      #b8944f;
  --brass-soft: rgba(184,148,79,.14);

  --ink:   #072019;
  --ink-2: #0d3327;
  --on-accent: #ffffff;

  --radius-lg: 24px;
  --radius-md: 16px;
  --radius-sm: 10px;

  /* Layered shadows read as real depth, not a single blur */
  --shadow-sm: 0 1px 2px rgba(7,32,25,.04), 0 3px 10px -4px rgba(7,32,25,.08);
  --shadow:    0 2px 4px rgba(7,32,25,.04), 0 12px 24px -10px rgba(7,32,25,.12), 0 32px 60px -30px rgba(7,32,25,.22);
  --shadow-lg: 0 2px 6px rgba(7,32,25,.05), 0 18px 36px -14px rgba(7,32,25,.16), 0 48px 90px -40px rgba(7,32,25,.3);
  --shadow-glow: 0 16px 34px -12px rgba(15,146,104,.45);

  --maxw: 1180px;
  --font-body: "Red Hat Text", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-display: "Red Hat Display", "Red Hat Text", system-ui, sans-serif;
  --ease: cubic-bezier(.22,.85,.28,1);
}

*,*::before,*::after{box-sizing:border-box}
/* the hidden attribute must beat any display: rule from a class */
[hidden]{display:none !important}
html{scroll-behavior:smooth}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-body);
  font-size:17px;
  line-height:1.72;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
/* Fine paper grain over the whole page — subtle, but it kills the flat-template look */
body::after{
  content:"";position:fixed;inset:0;z-index:9999;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='140' height='140' filter='url(%23n)' opacity='.055'/></svg>");
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
ul{margin:0;padding:0;list-style:none}
::selection{background:var(--accent);color:#fff}
:focus-visible{outline:3px solid var(--accent-vivid);outline-offset:3px;border-radius:4px}

h1,h2,h3,h4{
  font-family:var(--font-display);font-weight:800;line-height:1.08;margin:0 0 .5em;
  letter-spacing:-.03em;color:var(--text);text-wrap:balance;
}
h1{font-size:clamp(2.6rem,5.4vw,4.35rem);font-weight:900;letter-spacing:-.042em}
h2{font-size:clamp(1.8rem,3vw,2.6rem);letter-spacing:-.034em}
h3{font-size:1.12rem;letter-spacing:-.02em}
p{margin:0 0 1em;color:var(--text-muted)}
strong,b{color:var(--text);font-weight:700}

.container{max-width:var(--maxw);margin:0 auto;padding:0 28px;position:relative;z-index:1}
section{padding:112px 0;position:relative}
.section-tight{padding:64px 0}
.lead{font-size:1.24rem;line-height:1.62;color:var(--text-muted);max-width:58ch}

/* An accent rule under section headings — editorial, and no pill above the title */
main > section > .container > h2::after{
  content:"";display:block;width:56px;height:3px;border-radius:2px;
  background:var(--accent-gradient);margin-top:22px;
}
.cta-band h2::after{display:none !important}

/* Editorial section header: heading left, intro right on wide screens.
   Row 1 is the h2 + lead pair; everything after spans the full width. */
@media (min-width: 900px){
  main > section > .container:has(> h2 + .lead){
    display:grid;
    grid-template-columns:minmax(0,45%) minmax(0,1fr);
    column-gap:52px;
    row-gap:40px;
    align-items:start;
  }
  main > section > .container:has(> h2 + .lead) > *{grid-column:1 / -1}
  main > section > .container:has(> h2 + .lead) > h2{grid-column:1;margin-bottom:0}
  main > section > .container:has(> h2 + .lead) > h2 + .lead{
    grid-column:2;margin-top:.35em;max-width:46ch;
  }
}

mark{background:none;color:inherit;position:relative;white-space:nowrap}
mark::after{
  content:"";position:absolute;left:-2px;right:-2px;bottom:.06em;height:.32em;
  background:var(--accent-gradient);z-index:-1;border-radius:4px;opacity:.5;
}

/* Section rhythm: alternate a warm tint so the page doesn't read as one flat slab */
main > section:nth-of-type(even):not(.hero):not(.cta-band):not(.tech-band){background:var(--bg-alt)}

/* Buttons */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  padding:16px 32px;border-radius:999px;font-weight:800;font-size:.97rem;
  letter-spacing:-.01em;
  border:1px solid transparent;cursor:pointer;position:relative;overflow:hidden;
  transition:transform .25s var(--ease), box-shadow .25s ease, background .25s ease, border-color .25s ease, color .25s ease;
  white-space:nowrap;max-width:100%;
}
@media (max-width: 640px){
  .btn{white-space:normal;text-align:center;padding:15px 24px}
}
.btn-primary{
  background:var(--accent);color:var(--on-accent);
  box-shadow:0 1px 2px rgba(7,32,25,.14), 0 12px 24px -12px rgba(5,96,74,.55);
}
/* subtle top highlight — the detail that makes a solid button look crafted */
.btn-primary::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(180deg, rgba(255,255,255,.16), rgba(255,255,255,0) 55%);
}
.btn-primary:hover{
  background:var(--accent-strong);transform:translateY(-2px);
  box-shadow:0 2px 4px rgba(7,32,25,.16), 0 18px 34px -14px rgba(5,96,74,.6);
}
.btn-ghost{background:var(--surface);color:var(--text);border-color:var(--border);box-shadow:var(--shadow-sm)}
.btn-ghost:hover{border-color:var(--accent-line);background:#fff;color:var(--accent);transform:translateY(-2px);box-shadow:var(--shadow)}

/* Header — floating glass capsule */
.site-header{position:sticky;top:0;z-index:50;padding-top:18px;pointer-events:none}
.site-header .nav{
  pointer-events:auto;
  background:rgba(255,255,255,.72);backdrop-filter:blur(18px) saturate(180%);
  -webkit-backdrop-filter:blur(18px) saturate(180%);
  border:1px solid rgba(255,255,255,.7);
  border-radius:999px;
  box-shadow:0 1px 2px rgba(7,32,25,.05), 0 16px 40px -22px rgba(7,32,25,.35);
  padding:11px 11px 11px 24px;
  max-width:calc(var(--maxw) - 48px);margin:0 auto;
}
.nav{display:flex;align-items:center;justify-content:space-between}
.logo{font-family:var(--font-display);font-weight:800;font-size:1.04rem;display:flex;align-items:center;gap:10px;color:var(--text);letter-spacing:-.025em}
.logo-mark{width:30px;height:30px;border-radius:9px;flex:0 0 auto;display:block}
.nav-links{display:flex;align-items:center;gap:30px}
.nav-links a{font-size:.92rem;color:var(--text-muted);font-weight:600;position:relative;padding:4px 0}
.nav-links a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;
  background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .28s var(--ease);
}
.nav-links a:hover{color:var(--accent)}
.nav-links a:hover::after{transform:scaleX(1)}
.nav-cta{display:flex;align-items:center;gap:14px}
.nav-cta .btn-primary{padding:12px 24px;font-size:.9rem}
.nav-toggle{display:none;background:none;border:1px solid var(--border);color:var(--text);border-radius:11px;padding:8px 11px;font-size:1rem}
@media (max-width: 880px){
  .site-header .nav{border-radius:22px;padding:12px 14px}
  .nav-links{position:fixed;inset:82px 16px auto 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;align-items:flex-start;padding:22px;gap:16px;display:none;box-shadow:var(--shadow-lg)}
  .nav-links.open{display:flex}
  .nav-links a::after{display:none}
  .nav-toggle{display:inline-flex}
  .nav-cta .btn-primary{padding:12px 16px}
  /* Hide the label visually but keep it for screen readers, so the link
     still has an accessible name when only the icon shows. */
  .nav-cta .btn-primary-label{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;
  }
  .nav-cta .btn-primary::before{
    content:"";
    width:18px;height:18px;
    display:inline-block;
    background-color:#ffffff;
    -webkit-mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="M2 7l10 6 10-6"/></svg>') center/contain no-repeat;
    mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="M2 7l10 6 10-6"/></svg>') center/contain no-repeat;
  }
}

/* Hero — layered gradient wash that bleeds up behind the floating header */
.hero{padding:72px 0 84px;position:relative}
.hero::before{
  content:"";position:absolute;top:-200px;left:-10%;right:-10%;height:880px;z-index:-1;pointer-events:none;
  background:
    radial-gradient(520px 340px at 86% 20%, rgba(184,224,79,.26), transparent 62%),
    radial-gradient(620px 400px at 6% 14%, rgba(15,146,104,.18), transparent 64%),
    radial-gradient(400px 300px at 50% 0%, rgba(184,148,79,.10), transparent 70%),
    linear-gradient(180deg, var(--surface-2) 0%, var(--bg) 68%);
}
.hero-grid{display:grid;grid-template-columns:1fr;gap:56px;align-items:center;max-width:74ch;position:relative;z-index:1}
.hero-visual{display:none}
.hero-visual.has-image{display:block;position:relative;aspect-ratio:4/3;border-radius:var(--radius-lg);overflow:visible}
.hero-visual.has-image .hero-visual-frame{
  width:100%;height:100%;border-radius:var(--radius-lg);overflow:hidden;
  box-shadow:var(--shadow-lg);transform:rotate(1.1deg);
}
.hero-visual.has-image img{width:100%;height:100%;object-fit:cover}
.hero-grid:has(.hero-visual.has-image){grid-template-columns:1.08fr .92fr;max-width:var(--maxw)}
.hero-panel{
  display:flex;flex-direction:column;gap:2px;background:var(--surface);border:1px solid var(--border-soft);
  border-radius:var(--radius-lg);padding:14px 30px;box-shadow:var(--shadow-lg);position:relative;overflow:hidden;
}
.hero-panel::before{
  content:"";position:absolute;top:-50px;right:-50px;width:170px;height:170px;border-radius:50%;
  background:radial-gradient(circle, rgba(184,224,79,.32), transparent 70%);pointer-events:none;
}
.hero-panel-item{display:flex;align-items:center;gap:17px;padding:19px 0;border-bottom:1px solid var(--border-soft);position:relative}
.hero-panel-item:last-child{border-bottom:none}
.hero-panel-icon{
  flex:0 0 auto;width:42px;height:42px;border-radius:12px;background:var(--accent-soft);color:var(--accent);
  display:flex;align-items:center;justify-content:center;
}
.hero-panel-item b{display:block;font-family:var(--font-display);font-size:1rem;color:var(--text);font-weight:800;letter-spacing:-.02em}
.hero-panel-item span{display:block;font-size:.85rem;color:var(--text-faint);margin-top:2px}
.hero-grid:has(.hero-panel){grid-template-columns:1.15fr .85fr;max-width:var(--maxw)}
.hero-badge{
  position:absolute;display:inline-flex;align-items:center;gap:13px;background:#fff;border-radius:16px;
  padding:14px 19px;box-shadow:var(--shadow-lg);z-index:2;line-height:1.25;max-width:230px;
  border:1px solid rgba(255,255,255,.9);
}
.hero-badge-icon{
  flex:0 0 auto;width:33px;height:33px;border-radius:50%;background:var(--accent-soft);
  display:flex;align-items:center;justify-content:center;font-size:1rem;
}
.hero-badge b{display:block;font-family:var(--font-display);font-size:.92rem;color:var(--text);letter-spacing:-.02em}
.hero-badge small{display:block;font-size:.74rem;color:var(--text-faint);font-weight:500}
.breadcrumbs{display:flex;flex-wrap:wrap;gap:7px;font-size:.83rem;color:var(--text-faint);margin-bottom:24px;letter-spacing:.01em}
.breadcrumbs a{color:var(--text-faint)}
.breadcrumbs a:hover{color:var(--accent)}
.hero-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px;margin-top:38px;padding-top:32px;border-top:1px solid var(--border)}
.hero-stat b{display:block;font-family:var(--font-display);font-size:1.2rem;line-height:1.3;color:var(--text);letter-spacing:-.025em}
.hero-stat span{font-size:.84rem;color:var(--text-faint)}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap;margin-top:36px}

/* Ticker / marquee band */
.ticker-wrap{overflow:hidden;background:var(--ink);padding:17px 0;position:relative}
.ticker{display:flex;width:max-content;gap:0;animation:ticker 30s linear infinite}
.ticker span{
  display:inline-flex;align-items:center;gap:12px;padding:0 30px;font-family:var(--font-display);
  font-weight:700;font-size:.93rem;color:#e9f5ee;white-space:nowrap;letter-spacing:-.01em;
}
.ticker span::after{content:"✦";color:var(--accent-lime);margin-left:30px;font-size:.8rem}
@keyframes ticker{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion: reduce){.ticker{animation:none}}

/* Card grids use centred flex wrapping so an incomplete last row stays balanced
   instead of leaving a lone box hanging on the left. */
.grid-6,.grid-4,.grid-3,.grid-2{display:flex;flex-wrap:wrap;justify-content:center;gap:24px}
.grid-6 > *,.grid-3 > *{flex:0 1 calc((100% - 48px)/3)}
.grid-4 > *{flex:0 1 calc((100% - 72px)/4)}
.grid-2 > *{flex:0 1 calc((100% - 24px)/2)}
@media (max-width: 980px){
  .grid-6 > *,.grid-4 > *,.grid-3 > *{flex-basis:calc((100% - 24px)/2)}
}
@media (max-width: 640px){
  .grid-6 > *,.grid-4 > *,.grid-3 > *,.grid-2 > *{flex-basis:100%}
  .hero-grid,.hero-grid:has(.hero-visual.has-image),.hero-grid:has(.hero-panel){grid-template-columns:1fr}
}
@media (max-width: 560px){.hero-stats{grid-template-columns:1fr 1fr;gap:22px}}

.card{
  background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);
  padding:36px 34px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden;
  transition:transform .3s var(--ease), box-shadow .3s ease, border-color .3s ease;
}
/* hairline accent that draws itself on hover */
.card::before{
  content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:var(--accent-gradient);transform:scaleX(0);transform-origin:left;
  transition:transform .35s var(--ease);
}
.card:hover{border-color:var(--accent-line);transform:translateY(-6px);box-shadow:var(--shadow-lg)}
.card:hover::before{transform:scaleX(1)}
.card-icon{
  width:54px;height:54px;border-radius:15px;background:var(--accent);
  display:flex;align-items:center;justify-content:center;margin-bottom:24px;color:#fff;
  box-shadow:0 1px 2px rgba(7,32,25,.12), 0 12px 22px -12px rgba(5,96,74,.55);
  transition:transform .3s var(--ease), box-shadow .3s ease;
}
.card-icon svg{width:24px;height:24px}
.card:hover .card-icon{transform:scale(1.06) rotate(-3deg)}
/* alternating icon tones keep a long grid from looking monotonous */
/* darker brass so the white icon keeps enough contrast */
.grid-3 .card:nth-child(3n+2) .card-icon,.grid-4 .card:nth-child(4n+2) .card-icon{
  background:#8a6a2c;box-shadow:0 1px 2px rgba(7,32,25,.12), 0 12px 22px -12px rgba(138,106,44,.6)
}
.grid-3 .card:nth-child(3n+3) .card-icon,.grid-4 .card:nth-child(4n+3) .card-icon{
  background:var(--accent-vivid);box-shadow:0 1px 2px rgba(7,32,25,.12), 0 12px 22px -12px rgba(15,146,104,.6)
}
.card h3{margin-bottom:11px;font-size:1.17rem;letter-spacing:-.028em}
.card p{margin:0;font-size:.955rem;color:var(--text-muted)}

/* Steps */
.steps{counter-reset:step;display:flex;flex-wrap:wrap;justify-content:center;gap:24px}
.steps > *{flex:0 1 calc((100% - 72px)/4)}
@media (max-width: 980px){.steps > *{flex-basis:calc((100% - 24px)/2)}}
@media (max-width: 640px){.steps > *{flex-basis:100%}}
.step{
  position:relative;background:var(--surface);border:1px solid var(--border-soft);
  border-radius:var(--radius-md);padding:30px 28px 28px;overflow:hidden;
  box-shadow:var(--shadow-sm);
  transition:transform .3s var(--ease),box-shadow .3s ease,border-color .3s ease;
}
.step:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg);border-color:var(--accent-line)}
/* the step number sits behind the text as a large outlined numeral */
.step-num{
  counter-increment:step;position:absolute;top:10px;right:18px;
  font-family:var(--font-display);font-weight:900;font-size:3.4rem;line-height:1;
  color:transparent;-webkit-text-stroke:1.5px rgba(5,96,74,.22);
  pointer-events:none;user-select:none;
}
.step-num::before{content:counter(step)}
/* keep the heading clear of the numeral so they never collide */
.step h3{position:relative;margin-bottom:10px;padding-right:52px}
.step h3::before{
  content:"";display:block;width:34px;height:3px;border-radius:2px;
  background:var(--accent-gradient);margin-bottom:18px;
}
.step p{position:relative;margin:0;font-size:.95rem}

/* Lists with bold lead-in — two editorial columns, hairline separated, no boxes */
.check-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 48px}
.check-list li{
  position:relative;margin:0;padding:22px 0 22px 34px;color:var(--text-muted);font-size:.94rem;
  line-height:1.6;border-top:1px solid var(--border);
}
.check-list li::before{
  content:"";position:absolute;left:0;top:26px;width:18px;height:18px;border-radius:50%;
  background:var(--accent-soft);
}
.check-list li::after{
  content:"";position:absolute;left:4px;top:31px;width:10px;height:9px;background-color:var(--accent);
  -webkit-mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"/></svg>') center/contain no-repeat;
  mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"/></svg>') center/contain no-repeat;
}
/* the lead-in becomes a small heading above its explanation */
.check-list li b{
  display:block;margin-bottom:3px;color:var(--text);
  font-family:var(--font-display);font-weight:800;font-size:1rem;letter-spacing:-.022em;
}
/* an odd last item would sit alone leaving a hole: let it take the whole row */
.check-list li:last-child:nth-child(odd){grid-column:1 / -1}
@media (max-width:760px){.check-list{grid-template-columns:1fr;gap:0}}

/* Zone hub: one URL per town, so a list reads better than cards */
.town-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.town-list a{
  display:flex;align-items:baseline;justify-content:space-between;gap:14px;
  padding:16px 20px;border-radius:var(--radius-sm);
  background:var(--surface);border:1px solid var(--border-soft);
  transition:border-color .25s ease,transform .25s var(--ease),box-shadow .25s ease;
}
.town-list a:hover{border-color:var(--accent-line);transform:translateY(-2px);box-shadow:var(--shadow-sm)}
.town-list .town{font-family:var(--font-display);font-weight:800;font-size:1rem;color:var(--text);letter-spacing:-.02em}
.town-list .town-go{font-size:.78rem;color:var(--text-faint);white-space:nowrap}
.town-list a:hover .town-go{color:var(--accent)}

/* CTA banners: a centred dark card, never edge-to-edge.
   Two markup shapes exist in the site: <section class="cta-band"><div class="container">
   and <div class="container cta-band">. Both must render the card. */
section.cta-band{padding:64px 0;background:none}
.cta-band > .container,
.cta-band.container,
.cta-band:not(:has(> .container)){
  max-width:900px;border-radius:var(--radius-lg);
  background:linear-gradient(150deg, var(--ink) 0%, var(--ink-2) 55%, #0a2a20 100%);
  border:1px solid rgba(255,255,255,.08);box-shadow:var(--shadow-lg);
  padding:56px 56px;text-align:center;position:relative;overflow:hidden;
}
.cta-band > .container::before,
.cta-band.container::before,
.cta-band:not(:has(> .container))::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(460px 280px at 88% -18%, rgba(184,224,79,.3), transparent 62%),
    radial-gradient(380px 240px at 6% 110%, rgba(15,146,104,.35), transparent 65%);
}
.cta-band h2,.cta-band p{position:relative}
.cta-band h2{margin-bottom:12px;color:#f4fbf6}
.cta-band p{margin:0 auto 28px;max-width:52ch;color:#b9cfc3}
.cta-band .btn{position:relative}
/* On the dark card the green button needs a lime ring to separate from the
   background, since dark-green on dark-ink alone is too close. */
.cta-band .btn-primary{
  background:var(--accent);color:#fff;
  box-shadow:0 1px 2px rgba(0,0,0,.25), 0 16px 30px -12px rgba(5,96,74,.7), 0 0 0 2px var(--accent-lime);
}
.cta-band .btn-primary:hover{background:var(--accent-vivid);color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.28), 0 20px 36px -14px rgba(15,146,104,.75), 0 0 0 3px var(--accent-lime)}
.cta-band .btn-ghost{background:transparent;border-color:rgba(255,255,255,.25);color:#e9f5ee;box-shadow:none}
.cta-band .btn-ghost:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.45);color:#fff}
.cta-band .mail-link{color:var(--accent-lime)}
.cta-band b,.cta-band strong{color:inherit}
@media (max-width: 640px){.cta-band > .container,.cta-band.container,.cta-band:not(:has(> .container)){padding:38px 24px}}

/* Carousel — native scroll-snap, so it still works if JS never runs */
.carousel{position:relative}
.carousel-track{
  display:flex;gap:24px;overflow-x:auto;scroll-snap-type:x mandatory;
  scroll-behavior:smooth;padding:4px 4px 10px;margin:-4px -4px -10px;
  scrollbar-width:none;-ms-overflow-style:none;
}
.carousel-track::-webkit-scrollbar{display:none}
.carousel-track > *{flex:0 0 calc((100% - 48px)/3);scroll-snap-align:start}
@media (max-width:980px){.carousel-track > *{flex-basis:calc((100% - 24px)/2)}}
@media (max-width:640px){.carousel-track > *{flex-basis:100%}}
.carousel-nav{display:flex;gap:12px;justify-content:flex-end;margin-top:26px}
.carousel-btn{
  width:48px;height:48px;border-radius:50%;border:0;cursor:pointer;
  background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 2px rgba(7,32,25,.14), 0 10px 22px -10px rgba(5,96,74,.6);
  transition:background .22s ease, transform .22s var(--ease), opacity .22s ease;
}
.carousel-btn:hover:not(:disabled){background:var(--accent-strong);transform:translateY(-2px)}
.carousel-btn:disabled{opacity:.3;cursor:default}
@media (prefers-reduced-motion: reduce){.carousel-track{scroll-behavior:auto}}

/* Google reviews */
.review{
  background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);
  padding:32px;box-shadow:var(--shadow-sm);position:relative;
  display:flex;flex-direction:column;
  transition:transform .3s var(--ease), box-shadow .3s ease, border-color .3s ease;
}
.review:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg);border-color:var(--accent-line)}
.stars{color:#a56500;font-size:1.12rem;font-weight:700;letter-spacing:.14em;line-height:1;margin-bottom:16px}
.review p{color:var(--text);font-size:1rem;margin:0 0 20px;flex:1}
.review footer{
  padding-top:16px;border-top:1px solid var(--border-soft);
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;
}
.review .t-name{font-family:var(--font-display);font-weight:800;color:var(--text);font-size:.95rem;letter-spacing:-.02em}
.review .t-role{font-size:.8rem;color:var(--text-faint)}

/* Technology band — logos in negative on the deep ink ground */
.tech-band{background:var(--ink-2);color:#cfe3d7;padding:84px 0;position:relative;overflow:hidden}
.tech-band::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(680px 300px at 85% -20%, rgba(15,146,104,.24), transparent 62%);
}
.tech-band > .container{position:relative}
.tech-band h2{color:#f2f9f5}
.tech-band h2::after{content:none}
.tech-band > .container > p{color:#a7c0b3;max-width:56ch;margin:0 0 44px}
.tech-grid{
  display:grid;grid-template-columns:repeat(6,1fr);gap:20px;
}
.tech{
  display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;
  padding:26px 12px;border-radius:var(--radius-md);
  border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.035);
  transition:border-color .28s ease,background .28s ease,transform .28s var(--ease);
}
.tech:hover{border-color:rgba(184,224,79,.4);background:rgba(255,255,255,.06);transform:translateY(-4px)}
.tech-logo{display:flex;align-items:center;justify-content:center;height:40px;color:#ffffff}
.tech-logo svg{width:38px;height:38px;display:block}
.tech:hover .tech-logo{color:var(--accent-lime)}
.tech-name{font-size:.82rem;font-weight:600;color:#b8cec2;line-height:1.35}
@media (max-width:980px){.tech-grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:560px){
  .tech-band{padding:60px 0}
  .tech-grid{grid-template-columns:repeat(2,1fr);gap:14px}
  .tech{padding:20px 10px}
}

/* Testimonials */
.testimonial{
  background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);
  padding:34px;box-shadow:var(--shadow-sm);position:relative;
  transition:transform .3s var(--ease), box-shadow .3s ease;
}
.testimonial:hover{transform:translateY(-4px);box-shadow:var(--shadow)}
.testimonial::before{
  content:"“";position:absolute;top:16px;right:26px;font-family:var(--font-display);font-size:3.4rem;
  color:var(--brass);opacity:.35;line-height:1;
}
.testimonial p{color:var(--text);font-size:1.02rem;position:relative;z-index:1}
.testimonial footer{margin-top:20px;padding-top:18px;border-top:1px solid var(--border-soft);display:flex;align-items:center;gap:13px}
.t-name{font-weight:700;color:var(--text);font-size:.92rem}
.t-role{font-size:.82rem;color:var(--text-faint)}

/* Trusted / clients row — names only, no cards, no images */
.trusted-row{display:flex;flex-wrap:wrap;gap:16px 40px;align-items:center}
.trusted-row a{font-family:var(--font-display);font-weight:700;font-size:1.08rem;color:var(--text-muted);transition:color .2s ease}
.trusted-row a:hover{color:var(--accent)}

/* FAQ */
.faq-item{border-bottom:1px solid var(--border);padding:6px 0}
.faq-item summary{
  cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:18px;
  font-weight:700;padding:21px 4px;font-family:var(--font-display);font-size:1.05rem;color:var(--text);
  letter-spacing:-.02em;transition:color .2s ease;
}
.faq-item summary:hover{color:var(--accent)}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::after{
  content:"+";flex:0 0 auto;color:var(--accent);background:var(--accent-soft);width:30px;height:30px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:1.35rem;font-weight:400;
  transition:background .25s ease, color .25s ease;
}
.faq-item[open] summary::after{content:"–";background:var(--accent);color:#fff}
.faq-item p{padding:0 4px 22px;max-width:70ch}

/* Map / areas */
.map-wrap{border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--border);height:380px;box-shadow:var(--shadow)}
.map-wrap iframe{display:block;width:100%;height:380px;border:0}
.area-tags{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-bottom:38px}
.area-tags span,.area-tags a{
  display:inline-block;background:var(--surface);padding:10px 20px;border-radius:999px;
  font-size:.87rem;color:var(--accent);font-weight:600;
  border:1px solid var(--border);box-shadow:var(--shadow-sm);
  transition:background .22s ease,border-color .22s ease,transform .22s var(--ease),color .22s ease;
}
.area-tags a:hover{background:var(--accent);border-color:var(--accent);color:#fff;transform:translateY(-2px)}

/* Zone hub group headings */
.zone-group{
  font-size:.78rem;letter-spacing:.13em;text-transform:uppercase;color:var(--accent);
  margin:44px 0 16px;padding-bottom:12px;border-bottom:1px solid var(--border);
}
.zone-group:first-of-type{margin-top:8px}

/* Audit simulator — stepped wizard, presented as one panel */
.wizard{
  max-width:820px;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius-lg);padding:34px 36px;box-shadow:var(--shadow);
}
.wizard-tabs{
  display:flex;align-items:center;gap:8px;margin-bottom:30px;flex-wrap:wrap;
  padding-bottom:26px;border-bottom:1px solid var(--border-soft);
}
.wizard-tab{
  width:38px;height:38px;border-radius:50%;cursor:pointer;flex:0 0 auto;
  border:1px solid var(--border);background:var(--bg-alt);color:var(--text-faint);
  font-family:var(--font-display);font-weight:800;font-size:.9rem;
  display:flex;align-items:center;justify-content:center;
  transition:background .22s ease,color .22s ease,border-color .22s ease,transform .22s var(--ease);
}
/* connector between step dots */
.wizard-tab + .wizard-tab{margin-left:14px;position:relative}
.wizard-tab + .wizard-tab::before{
  content:"";position:absolute;left:-16px;width:14px;height:2px;border-radius:2px;background:var(--border);
}
.wizard-tab.is-done + .wizard-tab::before,
.wizard-tab[aria-selected="true"]::before{background:var(--accent-line)}
.wizard-tab[aria-selected="true"]{background:var(--accent);border-color:var(--accent);color:#fff;transform:scale(1.06)}
.wizard-tab.is-done{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent)}
.wizard-tab.is-done::after{content:"";width:11px;height:11px;background-color:var(--accent);
  -webkit-mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"/></svg>') center/contain no-repeat;
  mask:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"/></svg>') center/contain no-repeat}
.wizard-tab.is-done span{display:none}
.wizard-tab:disabled{cursor:default;opacity:.55}
.wizard-actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
/* steps are only hidden once JS takes over, so no-JS shows the full form */
.wizard-on .sim-q[hidden]{display:none}
.wizard-on .sim{gap:0}
@media (max-width:560px){.wizard-tab{width:34px;height:34px;font-size:.85rem}}

.sim{display:grid;gap:24px;max-width:none}
/* inside the wizard panel the question is the panel, so it needs no box of its own */
.wizard-on .sim-q{background:none;border:0;border-radius:0;padding:0;box-shadow:none}
.sim-q{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:24px 26px;box-shadow:var(--shadow-sm)}
.sim-label{
  font-family:var(--font-display);font-weight:800;color:var(--text);margin:0 0 20px;letter-spacing:-.028em;
  font-size:1.32rem;line-height:1.25;
}
.sim-result .sim-label{font-size:1rem;margin-bottom:14px}
.wizard-actions{margin-top:30px;padding-top:26px;border-top:1px solid var(--border-soft)}
.sim-opts{display:flex;flex-wrap:wrap;gap:10px}
.sim-opts label{position:relative;cursor:pointer}
.sim-opts input{position:absolute;opacity:0;width:0;height:0}
.sim-opts{gap:12px}
.sim-opts span{
  display:inline-block;padding:14px 24px;border-radius:12px;font-size:.94rem;font-weight:600;
  background:var(--bg-alt);color:var(--text);border:1px solid var(--border);transition:all .2s ease
}
.sim-opts label:hover span{border-color:var(--accent-line)}
.sim-opts input:checked + span{background:var(--accent);color:#fff;box-shadow:0 10px 20px -10px rgba(5,96,74,.55)}
.sim-opts input:focus-visible + span{outline:3px solid var(--accent-vivid);outline-offset:2px}
.sim-error{color:#a1231d;font-weight:600;margin:0}
.sim-result{
  margin-top:36px;max-width:780px;background:var(--surface);border:1px solid var(--accent-line);
  border-radius:var(--radius-lg);padding:38px;box-shadow:var(--shadow-lg)
}
.sim-score{display:flex;align-items:center;gap:26px;flex-wrap:wrap}
.sim-score-num{font-family:var(--font-display);font-weight:900;font-size:3rem;color:var(--accent);line-height:1;flex:0 0 auto;letter-spacing:-.04em}
.sim-score-num small{font-size:1rem;color:var(--text-faint);font-weight:700;letter-spacing:0}
.sim-verdict{font-family:var(--font-display);font-weight:800;font-size:1.25rem;color:var(--text);margin:0 0 6px;letter-spacing:-.025em}
.sim-sub{margin:0;color:var(--text-muted);font-size:.95rem}
.sim-bar{margin-top:24px;height:10px;border-radius:999px;background:var(--surface-2);overflow:hidden}
.sim-bar span{display:block;height:100%;width:0;border-radius:999px;background:var(--accent-gradient);transition:width .7s var(--ease)}
.sim-result .btn{margin-top:24px;margin-right:10px}
@media (max-width:560px){.sim-result{padding:26px}.sim-opts label{flex:1 1 100%}.sim-opts span{display:block;text-align:center}}

/* Floating contact button — icon only, with a pulsing halo so it catches the eye */
.float-cta{
  position:fixed;right:26px;bottom:26px;z-index:80;
  display:inline-flex;align-items:center;justify-content:center;
  width:66px;height:66px;border-radius:50%;
  background:var(--accent);color:#fff;
  box-shadow:0 3px 8px rgba(7,32,25,.24), 0 22px 44px -14px rgba(5,96,74,.8), 0 0 0 3px rgba(184,224,79,.55);
  transition:transform .28s var(--ease), box-shadow .28s ease, background .28s ease;
}
/* expanding halo */
.float-cta::before{
  content:"";position:absolute;inset:0;border-radius:50%;
  background:var(--accent-lime);opacity:.55;z-index:-1;
  animation:floatPulse 2.6s var(--ease) infinite;
}
@keyframes floatPulse{
  0%{transform:scale(1);opacity:.5}
  70%{transform:scale(1.55);opacity:0}
  100%{transform:scale(1.55);opacity:0}
}
.float-cta:hover{transform:translateY(-4px) scale(1.05);filter:saturate(1.15);
  box-shadow:0 4px 10px rgba(7,32,25,.26), 0 30px 56px -16px rgba(15,146,104,.85)}
.float-cta svg{flex:0 0 auto;width:28px;height:28px}
/* label appears only on hover, as a tooltip */
.float-cta .float-cta-label{
  position:absolute;right:calc(100% + 14px);top:50%;transform:translateY(-50%) translateX(6px);
  background:var(--ink);color:#eaf5ee;font-size:.85rem;font-weight:700;letter-spacing:-.01em;
  padding:9px 15px;border-radius:10px;white-space:nowrap;pointer-events:none;
  opacity:0;transition:opacity .22s ease, transform .22s var(--ease);
  box-shadow:var(--shadow);
}
.float-cta:hover .float-cta-label,.float-cta:focus-visible .float-cta-label{opacity:1;transform:translateY(-50%) translateX(0)}
@media (prefers-reduced-motion: reduce){.float-cta::before{animation:none;opacity:.28}}
@media (max-width:560px){
  .float-cta{right:18px;bottom:18px;width:58px;height:58px}
  .float-cta svg{width:25px;height:25px}
  .float-cta .float-cta-label{display:none}
}

/* Footer — deep ink, for contrast against the warm page */
.site-footer{background:var(--ink);padding:80px 0 32px;margin-top:0;color:#cfe3d7;position:relative;overflow:hidden}
.site-footer::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(700px 320px at 82% -10%, rgba(15,146,104,.22), transparent 62%);
}
.site-footer > .container{position:relative}
.footer-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:36px}
@media (max-width:880px){.footer-grid{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.footer-grid{grid-template-columns:1fr}}
.site-footer .logo{color:#fff}
.site-footer .logo-mark{background:#fff;padding:2px}
.footer-grid > div > p{color:#9db8ab}
.footer-grid h3,.footer-grid h4{color:#fff;font-size:.78rem;text-transform:uppercase;letter-spacing:.1em;margin-bottom:20px;font-family:var(--font-display)}
.footer-grid li{margin-bottom:12px}
.footer-grid a{color:#9db8ab;font-size:.92rem;transition:color .2s ease}
.footer-grid a:hover{color:var(--accent-lime)}
.footer-bottom{
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;
  margin-top:60px;padding-top:28px;border-top:1px solid rgba(255,255,255,.1);
  font-size:.82rem;color:#87a297;
}
.footer-bottom a{color:#87a297}
.footer-bottom a:hover{color:var(--accent-lime)}
/* Mail links default to the readable accent; the lime variant is only for dark surfaces */
.mail-link{color:var(--accent);font-weight:700}
.site-footer .mail-link{color:var(--accent-lime)}
/* Dark surfaces: never inherit the global dark colour for b/strong */
.site-footer b,.site-footer strong{color:inherit}

/* Link lists (hub pages: /servicios/, /zonas/) */
.link-list{margin-top:12px}
.link-list li{margin-bottom:9px;padding-left:18px;position:relative}
.link-list li::before{content:"→";position:absolute;left:0;color:var(--accent);font-weight:700;transition:transform .2s var(--ease)}
.link-list a{color:var(--text-muted);font-size:.92rem}
.link-list a:hover{color:var(--accent)}
.link-list li:hover::before{transform:translateX(3px)}

/* Blog listing */
.post-card{
  display:block;background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-md);
  overflow:hidden;box-shadow:var(--shadow-sm);
  transition:transform .3s var(--ease), box-shadow .3s ease, border-color .3s ease;
}
.post-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:var(--accent-line)}
.post-card-img{display:block;width:100%;height:224px;object-fit:cover;transition:transform .5s var(--ease)}
.post-card:hover .post-card-img{transform:scale(1.04)}
.post-card > a,.post-card{overflow:hidden}
.post-card-body{padding:28px}
.post-meta{font-size:.78rem;color:var(--accent);margin-bottom:11px;letter-spacing:.08em;font-weight:700;text-transform:uppercase}
.post-card h3{margin-bottom:11px;font-size:1.22rem}
.post-card p{margin:0;font-size:.95rem}
.read-more{display:inline-block;margin-top:16px;font-size:.88rem;font-weight:800;color:var(--accent)}
.read-more::after{content:"";display:inline-block;width:0}
.card:hover .read-more,.post-card:hover .read-more{text-decoration:underline;text-underline-offset:4px}

/* Blog article */
article.prose{max-width:70ch;margin:0 auto}
/* Table of contents */
.toc{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);
  padding:28px 32px;margin:2.6em 0;box-shadow:var(--shadow-sm);
}
.toc-title{
  font-family:var(--font-display);font-weight:800;font-size:.76rem;letter-spacing:.11em;
  text-transform:uppercase;color:var(--accent);margin:0 0 16px
}
.toc ol{margin:0;padding-left:0;list-style:none;counter-reset:toc}
.toc li{counter-increment:toc;margin-bottom:10px;padding-left:32px;position:relative;color:var(--text-muted)}
.toc li:last-child{margin-bottom:0}
.toc li::before{
  content:counter(toc);position:absolute;left:0;top:1px;width:22px;height:22px;border-radius:50%;
  background:var(--accent);color:#fff;font-size:.72rem;font-weight:800;
  display:flex;align-items:center;justify-content:center
}
.toc a{color:var(--text);font-weight:600;font-size:.97rem}
.toc a:hover{color:var(--accent);text-decoration:underline;text-underline-offset:3px}
/* offset anchors so the sticky header never covers a heading */
article.prose h2[id]{scroll-margin-top:120px}
/* On article pages, align the title block to the same column as the body text.
   The display H1 is scaled down so it doesn't wrap awkwardly in a 70ch measure. */
main:has(article.prose) .hero .container{max-width:70ch}
main:has(article.prose) .hero{padding:64px 0 24px}
main:has(article.prose) .hero h1{
  font-size:clamp(2rem,3.2vw,2.9rem);letter-spacing:-.035em;line-height:1.12;margin-bottom:.45em;
}
main:has(article.prose) .hero .breadcrumbs{margin-bottom:18px}
main:has(article.prose) .hero .post-meta{margin-bottom:0}
article.prose h2{margin-top:2em;font-size:1.62rem}
article.prose h2::after{content:none}
article.prose h3{margin-top:1.6em;font-size:1.22rem}
article.prose p{font-size:1.06rem;line-height:1.78}
article.prose ul{list-style:none;padding-left:0;margin-bottom:1.5em}
article.prose li{margin-bottom:.75em;color:var(--text-muted);padding-left:28px;position:relative}
article.prose li::before{content:"";position:absolute;left:0;top:.6em;width:8px;height:8px;border-radius:50%;background:var(--accent-gradient)}
article.prose figure{margin:2.6em 0}
article.prose figure img{border-radius:var(--radius-md);width:100%;height:auto;box-shadow:var(--shadow)}
article.prose figcaption{font-size:.85rem;color:var(--text-faint);margin-top:12px;text-align:center}
article.prose em{color:var(--text-muted)}
article.prose a:not(.btn){color:var(--accent);font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--accent-line)}
article.prose a:not(.btn):hover{text-decoration-color:var(--accent)}

article.prose .table-wrap{overflow-x:auto;margin:2.6em 0;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}
article.prose table{width:100%;border-collapse:collapse;min-width:520px}
article.prose table th,article.prose table td{padding:16px 20px;text-align:left;border-bottom:1px solid var(--border-soft);font-size:.92rem;color:var(--text-muted)}
article.prose table th{color:var(--text);font-family:var(--font-display);font-weight:700;background:var(--surface-2)}
article.prose table tr:last-child td{border-bottom:none}

.skip-link{position:absolute;left:-999px;top:0;background:var(--accent);color:#ffffff;padding:10px 16px;border-radius:0 0 10px 0;z-index:100}
.skip-link:focus{left:0}

/* Scroll reveal — the class is added by JS, so without JS everything stays visible */
.reveal{opacity:0;transform:translateY(22px)}
.reveal.reveal-in{opacity:1;transform:none;transition:opacity .7s ease, transform .7s var(--ease)}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  .reveal{opacity:1;transform:none}
}
