/* Inter, served from this site (no request to Google Fonts). Same weights and font files Google served before. */
@font-face{ font-family:"Inter"; font-style:normal; font-weight:400; font-display:swap; src:url("../fonts/inter-latin-ext.woff2") format("woff2"); unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:400; font-display:swap; src:url("../fonts/inter-latin.woff2") format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:500; font-display:swap; src:url("../fonts/inter-latin-ext.woff2") format("woff2"); unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:500; font-display:swap; src:url("../fonts/inter-latin.woff2") format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:600; font-display:swap; src:url("../fonts/inter-latin-ext.woff2") format("woff2"); unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:600; font-display:swap; src:url("../fonts/inter-latin.woff2") format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:700; font-display:swap; src:url("../fonts/inter-latin-ext.woff2") format("woff2"); unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:700; font-display:swap; src:url("../fonts/inter-latin.woff2") format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:900; font-display:swap; src:url("../fonts/inter-latin-ext.woff2") format("woff2"); unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face{ font-family:"Inter"; font-style:normal; font-weight:900; font-display:swap; src:url("../fonts/inter-latin.woff2") format("woff2"); unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

  :root{
    --bg:#0A0A0D;
    --bg-deep:#050507;
    --surface:#131318;
    --surface-2:#1A1A22;
    --text:#F4F3EF;
    --muted:#8F8F99;
    --line: rgba(244,243,239,0.08);
    --line-strong: rgba(244,243,239,0.16);
    --accent:#5B7CFF;
    --accent-rich:#3E5AE0;
    --accent-soft: rgba(91,124,255,0.14);
    --radius-sm: 10px;
    --radius-md: 20px;
    --radius-full: 999px;
    --shadow-card: 0 30px 70px -32px rgba(0,0,0,0.7);
    --shadow-lift: 0 18px 40px -18px rgba(0,0,0,0.55);
    --ease: cubic-bezier(.16,.84,.44,1);
    --ease-in-out: cubic-bezier(.77,0,.175,1);
    --font-sf: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Inter", "Helvetica Neue", sans-serif;
  }

  /* ---------- LIGHT THEME (toggle) ----------
     Same token set, light values. Everything that already reads from these
     variables (body text/background, borders, cards, buttons, badges...)
     adapts automatically — no other rule needs to change. Only the handful
     of places that hardcode a color instead of using a token (the Hero's
     own background + the nav's white text, both tuned specifically to sit
     on a dark backdrop) get an explicit override further below. */
  :root[data-theme="light"]{
    /* Matches the Hero's own outer halo tone (see .hero light override below)
       so the seam between the Hero and the section right after it disappears.
       Was #F4F6FB (slightly whiter) — swap back to that if you change your mind. */
    --bg:#E8EBF2;
    --bg-deep:#E7EAF2;
    --surface:#FFFFFF;
    --surface-2:#F0F2F7;
    --text:#14151A;
    --muted:#5C5E6B;
    --line: rgba(20,21,26,0.08);
    --line-strong: rgba(20,21,26,0.14);
    --accent:#3E5AE0;
    --accent-rich:#2C42B8;
    --accent-soft: rgba(62,90,224,0.12);
    --shadow-card: 0 30px 70px -32px rgba(20,21,26,0.18);
    --shadow-lift: 0 18px 40px -18px rgba(20,21,26,0.14);
  }

  *{margin:0;padding:0;box-sizing:border-box;}
  html{scroll-behavior:smooth;}
  body{
    background:var(--bg);
    color:var(--text);
    font-family: var(--font-sf);
    overflow-x:hidden;
    -webkit-font-smoothing:antialiased;
  }
  ::selection{ background:var(--accent); color:var(--bg); }

  /* Fixed edge-fade overlay: --fade-color defaults to the page's own --bg so it
     tracks the light/dark toggle automatically. Over the Hero (whose own
     background differs from --bg, especially in light mode) js/script.js adds
     .hero-in-view to <body> via IntersectionObserver so the fade can switch to
     a color that actually matches what's behind it there. */
  :root{ --fade-color: var(--bg); }
  body.hero-in-view{ --fade-color:transparent; }
  :root[data-theme="light"] body.hero-in-view{ --fade-color:transparent; }
  .scroll-fade-overlay{
    position:fixed; inset:0; z-index:9999; pointer-events:none;
    background:
      linear-gradient(to bottom, var(--fade-color) 0%, transparent 14%),
      linear-gradient(to top, var(--fade-color) 0%, transparent 14%);
    background-repeat:no-repeat;
    background-position: top, bottom;
    background-size: 100% 160px, 100% 160px;
  }
  @media(max-width:768px){
    .scroll-fade-overlay{ background-size: 100% 90px, 100% 90px; }
  }

  a{ color:inherit; text-decoration:none; }
  button{ font-family:inherit; cursor:pointer; border:none; background:none; color:inherit; }

  /* Global keyboard-focus ring: every link/button/custom control site-wide gets
     one consistent, on-brand indicator. Form inputs are excluded on purpose —
     they already carry their own bespoke border+glow focus treatment. */
  a:focus-visible,
  button:focus-visible,
  [role="button"]:focus-visible,
  [tabindex]:focus-visible{
    outline: 2px solid var(--accent);
    outline-offset: 3px;
  }

  .wrap{ max-width:1280px; margin:0 auto; padding:0 40px; position:relative; }
  @media(max-width:767px){ .wrap{ padding:0 16px; } }

  @media(prefers-reduced-motion: reduce){
    *:not(.hero-showcase *):not(.hero-v2):not(.fp-panel):not(.fp-panel *):not(.fp-trigger):not(.fp-trigger *){ animation-duration:0.01ms !important; animation-iteration-count:1 !important; transition-duration:0.01ms !important; scroll-behavior:auto !important; }
    .hs-bob{ animation:none !important; }
  }

  /* ---------- NAV (floating capsule glassmorphism) ---------- */
  nav{
    position:fixed; top:20px; left:50%; z-index:100;
    transform:translateX(-50%);
    display:flex; align-items:center; justify-content:space-between;
    gap:28px;
    width:min(1140px, calc(100vw - 32px));
    padding:10px 10px 10px 24px;
    border-radius:9999px;
    background: rgba(255,255,255,0.08);
    backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
    border: 1px solid rgba(255,255,255,0.12);
    box-shadow: 0 20px 40px rgba(0,0,0,0.4);
  }
  /* White-tinted glass reads as a barely-visible smudge once the page
     behind it turns light — an inverted dark-tinted glass keeps the same
     floating-capsule feel with real contrast. */
  :root[data-theme="light"] nav{
    background: rgba(20,21,26,0.05);
    border: 1px solid rgba(20,21,26,0.1);
    box-shadow: 0 20px 40px rgba(20,21,26,0.12);
  }
  .logo{
    font-family: var(--font-sf);
    font-weight:600; font-size:17px; letter-spacing:0.01em;
    display:flex; align-items:center; gap:10px;
    white-space:nowrap; flex-shrink:0;
  }
  .logo .dot{ width:6px;height:6px;border-radius:50%;background:var(--accent); transition:background .5s var(--ease); box-shadow:0 0 10px 1px var(--accent-soft); }
  .logo-mark{
    width:38px; height:38px; border-radius:50%;
    display:block; object-fit:cover;
    box-shadow: 0 0 0 1px var(--line-strong), 0 6px 18px rgba(0,0,0,0.45);
    background: radial-gradient(circle, var(--surface), var(--bg-deep));
  }
  .footer-col .logo-mark, .footer-top .logo-mark{ width:44px; height:44px; }
  .nav-pills{
    display:flex; align-items:center; gap:4px;
  }
  .nav-pills a{
    font-size:14.5px; font-weight:500; padding:8px 20px; border-radius:9999px; color:rgba(255,255,255,0.8);
    transition: all 0.25s cubic-bezier(0.4,0,0.2,1);
  }
  .nav-pills a:hover{ color:#fff; background:rgba(255,255,255,0.15); }
  .nav-pills a:active{ transform:scale(0.98); }

  .nav-item.dropdown{ position:relative; }
  .dropdown-trigger{
    display:flex; align-items:center; gap:6px;
    font-family:inherit; font-size:14.5px; font-weight:500; padding:8px 18px 8px 20px; border-radius:9999px;
    color:rgba(255,255,255,0.8); background:none; border:none; cursor:pointer;
    transition: all 0.25s cubic-bezier(0.4,0,0.2,1);
  }
  .dropdown-trigger:hover{ color:#fff; background:rgba(255,255,255,0.15); }
  .dropdown-trigger:active{ transform:scale(0.98); }
  .dropdown.open .dropdown-trigger{ color:#fff; background:rgba(255,255,255,0.15); }
  .dropdown-trigger .chev{ width:10px; height:10px; transition:transform .3s var(--ease); flex-shrink:0; }
  .dropdown.open .dropdown-trigger .chev{ transform:rotate(180deg); }

  :root[data-theme="light"] .nav-pills a,
  :root[data-theme="light"] .dropdown-trigger{ color:rgba(20,21,26,0.72); }
  :root[data-theme="light"] .nav-pills a:hover,
  :root[data-theme="light"] .dropdown-trigger:hover,
  :root[data-theme="light"] .dropdown.open .dropdown-trigger{
    color:#14151A; background:rgba(20,21,26,0.06);
  }

  .dropdown-panel{
    position:absolute; top:calc(100% + 14px); left:50%;
    transform-origin: top center;
    transform:translateX(-50%) translateY(-6px) scale(0.96);
    width:250px;
    background: rgba(10,10,13,0.75);
    backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
    border:1px solid rgba(255,255,255,0.12);
    border-radius:16px;
    padding:8px;
    box-shadow: var(--shadow-card), inset 0 1px 0 rgba(255,255,255,0.05);
    opacity:0; pointer-events:none;
    transition: opacity .2s var(--ease), transform .2s var(--ease);
    z-index:200;
  }
  :root[data-theme="light"] .dropdown-panel{
    background: rgba(255,255,255,0.92);
    border:1px solid rgba(20,21,26,0.1);
    box-shadow: var(--shadow-card), inset 0 1px 0 rgba(255,255,255,0.5);
  }
  .dropdown.open .dropdown-panel{ opacity:1; pointer-events:auto; transform:translateX(-50%) translateY(0) scale(1); }
  .dropdown-item{
    display:flex; align-items:center; justify-content:space-between;
    padding:11px 14px; border-radius:10px;
    font-size:13.5px; color:var(--text); opacity:0.82;
    transition: background .2s var(--ease), opacity .2s var(--ease), padding-left .2s var(--ease);
  }
  .dropdown-item:hover{ background:rgba(255,255,255,0.06); opacity:1; padding-left:18px; }
  :root[data-theme="light"] .dropdown-item:hover{ background:rgba(20,21,26,0.05); }
  .dropdown-item .tag{ font-size:10.5px; color:var(--muted); border:1px solid var(--line); padding:2px 7px; border-radius:var(--radius-full); }
  .dropdown-divider{ height:1px; background:var(--line); margin:6px 8px; }
  .nav-cta{
    font-size:13px; font-weight:600; padding:11px 22px; border-radius:9999px;
    background:#000000; color:#ffffff;
    border:1px solid rgba(255,255,255,0.2);
    box-shadow: 0 4px 12px rgba(0,0,0,0.5);
    position:relative; overflow:hidden;
    white-space:nowrap; flex-shrink:0;
    transition: all 0.25s cubic-bezier(0.4,0,0.2,1);
  }
  .nav-cta:hover{ transform:translateY(-1px); box-shadow: 0 6px 18px rgba(0,0,0,0.6); }
  .nav-cta:active{ transform:scale(0.96); }

  /* Light/dark switch. Sun icon shows only in light mode, moon only in
     dark — swapped purely via the data-theme attribute, no JS re-render. */
  .theme-toggle-btn{
    width:40px; height:40px; border-radius:9999px; flex-shrink:0;
    display:flex; align-items:center; justify-content:center;
    border:1px solid rgba(255,255,255,0.12); background:rgba(255,255,255,0.04);
    color:#fff;
    transition: border-color .25s var(--ease), background .25s var(--ease), transform .16s var(--ease);
  }
  .theme-toggle-btn:hover{ border-color:var(--accent); background:var(--accent-soft); }
  .theme-toggle-btn:active{ transform:scale(0.9); }
  .theme-toggle-btn svg{ width:18px; height:18px; }
  .theme-toggle-btn .icon-sun{ display:none; }
  :root[data-theme="light"] .theme-toggle-btn{
    color:#14151A; border-color:rgba(20,21,26,0.12); background:rgba(20,21,26,0.04);
  }
  :root[data-theme="light"] .theme-toggle-btn .icon-moon{ display:none; }
  :root[data-theme="light"] .theme-toggle-btn .icon-sun{ display:block; }

  .nav-mobile-toggle{ display:none; }

  @media(min-width:681px) and (max-width:920px){
    nav{ padding:8px 8px 8px 18px; gap:16px; }
    .logo{ font-size:14.5px; gap:8px; }
    .logo-mark{ width:32px; height:32px; }
    .nav-pills{ gap:2px; }
    .nav-pills a{ padding:8px 12px; font-size:13px; }
    .dropdown-trigger{ padding:8px 10px 8px 12px; font-size:13px; }
    .nav-cta{ padding:9px 16px; font-size:12px; }
  }

  /* ---------- HAMBURGER + MOBILE MENU ---------- */
  .hamburger-btn{
    display:none; flex-direction:column; justify-content:center; align-items:center; gap:5px;
    width:44px; height:44px; border-radius:9999px; flex-shrink:0;
    background:rgba(255,255,255,0.04); border:1px solid var(--line-strong);
    transition: border-color .25s var(--ease), transform .16s var(--ease);
    position:relative; z-index:210;
  }
  .hamburger-btn:active{ transform:scale(0.94); }
  .hamburger-btn span{
    display:block; width:18px; height:2px; border-radius:2px;
    background:var(--text);
    transition: transform .35s var(--ease), opacity .25s var(--ease);
  }
  .hamburger-btn.open span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
  .hamburger-btn.open span:nth-child(2){ opacity:0; }
  .hamburger-btn.open span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }

  .mobile-menu{
    position:fixed; inset:0; z-index:90;
    background: rgba(5,5,7,0.97);
    backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px);
    opacity:0; pointer-events:none;
    transition: opacity .4s var(--ease);
    overflow-y:auto;
  }
  /* Mobile links already read color from var(--text), which flips to dark
     in light mode — the overlay itself has to flip too or that text goes
     dark-on-dark. */
  :root[data-theme="light"] .mobile-menu{ background: rgba(255,255,255,0.97); }
  .mobile-menu.open{ opacity:1; pointer-events:auto; }
  .mobile-menu-inner{
    padding:110px 28px 50px;
    display:flex; flex-direction:column;
    transform:translateY(-18px); opacity:0;
    transition: transform .45s var(--ease) .06s, opacity .4s var(--ease) .06s;
  }
  .mobile-menu.open .mobile-menu-inner{ transform:translateY(0); opacity:1; }

  .mobile-link{
    font-family: var(--font-sf); font-weight:600;
    font-size:clamp(18px,5.2vw,22px);
    min-height:44px; display:flex; align-items:center;
    padding:14px 2px; border-bottom:1px solid var(--line);
    color:var(--text);
    transition: transform .16s var(--ease), opacity .16s var(--ease);
  }
  .mobile-link:active{ transform:scale(0.98); opacity:0.7; }
  .mobile-accordion-trigger{
    width:100%; min-height:44px; display:flex; justify-content:space-between; align-items:center;
    font-family: var(--font-sf); font-weight:600;
    font-size:clamp(18px,5.2vw,22px);
    padding:14px 2px; border-bottom:1px solid var(--line);
    color:var(--text); background:none; text-align:left;
    transition: transform .16s var(--ease), opacity .16s var(--ease);
  }
  .mobile-accordion-trigger:active{ transform:scale(0.98); opacity:0.7; }
  .mobile-accordion-trigger .chev{
    width:14px; height:14px; flex-shrink:0; margin-left:12px;
    transition:transform .35s var(--ease);
  }
  .mobile-accordion.open .mobile-accordion-trigger .chev{ transform:rotate(180deg); }
  .mobile-accordion-panel{
    max-height:0; overflow:hidden;
    transition: max-height .45s var(--ease);
  }
  .mobile-accordion.open .mobile-accordion-panel{ max-height:640px; }
  .mobile-sublink{
    display:flex; justify-content:space-between; align-items:center;
    padding:11px 2px 11px 14px;
    font-size:clamp(13.5px,3.8vw,15px); color:var(--muted);

  }
  .mobile-sublink .tag{
    font-size:10.5px; color:var(--muted); border:1px solid var(--line);
    padding:2px 7px; border-radius:100px;
  }
  .mobile-cta{
    margin-top:28px; text-align:center;
    background:var(--text); color:var(--bg); font-weight:600;
    font-size:clamp(15px,4.2vw,16px);
    padding:17px; border-radius:var(--radius-full);
    transition: transform .16s var(--ease);
  }
  .mobile-cta:active{ transform:scale(0.97); }

  @media(max-width:680px){
    .hamburger-btn{ display:flex; }
  }

  @media(max-width:680px){
    .nav-pills{ display:none; }
    .nav-cta{ display:none; }
    nav{ padding:8px 8px 8px 20px; }
  }

  /* ---------- HERO ---------- */
  .hero{
    position:relative; height:100svh; min-height:640px;
    display:flex; flex-direction:column; justify-content:center;
    overflow:hidden;
    background-color: #000000;
  }
  :root[data-theme="light"] .hero{
    /* Elliptical, and fully settled on the page color (#E8EBF2 = light --bg) by
       70% — the midpoints of all four edges sit at ~70% of the way out, so the
       Hero's bottom edge now meets the next section with no visible seam (the
       old circle only reached the page color in the far corners). */
    background: radial-gradient(ellipse at center, #D2D8E6 0%, #DEE3EE 38%, #E8EBF2 70%);
  }
  .hero-inner{
    position:relative; z-index:10; width:100%; height:100%;
    display:flex; flex-direction:column; align-items:flex-start; justify-content:flex-start;
    padding:150px 6% 0;
    gap:14px;
    pointer-events:none;
  }
  /* Desktop: pull the headline/description block in from the screen edge,
     toward the robot in the middle. */
  @media(min-width:900px){
    .hero-inner{ padding-left:clamp(6%, 10vw, 220px); }
  }
  /* Wide screens have a lot of empty room between the text and the robot, so
     pull the text further in there (narrower screens keep the value above so
     it can't run into the robot). */
  @media(min-width:1500px){
    .hero-inner{ padding-left:clamp(6%, 14vw, 340px); }
  }
  @media(max-width:640px){
    .hero-inner{ padding-top:120px; }
  }
  @media(max-height:700px){
    .hero-inner{ padding-top:100px; }
  }

  .particles{ position:absolute; inset:0; pointer-events:none; }
  .particle-wrap{
    position:absolute;
    opacity:1;
    transform: translateY(0);
    transition: opacity .55s var(--ease), transform .55s var(--ease);
  }
  .particle-wrap.exiting{ opacity:0; transform: translateY(-46px); }
  .particle-wrap.entering{ opacity:0; transform: translateY(32px); }
  .particle-float{
    animation: floaty 6s ease-in-out infinite;
  }
  .particle{
    position:relative;
    opacity:0.9;
    color: rgba(0,210,255,0.85);
    transition: transform .1s linear;
    filter: drop-shadow(0 0 6px rgba(0,210,255,0.55)) drop-shadow(0 8px 14px rgba(0,0,0,0.35));
  }
  .particle svg{
    display:block;
    width: var(--particle-size, 28px);
    height: var(--particle-size, 28px);
  }
  @keyframes floaty{
    0%,100%{ transform: translateY(0px) rotate(0deg); }
    50%{ transform: translateY(-16px) rotate(6deg); }
  }

  .slide-stage{
    position:relative; width:100%;
    display:flex; align-items:center; justify-content:flex-start;
    height:min(38vw, 300px);
    pointer-events:none;
  }
  @media(max-width:640px){
    .slide-stage{ height:130px; }
  }
  @media(max-height:700px){
    .slide-stage{ height:110px; }
  }
  .slide{
    position:absolute; inset:0;
    display:flex; align-items:center; justify-content:flex-start;
    opacity:0; pointer-events:none;
    transform: scale(0.94);
    transition: opacity .7s var(--ease), transform .7s var(--ease);
  }
  .slide-content{ position:relative; display:flex; align-items:center; justify-content:flex-start; }
  .slide-content .orb{ position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); }
  .slide.active{ opacity:1; transform:scale(1); }
  .slide.exit-left{ transform: translateX(-6%) scale(0.94); opacity:0; }
  .slide.exit-right{ transform: translateX(6%) scale(0.94); opacity:0; }

  .headline{
    font-family: var(--font-sf);
    font-weight:800;
    /* Same size for every slide (CLAUDE, CHATGPT, CREATIVE CLOUD, STREAMING,
       VPN, SOFTWARE) — was clamp(48px,9vw,120px) with a separate .long
       modifier only on the longer words, which made short words render much
       bigger than long ones and look inconsistent slide to slide. */
    font-size: clamp(24px, 5vw, 68px);
    line-height:0.86;
    letter-spacing:-0.02em;
    color:#ffffff;
    text-align:left;
    white-space:nowrap;
    user-select:none;
    position:relative;
    z-index:10;
    filter: drop-shadow(0 30px 50px rgba(0,0,0,0.35));
  }
  /* A dark fill alone reads fine over the light page but disappears wherever
     it crosses the robot underneath. Contrast now comes from the liquid-glass
     panel behind the text (mobile, below) rather than a stroke/halo baked
     into the letters themselves. */
  :root[data-theme="light"] .headline{
    color:#14151A;
    filter: drop-shadow(0 20px 40px rgba(20,21,26,0.12));
    text-shadow: 0 0 20px rgba(56,132,255,0.35);
  }

  /* "CREATIVE CLOUD" is too wide to sit left of the robot on one line, so on
     desktop/tablet "CLOUD" drops under "CREATIVE". Phones keep one line. */
  .headline .hl-br{ display:none; }
  @media(min-width:641px){
    .headline .hl-br{ display:inline; }
  }

  /* The floating orb is hidden in the Hero; it still renders on product subpages (.product-hero-v etc). */
  .slide-stage .orb{ display:none; }

  .slide-meta{
    position:relative;
    z-index:2; max-width:400px;
  }
  .slide-meta .eyebrow{
    font-family: var(--font-sf); font-size:32px; font-weight:600; margin-bottom:10px;
  }
  .slide-meta p{ font-size:19px; color:var(--muted); line-height:1.55; }
  /* "Suscripción completa" / "Plan Plus" / "Plan Pro" / "Combo Streaming"...
     — this label cycles per slide, sitting right where it can cross either
     the light page or the dark robot circle depending on scroll/viewport.
     A solid blue fill + neon glow reads clearly against both. */
  :root[data-theme="light"] .slide-meta .eyebrow{
    color:#2F63E8;
    text-shadow: 0 0 16px rgba(56,132,255,0.4);
  }
  :root[data-theme="light"] .slide-meta p{
    color:#14151A;
  }

  .hero-controls{
    position:absolute; left:50%; bottom:150px; transform:translateX(-50%);
    display:flex; align-items:center; gap:10px; z-index:10;
    pointer-events:auto;
  }
  @media(max-width:640px){
    .hero-controls{ bottom:145px; }
  }
  .ctrl-btn{
    width:44px; height:44px; border-radius:9999px;
    border:1px solid var(--line-strong);
    display:flex; align-items:center; justify-content:center;
    transition: border-color .3s var(--ease), transform .16s var(--ease), background .3s var(--ease);
  }
  .ctrl-btn:hover{ border-color:var(--accent); background:var(--accent-soft); }
  .ctrl-btn:active{ transform:scale(0.92); }
  .ctrl-btn svg{ width:14px; height:14px; }
  .dots{ display:flex; gap:6px; margin:0 4px; }
  .dot-ind{ width:5px; height:5px; border-radius:50%; background:var(--line-strong); transition: background .3s var(--ease), width .3s var(--ease); }
  .dot-ind.active{ background:var(--accent); width:16px; border-radius:3px; box-shadow:0 0 8px var(--accent-soft); }

  .hero-inicia-btn{
    position:absolute; left:50%; bottom:235px; transform:translateX(-50%);
    z-index:10; pointer-events:auto; cursor:pointer;
    font-family: var(--font-sf); font-size:1.6rem; font-weight:800; color:#fff;
    padding:20px 50px; border-radius:999px;
    background: linear-gradient(135deg, #2563eb, #38bdf8);
    box-shadow: 0 0 20px rgba(56,189,248,0.5);
    transition: transform .16s var(--ease), box-shadow .25s var(--ease);
  }
  .hero-inicia-btn:hover{ transform:translateX(-50%) translateY(-2px); box-shadow:0 0 30px rgba(56,189,248,0.7); }
  .hero-inicia-btn:active{ transform:translateX(-50%) scale(0.96); }
  @media(max-width:640px){
    .hero-inicia-btn{ bottom:210px; padding:16px 34px; font-size:1.15rem; }
  }

  @media(max-width:640px){
    /* Wider wrap box + a scaled-down eyebrow/paragraph (still bigger than the
       original pre-redesign sizes) so the whole text block stays short
       enough, top to bottom, to clear the robot now that it's been pushed
       toward the lower half of the screen above. */
    .slide-meta{ max-width:84vw; }
    .slide-meta .eyebrow{ font-size:24px; margin-bottom:6px; }
    .slide-meta p{ font-size:15px; line-height:1.45; }
    .headline{ letter-spacing:-0.01em; }

    /* Liquid-glass chip behind the headline and behind the eyebrow+description
       — a blurred, translucent surface (not a flat dark box) so the text pops
       against the robot without needing a stroke/halo baked into the letters
       themselves. Neutral frost (light glass in light mode, dark glass in
       dark mode) rather than a color tint, so it reads as "glass" over
       whatever happens to be behind it instead of a fixed color block. */
    .slide-content, .slide-meta{
      z-index:10;
      background: rgba(255,255,255,0.4);
      backdrop-filter: blur(20px) saturate(180%);
      -webkit-backdrop-filter: blur(20px) saturate(180%);
      border: 1px solid rgba(255,255,255,0.55);
      border-radius: 20px;
      padding: 12px 18px;
      box-shadow: 0 8px 32px rgba(20,21,26,0.12), inset 0 1px 0 rgba(255,255,255,0.6);
    }
    :root:not([data-theme="light"]) .slide-content,
    :root:not([data-theme="light"]) .slide-meta{
      background: rgba(20,20,30,0.4);
      border-color: rgba(255,255,255,0.14);
      box-shadow: 0 8px 32px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.12);
    }
    .slide-meta p{ margin-bottom:0; }

    /* Mobile carousel controls: pushed further down so there's real breathing
       room between them and the "10% OFF" button above — they were sitting
       close enough to nearly touch it. */
    .hero-controls{ bottom:115px; }
  }
  @media(max-height:700px){
    .hero-controls{ bottom:105px; }
  }


  /* ---------- HERO v2: color showcase (Before -> After, per-product colors) ----------
     Replaces the old robot Hero (the Spline robot was removed). The old
     headline/carousel markup is still in the HTML (hidden) because js/script.js
     drives the slides from it. Colors come from
     js/script.js (--hs-bg / --hs-c1 / --hs-c2 on #hero). */
  @property --hs-bg{ syntax:'<color>'; inherits:true; initial-value:#A3A2AA; }
  @property --hs-c1{ syntax:'<color>'; inherits:true; initial-value:#B9B8BF; }
  @property --hs-c2{ syntax:'<color>'; inherits:true; initial-value:#94939B; }
  .hero.hero-v2, :root[data-theme="light"] .hero.hero-v2{
    background:none; background-color:var(--hs-bg);
    transition: --hs-bg .9s ease, --hs-c1 .9s ease, --hs-c2 .9s ease;
  }
  .hero-v2 .hero-inner{ display:none; }

  .hero-showcase{
    position:absolute; inset:0; z-index:5;
    display:flex; align-items:center; justify-content:center;
    padding:104px 24px 36px;
  }
  .hs-stage{ width:min(1040px, 100%); display:flex; flex-direction:column; align-items:center; gap:16px; }

  .hs-card{
    position:relative; width:100%; height:clamp(380px, 58svh, 540px);
    border-radius:28px; color:#fff;
    background: linear-gradient(160deg, var(--hs-c1), var(--hs-c2));
    box-shadow: 0 50px 90px -30px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.28);
    display:flex; flex-direction:column;
    transition: filter .45s ease, transform .45s ease;
  }

  .hs-topbar{
    flex:none; height:60px; padding:0 28px;
    display:flex; align-items:center; justify-content:space-between; gap:16px;
    font-size:13px;
  }
  .hs-brand{ display:flex; align-items:center; gap:10px; font-weight:700; letter-spacing:-0.01em; }
  .hs-brand img{ border-radius:50%; display:block; }
  .hs-tabs{ display:flex; gap:10px; }
  .hs-tabs i{ font-style:normal; font-weight:600; font-size:12px; padding:6px 14px; border-radius:100px; background:rgba(255,255,255,0.16); transition: background .4s ease; }
  .hs-circles{ display:flex; gap:8px; }
  .hs-circles b{ width:22px; height:22px; border-radius:50%; background:rgba(255,255,255,0.28); transition: background .4s ease; }

  .hs-real{ flex:1; min-height:0; display:flex; flex-direction:column; }

  .hs-body{
    flex:1; min-height:0;
    display:grid; grid-template-columns:1.05fr 1fr; align-items:center; gap:20px;
    padding:0 44px;
  }
  .hs-copy{ transition: opacity .24s ease, transform .24s ease, filter .24s ease; }
  .hs-copy.swap, .hs-price.swap{ opacity:0; transform:translateY(8px); filter:blur(6px); }
  .hs-eyebrow{ font-size:13px; font-weight:700; letter-spacing:0.06em; text-transform:uppercase; opacity:0.9; }
  .hs-title{
    font-family:var(--font-sf); font-weight:800; font-size:clamp(34px, 4.6vw, 62px);
    line-height:0.98; letter-spacing:-0.025em; margin:10px 0 14px; color:#fff;
  }
  .hs-desc{ font-size:clamp(14px, 1.25vw, 17px); line-height:1.5; max-width:430px; color:rgba(255,255,255,0.92); }

  .hs-art{ position:relative; height:100%; display:flex; align-items:center; justify-content:center; will-change:transform; }
  .hs-bob{ position:relative; height:100%; aspect-ratio:1; animation: hsFloat 6s ease-in-out infinite; }
  @keyframes hsFloat{ 0%,100%{ transform:translateY(0) rotate(0deg); } 50%{ transform:translateY(-12px) rotate(1.2deg); } }
  .hs-icon{
    position:absolute; inset:0; width:100%; height:100%; object-fit:contain;
    opacity:0; transform:scale(0.84) rotate(-8deg);
    /* No CSS filter on the image at all: blur()/drop-shadow() on these stacked, animated images
       rendered as a white rectangle on iPhone Safari. The shadow is a plain gradient below
       (.hs-bob::before) and the swap is opacity + scale + rotate. */
    transition: opacity .55s ease, transform .7s cubic-bezier(.2,.8,.2,1);
    pointer-events:none; user-select:none; z-index:1;
  }
  .hs-icon.active{ opacity:1; transform:none; }
  .hs-bob::before{
    content:""; position:absolute; z-index:0; pointer-events:none;
    left:14%; right:14%; bottom:-2%; height:14%; border-radius:50%;
    background: radial-gradient(ellipse at center, rgba(0,0,0,0.42) 0%, rgba(0,0,0,0.18) 45%, rgba(0,0,0,0) 72%);
  }
  /* Touch screens: the endless float animation is dropped (saves battery, avoids Safari repaint glitches). */
  @media (hover:none), (max-width:768px){
    .hs-bob{ animation:none; }
    .hs-art{ will-change:auto; }
  }

  .hs-foot{
    flex:none; height:84px; padding:0 32px 6px 44px;
    display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:16px;
  }
  .hs-price{ display:flex; align-items:baseline; gap:6px; transition: opacity .24s ease, transform .24s ease, filter .24s ease; }
  .hs-price small{ font-size:12px; opacity:0.8; }
  .hs-price strong{ font-family:var(--font-sf); font-size:26px; font-weight:800; letter-spacing:-0.01em; }
  .hs-price span{ font-size:13px; opacity:0.85; }
  .hs-controls{ display:flex; align-items:center; gap:10px; }
  .hs-controls .ctrl-btn{ width:38px; height:38px; border:1px solid rgba(255,255,255,0.45); background:rgba(255,255,255,0.14); color:#fff; }
  .hs-controls .ctrl-btn:hover{ background:rgba(255,255,255,0.28); border-color:#fff; }
  .hs-controls .dot-ind{ background:rgba(255,255,255,0.42); box-shadow:none; }
  .hs-controls .dot-ind.active{ background:#fff; box-shadow:none; }
  .hs-actions{ justify-self:end; display:flex; align-items:center; gap:10px; }
  .hs-link{
    font-weight:600; font-size:14px; color:#fff; padding:11px 20px; border-radius:100px;
    border:1.5px solid rgba(255,255,255,0.7); transition: background .2s ease;
  }
  .hs-link:hover{ background:rgba(255,255,255,0.18); }
  .hs-cta{
    font-family:var(--font-sf); font-weight:800; font-size:14px; padding:12px 22px; border-radius:100px;
    background:#fff; color:var(--hs-c2); cursor:pointer;
    box-shadow:0 10px 24px rgba(0,0,0,0.2); transition: transform .16s ease, box-shadow .2s ease;
  }
  .hs-cta:hover{ transform:translateY(-1px); box-shadow:0 14px 28px rgba(0,0,0,0.26); }
  .hs-cta:active{ transform:scale(0.96); }


  @media(max-width:768px){
    .hero-showcase{ padding:92px 14px 24px; align-items:flex-start; }
    .hs-card{ height:auto; border-radius:22px; }
    .hs-topbar{ padding:0 20px; height:54px; }
    .hs-tabs{ display:none; }
    .hs-body{ grid-template-columns:1fr; padding:0 22px; gap:4px; }
    .hs-art{ order:-1; height:190px; }
    .hs-bob{ height:100%; margin-top:0; }
    .hs-copy{ text-align:center; }
    .hs-title{ font-size:clamp(30px, 9vw, 42px); margin:6px 0 10px; }
    .hs-desc{ margin:0 auto; font-size:14.5px; }
    .hs-foot{
      height:auto; padding:16px 20px 20px; row-gap:14px;
      grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"price actions" "controls controls";
    }
    .hs-actions{ flex-wrap:wrap; justify-content:flex-end; min-width:0; }
    /* Software slide ("Consulta directa" + two buttons) does not fit one row on a phone: the
       "Consultar" button already says it, so the price text is hidden and the buttons are centered. */
    .hs-foot.is-consult{ grid-template-areas:"actions actions" "controls controls"; }
    .hs-foot.is-consult .hs-price{ display:none; }
    .hs-foot.is-consult .hs-actions{ justify-self:center; justify-content:center; }
    .hs-price{ grid-area:price; display:grid; grid-template-columns:auto auto; justify-content:start; align-items:baseline; column-gap:5px; }
    .hs-price small{ grid-column:1 / -1; }
    .hs-price strong{ white-space:nowrap; font-size:24px; }
    .hs-actions{ grid-area:actions; }
    .hs-controls{ grid-area:controls; justify-self:center; }
    .hs-link{ padding:10px 14px; font-size:13px; }
    .hs-cta{ padding:11px 18px; }
  }

  /* ---------- PRODUCT PAGE: CLAUDE PRO ---------- */
  .product-hero-v{
    position:relative; height:100svh; min-height:640px;
    background: radial-gradient(120% 70% at 50% 20%, #10131a, #000 65%);
    overflow:hidden;
    display:flex; align-items:flex-end;
  }
  @media(max-width:768px){
    /* Fixed height risks clipping/overlapping content when the copy block
       (title + tagline + description) needs more room than a phone screen
       gives it — min-height keeps the full-bleed photo effect by default,
       but lets the section grow instead of cutting text off or letting it
       sit under the fixed buttons. */
    .product-hero-v{ height:auto; min-height:100svh; }
  }
  /* Gemini Pro hero: replaced with the "principal" photo — this one is a
     real, fully opaque room shot (blurred bokeh lights/shelves in the
     background), not an alpha cutout like the previous one — so the
     edge-fade mask is back, same treatment as Streaming's living room. */
  .product-hero-v.theme-blue{
    --bg-parallax: 0px;
    --tint: 4,6,9;
    background:#070c14;
  }
  .product-hero-v.theme-blue::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.45) 55%, rgba(var(--tint),0.92) 100%),
      url('../img/GEMINI PRINCIPAL.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    -webkit-mask-image:
      linear-gradient(to right, transparent 0%, #000 16%, #000 84%, transparent 100%),
      linear-gradient(to bottom, transparent 0%, #000 22%, #000 100%);
    -webkit-mask-composite: source-in;
    mask-image:
      linear-gradient(to right, transparent 0%, #000 16%, #000 84%, transparent 100%),
      linear-gradient(to bottom, transparent 0%, #000 22%, #000 100%);
    mask-composite: intersect;
    opacity: var(--bg-opacity, 1);
  }
  /* Creative Cloud hero: the designer photo is the hero's own full-bleed
     background (not a floating image) — lives on a ::before so it always
     paints behind .hero-centerpiece/.product-hero-copy/.hero-buy-btn
     regardless of DOM order. The PNG is already a real alpha cutout (no
     office/room background baked in), so its own transparency is what
     "fuses" it into the dark hero — no extra edge mask needed. */
  .product-hero-v.theme-rainbow{
    --bg-parallax: 0px;
    --tint: 6,4,9;
    background:#0e0714;
  }
  .product-hero-v.theme-rainbow::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.4) 55%, rgba(var(--tint),0.9) 100%),
      url('../img/creative-cloud-Photoroom.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    opacity: var(--bg-opacity, 1);
  }
  .product-hero-v.theme-rainbow .v-vignette{
    box-shadow:
      inset 0 0 220px 60px #000,
      inset 0 -220px 200px -50px #000,
      inset 0 160px 180px -50px #000;
    background: rgba(0,0,0,0.1);
  }
  /* Streaming hero: same full-bleed background-photo treatment, but this
     photo is a real, fully opaque living-room shot (not an alpha cutout) —
     needs the edge-fade mask brought back so the room fuses into the dark
     hero on the left/right/top instead of showing a hard rectangle. */
  .product-hero-v.theme-streaming{
    --bg-parallax: 0px;
    --tint: 6,4,9;
    background:#0b0b0f;
  }
  .product-hero-v.theme-streaming::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.45) 55%, rgba(var(--tint),0.92) 100%),
      url('../img/Streaming.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    -webkit-mask-image:
      linear-gradient(to right, transparent 0%, #000 16%, #000 84%, transparent 100%),
      linear-gradient(to bottom, transparent 0%, #000 22%, #000 100%);
    -webkit-mask-composite: source-in;
    mask-image:
      linear-gradient(to right, transparent 0%, #000 16%, #000 84%, transparent 100%),
      linear-gradient(to bottom, transparent 0%, #000 22%, #000 100%);
    mask-composite: intersect;
    opacity: var(--bg-opacity, 1);
  }
  /* VPN hero: same full-bleed background-photo treatment as Claude Pro and
     Creative Cloud — this photo is already a real alpha cutout (no room
     background baked in), so no edge-fade mask needed here either. */
  .product-hero-v.theme-vpn{
    --bg-parallax: 0px;
    --tint: 4,4,9;
    background:#0b0a14;
  }
  .product-hero-v.theme-vpn::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.4) 55%, rgba(var(--tint),0.9) 100%),
      url('../img/VPN.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    opacity: var(--bg-opacity, 1);
  }
  /* Especializados hero: same full-bleed background-photo treatment as the
     others — real alpha cutout (no room background baked in), so no
     edge-fade mask needed. */
  .product-hero-v.theme-special{
    --bg-parallax: 0px;
    --tint: 6,8,9;
    background:#0a0e11;
  }
  .product-hero-v.theme-special::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.4) 55%, rgba(var(--tint),0.9) 100%),
      url('../img/Software.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    opacity: var(--bg-opacity, 1);
  }
  /* ChatGPT hero: same full-bleed background-photo treatment as the others —
     real alpha cutout (no room background baked in), so no edge-fade mask
     needed. */
  .product-hero-v.theme-green{
    --bg-parallax: 0px;
    --tint: 4,9,7;
    background:#070f0c;
  }
  .product-hero-v.theme-green::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.4) 55%, rgba(var(--tint),0.9) 100%),
      url('../img/chat gpt.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    opacity: var(--bg-opacity, 1);
  }
  /* Claude Pro hero: same full-bleed background-photo treatment as Creative
     Cloud — the photo lives on a ::before so it always paints behind
     .hero-centerpiece/.product-hero-copy/.hero-buy-btn, and its own
     transparency (already a real alpha cutout, no room background baked
     in) is what fuses it into the dark hero. */
  .product-hero-v.theme-orange{
    --bg-parallax: 0px;
    --tint: 6,4,3;
    background:#170b05;
  }
  .product-hero-v.theme-orange::before{
    content:'';
    position:absolute; inset:0; z-index:0;
    background-image:
      linear-gradient(180deg, rgba(var(--tint),0.05) 0%, rgba(var(--tint),0.4) 55%, rgba(var(--tint),0.9) 100%),
      url('../img/CLaude pro.webp');
    background-size: auto, cover;
    background-position: center, center calc(100% + var(--bg-parallax));
    background-repeat: no-repeat;
    opacity: var(--bg-opacity, 1);
  }

  /* Light mode: every product hero's photo scrim (--tint), fallback color and
     edge vignette swap from near-black to the page's own light tone, so these
     sections stop looking like a dark hole punched into an otherwise light
     site. The photos themselves are real, moody photographs and can't be
     "relit" — only the tint/vignette around them changes — so text over them
     switches to var(--text)/var(--muted) below instead of staying white. */
  :root[data-theme="light"] .product-hero-v.theme-orange,
  :root[data-theme="light"] .product-hero-v.theme-green,
  :root[data-theme="light"] .product-hero-v.theme-blue,
  :root[data-theme="light"] .product-hero-v.theme-rainbow,
  :root[data-theme="light"] .product-hero-v.theme-streaming,
  :root[data-theme="light"] .product-hero-v.theme-vpn,
  :root[data-theme="light"] .product-hero-v.theme-special{
    --tint: 232,235,242;
    background: var(--bg);
  }
  :root[data-theme="light"] .v-vignette{
    box-shadow:
      inset 0 0 200px 60px var(--bg),
      inset 0 -220px 200px -60px var(--bg),
      inset 0 160px 180px -60px var(--bg);
  }
  :root[data-theme="light"] .product-hero-v.theme-rainbow .v-vignette{
    box-shadow:
      inset 0 0 220px 60px var(--bg),
      inset 0 -220px 200px -50px var(--bg),
      inset 0 160px 180px -50px var(--bg);
    background: rgba(232,235,242,0.1);
  }
  :root[data-theme="light"] .product-giant-title{ color:var(--text); }
  :root[data-theme="light"] .product-hero-tagline{ color:var(--muted); }
  :root[data-theme="light"] .product-hero-sub{ color:var(--text); opacity:0.82; }
  :root[data-theme="light"] .price-tag{
    background: rgba(255,255,255,0.6);
    border-color: rgba(20,21,26,0.14);
  }

  /* On a narrow phone viewport, background-size:cover has to crop almost
     all of a landscape photo's width to fill a tall/narrow box — anchoring
     at dead-center (the desktop default) means whichever half happens to
     land at 50% wins, cutting off the person in every one of these photos
     since none of them are symmetrical. Shifting the horizontal anchor
     toward wherever the actual subject sits (matching the same side we
     already use for each theme's glow placement below) keeps them in frame
     instead of showing an empty gap between them and the screen. Only the
     photo layer's position changes — the gradient scrim stays centered. */
  @media(max-width:768px){
    .product-hero-v.theme-orange::before{ background-position: center, 25% calc(100% + var(--bg-parallax)); }
    .product-hero-v.theme-green::before{ background-position: center, 25% calc(100% + var(--bg-parallax)); }
    .product-hero-v.theme-blue::before{ background-position: center, 30% calc(100% + var(--bg-parallax)); }
    .product-hero-v.theme-rainbow::before{ background-position: center, 70% calc(100% + var(--bg-parallax)); }
    .product-hero-v.theme-streaming::before{ background-position: center, 25% calc(100% + var(--bg-parallax)); }
    .product-hero-v.theme-vpn::before{ background-position: center, 25% calc(100% + var(--bg-parallax)); }
    .product-hero-v.theme-special::before{ background-position: center, 25% calc(100% + var(--bg-parallax)); }
  }

  /* ---------- CENTERED PRODUCT IMAGE (transparent PNG, parallax + fade on scroll) ---------- */
  .hero-centerpiece{
    position:absolute; left:50%; top:50%; z-index:2;
    transform:translate(-50%,-50%);
    width:min(60vw, 480px); height:min(50vh, 420px);
    display:flex; align-items:center; justify-content:center;
  }
  .gem-glow{
    position:absolute; inset:-30%;
    background: radial-gradient(circle, rgba(255,157,77,0.55), rgba(255,122,26,0.18) 45%, transparent 70%);
    filter: blur(28px);
    animation: gemPulse 4s ease-in-out infinite;
  }
  @keyframes gemPulse{
    0%,100%{ opacity:0.75; transform:scale(1); }
    50%{ opacity:1; transform:scale(1.08); }
  }
  @media(max-width:768px){
    .hero-centerpiece{ width:min(74vw, 300px); height:min(40vh, 280px); }
  }
  /* Creative Cloud hero: the designer photo is now the hero's own
     background (see .theme-rainbow::before above), so this centerpiece no
     longer holds a floating <img> — just a wide, soft violet/magenta glow
     sitting behind roughly where the designer appears in the frame, to
     accent the atmosphere without competing with the photo. */
  .theme-rainbow .hero-centerpiece{
    left:64%; top:62%;
    width:min(70vw, 720px); height:min(60vh, 520px);
  }
  .theme-rainbow .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-rainbow .hero-centerpiece{ left:58%; top:60%; width:min(90vw, 420px); height:min(46vh, 360px); }
  }
  /* Claude Pro hero: same idea as Creative Cloud's glow above, positioned
     over the left side of the frame where the developer sits in this photo
     (screen/UI mockup fills the right side). */
  .theme-orange .hero-centerpiece{
    left:32%; top:55%;
    width:min(60vw, 620px); height:min(58vh, 500px);
  }
  .theme-orange .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-orange .hero-centerpiece{ left:38%; top:55%; width:min(80vw, 380px); height:min(44vh, 340px); }
  }
  /* Streaming hero: glow sits behind the TV screen (right side of this
     photo) so it reads like the screen's own light spilling into the room,
     instead of floating in an arbitrary spot. */
  .theme-streaming .hero-centerpiece{
    left:72%; top:38%;
    width:min(55vw, 560px); height:min(50vh, 420px);
  }
  .theme-streaming .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-streaming .hero-centerpiece{ left:66%; top:40%; width:min(75vw, 340px); height:min(38vh, 300px); }
  }
  /* VPN hero: glow sits behind the monitor's "CONNECTED" status panel
     (right side of this photo), reading like the app's own violet accent
     glowing outward — same idea as Streaming's TV-glow placement. */
  .theme-vpn .hero-centerpiece{
    left:70%; top:42%;
    width:min(58vw, 580px); height:min(52vh, 440px);
  }
  .theme-vpn .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-vpn .hero-centerpiece{ left:64%; top:42%; width:min(78vw, 360px); height:min(40vh, 300px); }
  }
  /* Gemini Pro hero: in the "principal" photo the person sits on the left
     and the Gemini app screen fills the right — glow now sits behind the
     screen instead, same idea as Streaming/VPN's screen-glow placement. */
  .theme-blue .hero-centerpiece{
    left:68%; top:35%;
    width:min(58vw, 580px); height:min(52vh, 440px);
  }
  .theme-blue .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-blue .hero-centerpiece{ left:62%; top:38%; width:min(78vw, 360px); height:min(40vh, 300px); }
  }
  /* ChatGPT hero: person sits on the left side of this photo (screen fills
     the right), same layout as Claude Pro — glow placed behind them. */
  .theme-green .hero-centerpiece{
    left:30%; top:50%;
    width:min(58vw, 580px); height:min(56vh, 460px);
  }
  .theme-green .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-green .hero-centerpiece{ left:36%; top:50%; width:min(78vw, 360px); height:min(42vh, 300px); }
  }
  /* Especializados hero: glow sits behind the monitor/dashboard (right side
     of this photo), the colorful focal point — person in the hoodie is off
     to the left. */
  .theme-special .hero-centerpiece{
    left:68%; top:40%;
    width:min(58vw, 580px); height:min(52vh, 440px);
  }
  .theme-special .gem-glow{
    inset:-15%;
    filter: blur(60px);
  }
  @media(max-width:768px){
    .theme-special .hero-centerpiece{ left:62%; top:42%; width:min(78vw, 360px); height:min(40vh, 300px); }
  }
  .v-vignette{
    position:absolute; inset:0;
    box-shadow:
      inset 0 0 200px 60px #000,
      inset 0 -220px 200px -60px #000,
      inset 0 160px 180px -60px #000;
    pointer-events:none;
  }
  .product-hero-copy{
    position:relative; z-index:3;
    padding:0 40px 40px;
    max-width:760px;
  }
  .product-giant-title{
    font-family: var(--font-sf); font-weight:700; color:#ffffff;
    font-size:2.8rem;
    line-height:1.08; letter-spacing:-0.02em;
    margin-bottom:0;
  }
  @media(max-width:768px){
    .product-giant-title{ font-size:clamp(26px, 8vw, 34px); line-height:1.15; }
  }
  @media(max-width:480px){
    .product-giant-title{ font-size:clamp(22px, 9vw, 28px); }
  }
  /* Standalone block below the H1 — own line, never shares it with the
     product name, so it can never sit beside it or get cut mid-phrase. */
  .product-hero-tagline{
    display:block;
    color:#a1a1a6; font-weight:500;
    font-size:1.8rem; line-height:1.2;
    margin-top:8px;
  }
  @media(max-width:768px){
    .product-hero-tagline{ font-size:1.3rem; }
  }
  @media(max-width:480px){
    .product-hero-tagline{ font-size:1.05rem; }
  }
  .product-hero-sub{
    font-size:1.125rem;
    color:#e0e0e0; font-weight:400; line-height:1.5;
    margin-top:16px;
    max-width:520px;
  }
  @media(max-width:480px){
    .product-hero-sub{ font-size:0.95rem; }
  }
  .hero-buy-btn{
    position:fixed; right:clamp(26px, 2.6vw, 60px); bottom:28px; z-index:500;
    background: linear-gradient(160deg, var(--accent), var(--accent-rich));
    color:#fff; font-weight:600; font-size:14.5px;
    padding:14px 30px; border-radius:var(--radius-full);
    box-shadow:0 14px 34px -8px rgba(62,90,224,0.55), inset 0 1px 0 rgba(255,255,255,0.16);
    transition: transform .2s var(--ease), box-shadow .2s var(--ease);
  }
  .hero-buy-btn:hover{ transform:translateY(-2px); box-shadow:0 18px 40px -8px rgba(62,90,224,0.65), inset 0 1px 0 rgba(255,255,255,0.16); }
  .hero-buy-btn:active{ transform:translateY(-2px) scale(0.97); }

  .whatsapp-fab{
    position:fixed; right:clamp(26px, 2.6vw, 60px); bottom:92px; z-index:500;
    display:flex; align-items:center; gap:8px;
    background:#1fbf5c; color:#fff; font-weight:600; font-size:14.5px;
    padding:14px 26px; border-radius:var(--radius-full);
    box-shadow:0 14px 34px -8px rgba(31,191,92,0.5), inset 0 1px 0 rgba(255,255,255,0.16);
    transition: transform .2s var(--ease), box-shadow .2s var(--ease);
  }
  .whatsapp-fab:hover{ transform:translateY(-2px); box-shadow:0 18px 40px -8px rgba(31,191,92,0.6), inset 0 1px 0 rgba(255,255,255,0.16); }
  .whatsapp-fab:active{ transform:translateY(-2px) scale(0.97); }
  /* Same idea on wide screens: bring the floating buttons in toward the robot
     (the product-page Comprar button moves with it so they stay stacked). */
  @media(min-width:1500px){
    .whatsapp-fab, .hero-buy-btn{ right:clamp(32px, 11vw, 300px); }
  }
  .whatsapp-fab svg{ width:18px; height:18px; flex-shrink:0; }

  @media(max-width:768px){
    .hero-buy-btn{ right:18px; bottom:18px; padding:12px 24px; font-size:13.5px; }
    .whatsapp-fab{ right:16px; bottom:76px; padding:9px 16px; font-size:11.5px; gap:6px; }
    .whatsapp-fab svg{ width:15px; height:15px; }
    /* Reserve enough room below the text for BOTH stacked fixed buttons
       (WhatsApp sits on top of Comprar) so a longer description — like
       Especializados' — never renders underneath them. */
    .product-hero-copy{ padding:0 24px 132px; }
  }
  @media(max-width:480px){
    .whatsapp-fab{ padding:8px 14px; font-size:11px; }
    .hero-buy-btn{ padding:11px 20px; font-size:13px; }
    .product-hero-copy{ padding:0 20px 120px; }
  }

  /* ---------- HIGHLIGHTS CAROUSEL (Claude Pro page) ---------- */
  .highlights-section{ padding:24px 0 120px; background:var(--bg-deep); }
  /* The hero copy already ends with its own bottom padding, so the section starts close behind it. */
  @media(max-width:768px){ .highlights-section{ padding-top:4px; } }
  /* "Ver el video" button hidden everywhere until there are videos to link to
     (markup left in place — delete this rule to bring it back). */
  .watch-link{ display:none !important; }
  .highlights-title-row{
    display:flex; justify-content:space-between; align-items:baseline;
    margin-bottom:40px; gap:20px; flex-wrap:wrap;
  }
  /* Pill/capsule button — closed shape (not a plain text link), matching
     the "Plan Pro" badge treatment: solid lilac fill, white text+icon, and
     a lighter lilac on hover. */
  .watch-link{
    display:inline-flex; align-items:center; gap:8px;
    background:#A855F7; color:#ffffff;
    font-size:14px; font-weight:500; white-space:nowrap;
    padding:10px 20px; border-radius:9999px;
    transition: background .25s var(--ease);
  }
  .watch-link:hover{ background:#c084fc; }
  .watch-link svg{ width:20px; height:20px; color:#ffffff; }

  /* Coverflow / centered-scale carousel: the active card sits centered and full
     scale, immediate neighbors shrink and dim, the JS keeps --cf-w in sync so the
     side padding always leaves room for the first/last card to reach center. */
  .highlights-track{
    --cf-w: min(420px, 78vw);
    --hl-gut: 40px; /* page gutter the track bleeds into (see margin below); keeps the centering exact */
    display:flex; align-items:center; gap:20px; overflow-x:auto; scroll-snap-type:x mandatory;
    /* Generous vertical padding on purpose: transform:scale() is paint-only and
       doesn't grow the flex item's layout box, so without this the browser's
       auto overflow-y (triggered by overflow-x:auto) clips the enlarged center
       card and its glow. This gives it room instead of cropping it. */
    padding:90px calc(50% + var(--hl-gut) - (var(--cf-w) / 2));
    -ms-overflow-style:none; scrollbar-width:none;
    cursor:grab;
  }
  .highlights-track:active{ cursor:grabbing; }
  .highlights-track::-webkit-scrollbar{ display:none; }

  /* .highlight-card also carries the sitewide .reveal / .reveal.in scroll-fade
     class; the depth values below use !important so the JS-driven coverflow
     scale/opacity always wins over the generic reveal transform once mounted. */
  .highlight-card{
    flex:0 0 auto; scroll-snap-align:center;
    border-radius:24px; border:1px solid rgba(255,255,255,0.1);
    background:var(--surface);
    position:relative; overflow:hidden;
    cursor:pointer;
    display:flex; flex-direction:column; justify-content:space-between;
    padding:24px;
    transition: transform .5s cubic-bezier(.25,1,.5,1), opacity .5s ease, box-shadow .5s ease, border-color .5s ease !important;
  }
  .highlight-card[data-depth="2"]{ transform:scale(0.7) !important; opacity:0.25 !important; z-index:1; }
  .highlight-card[data-depth="1"]{ transform:scale(0.85) !important; opacity:0.5 !important; z-index:10; }
  .highlight-card[data-depth="0"]{
    transform:scale(1.18) !important; opacity:1 !important; z-index:20; cursor:default;
    border:2px solid rgba(var(--hl-rgb), 0.85);
    box-shadow: 0 20px 40px rgba(var(--hl-rgb), 0.28), 0 0 20px rgba(0,0,0,0.8);
  }
  /* Frame color of the centered carousel card, per product page (brand-based).
     Falls back to the original violet if a page doesn't set it. */
  .site-page{ --hl-rgb: 168,85,247; }
  #page-claude{    --hl-rgb: 217,119,87; }   /* Claude terracotta orange */
  #page-chatgpt{   --hl-rgb: 16,163,127; }   /* ChatGPT green */
  #page-gemini{    --hl-rgb: 66,133,244; }   /* Gemini blue */
  #page-creative{  --hl-rgb: 153,153,255; }  /* Adobe CC: multicolor ring below, violet glow */
  #page-streaming{ --hl-rgb: 229,9,20; }     /* streaming red */
  #page-vpn{       --hl-rgb: 0,200,255; }    /* VPN: ice cyan (shield / network) */
  #page-special{   --hl-rgb: 245,158,11; }   /* specialized software: amber / pro tools */
  /* Creative Cloud: multicolor frame — the gradient is painted on the
     border-box layer and shows through the transparent 2px border (works with
     the rounded corners and the card's overflow:hidden). */
  #page-creative .highlight-card[data-depth="0"]{
    border-color:transparent;
    background:
      linear-gradient(var(--surface), var(--surface)) padding-box,
      linear-gradient(135deg, #31A8FF, #9999FF 35%, #FF61F6 65%, #FF9A00) border-box;
  }
  .highlight-card.wide{
    width:var(--cf-w); min-height:360px;
    padding:28px; display:flex; flex-direction:column; justify-content:space-between;
  }
  .highlight-card.stat{
    width:var(--cf-w); min-height:360px;
    display:flex; align-items:center; justify-content:center;
  }
  /* Used by the simplified stat cards (just a duration/price badge row, no
     label/note) so their content sits at the bottom, same height as the
     neighboring photo cards' badge rows, instead of dead-center. */
  .highlight-card.stat.stat-compact{ justify-content:flex-end; }
  .highlight-copy{
    font-family: var(--font-sf); font-size:15.5px; line-height:1.35;
  }
  @media(max-width:640px){
    .highlight-copy{ font-size:14px; line-height:1.35; }
  }
  .highlight-copy .muted{ color:var(--muted); font-weight:400; }

  .model-tiles{ display:flex; gap:8px; margin-top:18px; }
  .model-tile{
    flex:1; min-width:0; aspect-ratio:1; border-radius:12px;
    background:var(--tile-grad);
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px;
    border:1px solid rgba(255,255,255,0.1);
    box-shadow:0 14px 28px -18px rgba(0,0,0,0.6);
    overflow:hidden; padding:4px;
  }
  .model-mark{ width:16px; height:16px; opacity:0.92; flex-shrink:0; }
  .model-tile span{
    font-family: var(--font-sf); font-weight:600; font-size:9.5px;
    text-align:center; line-height:1.25; color:#fff;
  }

  .stat-bg{
    position:absolute; inset:0; border-radius:inherit;
    background: radial-gradient(120% 100% at 30% 15%, #16281f, #04120c 70%);
  }
  .stat-content{
    position:relative; z-index:2;
    display:flex; flex-direction:column; align-items:center; gap:20px;
    padding:30px; text-align:center;
  }
  .stat-label{ font-size:14px; color:var(--muted); }
  .stat-pill{
    position:relative;
    font-family: var(--font-sf); font-weight:700; font-size:26px;
    background:linear-gradient(160deg,#3fd6ae,#124f3f);
    color:#ffffff !important; padding:16px 34px; border-radius:100px;
    forced-color-adjust: none;
    -webkit-text-fill-color:#ffffff;
    text-shadow: 0 1px 3px rgba(0,0,0,0.6), 0 0 1px rgba(0,0,0,0.8);
    box-shadow:0 0 60px rgba(47,191,159,0.55), inset 0 1px 0 rgba(255,255,255,0.4), inset 0 0 0 1px rgba(255,255,255,0.18);
  }
  .stat-dot{
    position:absolute; top:-6px; right:-4px;
    width:12px; height:12px; border-radius:50%;
    background:#D9F542; box-shadow:0 0 14px 5px rgba(217,245,66,0.55);
  }
  .stat-note{ font-size:12.5px; color:var(--muted); max-width:220px; }

  .highlights-controls{
    display:flex; align-items:center; justify-content:center; gap:12px;
    margin-top:30px;
  }
  /* Coverflow arrows float at the lateral extremes of the section, vertically
     centered on the card row by JS (card-row height varies per subpage/content). */
  /* Solid blue buttons with a white arrow so they never blend into the photos behind them. */
  .ctrl-btn.hl-prev, .ctrl-btn.hl-next{
    position:absolute; top:50%; transform:translateY(-50%);
    z-index:30; color:#fff;
    background: linear-gradient(135deg, #3B82F6, #1D4ED8);
    border:1.5px solid rgba(255,255,255,0.55);
    box-shadow: 0 6px 18px rgba(29,78,216,0.45), 0 0 0 3px rgba(0,0,0,0.18);
  }
  .ctrl-btn.hl-prev:hover, .ctrl-btn.hl-next:hover{
    background: linear-gradient(135deg, #5A98FF, #2A5FEA); border-color:#fff;
  }
  .ctrl-btn.hl-prev:active, .ctrl-btn.hl-next:active{ transform:translateY(-50%) scale(0.92); }
  .ctrl-btn.hl-prev svg, .ctrl-btn.hl-next svg{ width:18px; height:18px; stroke-width:2.6; }
  .hl-prev{ left:8px; }
  .hl-next{ right:8px; }
  @media(max-width:640px){
    .hl-prev{ left:6px; }
    .hl-next{ right:6px; }
  }
  /* The track runs edge to edge of the screen (cancels the page gutter) so the glow of the
     centered card fades out naturally instead of being cut by the gutter's invisible edge. */
  .highlights-track{ margin-left:calc(-1 * var(--hl-gut)); margin-right:calc(-1 * var(--hl-gut)); }
  @media(max-width:767px){
    .highlights-track{ --hl-gut:16px; }
  }
  @media(max-width:640px){
    .highlight-card.wide, .highlight-card.stat{ min-height:280px; padding:26px; }
    .model-tile span{ font-size:11px; }
  }
  @keyframes cardFadeInSmooth{
    from{ opacity:0.4; transform:translateY(10px); }
    to{ opacity:1; transform:translateY(0); }
  }

  /* ---------- BUY MODAL ---------- */
  .modal-overlay{
    position:fixed; inset:0; z-index:1000;
    background:
      radial-gradient(120% 90% at 50% 0%, rgba(91,124,255,0.16), rgba(3,3,5,0.86) 62%);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    display:flex; align-items:center; justify-content:center;
    padding:24px;
    opacity:0; pointer-events:none;
    transition: opacity .3s var(--ease);
  }
  .modal-overlay.open{ opacity:1; pointer-events:auto; }

  .modal-card{
    width:min(400px, 100%);
    max-height:86vh; overflow-y:auto;
    background:var(--surface);
    color:var(--text);
    border:1px solid var(--line-strong);
    border-radius:var(--radius-md);
    padding:34px;
    position:relative;
    transform: scale(0.94) translateY(10px);
    transform-origin: center;
    opacity:0;
    transition: transform .32s var(--ease), opacity .28s var(--ease);
    box-shadow: 0 60px 140px -30px rgba(0,0,0,0.75), inset 0 1px 0 rgba(255,255,255,0.04);
  }
  .modal-overlay.open .modal-card{ transform:scale(1) translateY(0); opacity:1; }

  .modal-close{
    position:absolute; top:18px; right:18px;
    width:34px; height:34px; border-radius:50%;
    background:rgba(255,255,255,0.05); border:1px solid var(--line); color:var(--text);
    display:flex; align-items:center; justify-content:center;
    transition: background .2s var(--ease), border-color .2s var(--ease), transform .2s var(--ease);
  }
  .modal-close:hover{ background:rgba(255,255,255,0.09); border-color:var(--line-strong); transform:rotate(90deg); }
  .modal-close svg{ width:16px; height:16px; }

  .modal-eyebrow{
    font-size:12px; font-weight:600; color:var(--accent);
    letter-spacing:0.04em; text-transform:uppercase;
  }
  .modal-card h3{
    font-family: var(--font-sf); font-size:22px; font-weight:700;
    margin:8px 0 6px; letter-spacing:-0.01em; color:var(--text);
  }
  .modal-card > p{ font-size:13px; color:var(--muted); line-height:1.5; margin-bottom:20px; }

  .modal-form{ display:flex; flex-direction:column; gap:13px; }
  .modal-form label{
    font-size:11.5px; font-weight:600; color:var(--muted);
    display:flex; flex-direction:column; gap:6px;
  }
  .modal-form input, .modal-form select{
    font-family: var(--font-sf); font-size:14px; padding:12px 13px;
    border-radius:var(--radius-sm); border:1px solid var(--line-strong);
    background:var(--surface-2); color:var(--text);
    transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
  }
  .modal-form input::placeholder{ color:var(--muted); opacity:0.7; }
  .modal-form select option{ background:var(--surface-2); color:var(--text); }
  .modal-form input:focus, .modal-form select:focus{
    outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);
  }
  .phone-row{ display:flex; gap:8px; }
  .phone-row select{ flex:0 0 84px; min-width:0; }
  .phone-row input{ flex:1 1 auto; min-width:0; }

  @media(max-width:480px){
    .modal-card{ padding:28px 22px; border-radius:18px; }
    .modal-card h3{ font-size:22px; }
    .phone-row select{ flex-basis:74px; padding-left:10px; padding-right:6px; }
  }

  .modal-submit{
    margin-top:6px; width:100%;
    background: linear-gradient(160deg, var(--accent), var(--accent-rich));
    color:#fff; font-weight:600; font-size:14px;
    padding:14px; border-radius:var(--radius-full);
    box-shadow: 0 14px 30px -10px rgba(62,90,224,0.55), inset 0 1px 0 rgba(255,255,255,0.16);
    transition: transform .16s var(--ease), box-shadow .2s var(--ease);
  }
  .modal-submit:hover{ transform:translateY(-1px); box-shadow: 0 18px 36px -10px rgba(62,90,224,0.65), inset 0 1px 0 rgba(255,255,255,0.16); }
  .modal-submit:active{ transform:scale(0.97); }

  .modal-success{ text-align:center; padding:20px 0 6px; display:none; }
  .modal-success.show{ display:block; }
  .success-icon{
    width:56px; height:56px; border-radius:50%; margin:0 auto 20px;
    background:rgba(61,220,122,0.14); color:#3ddc7a; border:1px solid rgba(61,220,122,0.3);
    display:flex; align-items:center; justify-content:center;
  }
  .success-icon svg{ width:26px; height:26px; }
  .modal-success h3{ margin-top:0; color:var(--text); }
  .modal-success p{ font-size:14px; color:var(--muted); line-height:1.55; }
  /* ---------- "Empezar ahora" ORDER + QR PAYMENT MODAL ---------- */
  .qr-card{ width:min(420px, 100%); }
  .qr-card [hidden]{ display:none !important; }
  #qrStepForm > p{ font-size:13px; color:var(--muted); line-height:1.5; margin-bottom:20px; font-weight:400; }
  .qr-amount{
    display:flex; align-items:baseline; justify-content:space-between; gap:12px;
    padding:12px 14px; border-radius:var(--radius-sm);
    background:var(--accent-soft); border:1px solid var(--line-strong);
    font-size:12.5px; color:var(--muted); font-weight:600;
  }
  .qr-amount strong{ font-family:var(--font-sf); font-size:22px; color:var(--text); letter-spacing:-0.01em; }
  .qr-error{ color:#ff6b6b; font-size:13px; margin:-2px 0 0; }
  .qr-pay-btn{ display:flex; align-items:center; justify-content:center; gap:9px; }
  .qr-pay-btn svg{ width:18px; height:18px; flex-shrink:0; }
  .qr-summary{
    margin:10px 0 16px; padding:12px 14px; border-radius:var(--radius-sm);
    background:var(--surface-2); border:1px solid var(--line-strong);
    font-size:13px; line-height:1.7; color:var(--muted);
  }
  .qr-summary b{ color:var(--text); font-weight:600; }
  .qr-summary .qr-total{ display:block; margin-top:4px; font-size:16px; color:var(--text); }
  .qr-image{
    display:block; width:min(240px, 100%); height:auto; margin:0 auto 10px;
    border-radius:18px; box-shadow:0 14px 34px -12px rgba(0,0,0,0.5);
  }
  .qr-download{
    display:block; text-align:center; font-size:12px; color:var(--accent);
    font-weight:600; margin-bottom:14px; text-decoration:underline; text-underline-offset:3px;
  }
  .qr-steps{ margin:18px 0 0; padding-left:20px; font-size:13px; color:var(--muted); line-height:1.6; }
  .qr-steps li{ margin-bottom:4px; }
  .qr-steps b{ color:var(--text); font-weight:600; }
  .qr-wa-btn{
    display:flex; align-items:center; justify-content:center; gap:9px;
    background:#1fbf5c; color:#fff; font-weight:600; font-size:14px;
    padding:14px; border-radius:var(--radius-full);
    box-shadow:0 14px 30px -10px rgba(31,191,92,0.55), inset 0 1px 0 rgba(255,255,255,0.16);
    transition: transform .16s var(--ease), box-shadow .2s var(--ease);
  }
  .qr-wa-btn:hover{ transform:translateY(-1px); }
  .qr-wa-btn svg{ width:18px; height:18px; flex-shrink:0; }
  .qr-back{
    display:block; margin:14px auto 0; font-size:12.5px; color:var(--muted);
    font-weight:600; background:none; border:0; cursor:pointer;
  }
  .qr-back:hover{ color:var(--text); }
  /* ---------- FOCUS PICKER: custom dropdown for the order form's selects ----------
     Same idea as the Apple-style "focus list": the option under the lens is
     crisp, blue and glowing; the rest turn gray and blur/shrink with distance.
     The native <select> stays in the DOM (hidden) so values/validation keep working. */
  :root{ --fp-blue:#5B9BFF; --fp-glow:63,125,255; }
  :root[data-theme="light"]{ --fp-blue:#2563EB; }
  .fp-native{ position:absolute; width:1px; height:1px; opacity:0; pointer-events:none; }
  .fp-trigger{
    display:flex; align-items:center; justify-content:space-between; gap:10px;
    width:100%; text-align:left; cursor:pointer;
    font-family:var(--font-sf); font-size:14px; font-weight:400; padding:12px 13px;
    border-radius:var(--radius-sm); border:1px solid var(--line-strong);
    background:var(--surface-2); color:var(--text);
    transition: border-color .2s var(--ease), box-shadow .2s var(--ease);
  }
  .fp-trigger:focus-visible, .fp-trigger[aria-expanded="true"]{
    outline:none; border-color:var(--fp-blue); box-shadow:0 0 0 3px rgba(var(--fp-glow),0.22);
  }
  .fp-trigger.is-placeholder .fp-value{ color:var(--muted); }
  .fp-chev{ width:16px; height:16px; flex-shrink:0; fill:none; stroke:currentColor; stroke-width:2; transition: transform .25s ease; }
  .fp-trigger[aria-expanded="true"] .fp-chev{ transform:rotate(180deg); }

  .fp-panel{
    position:fixed; z-index:1200; border-radius:18px; overflow:hidden;
    background:var(--surface); border:1px solid var(--line-strong);
    box-shadow:0 30px 70px -20px rgba(0,0,0,0.6);
    opacity:0; visibility:hidden; pointer-events:none;
    transform:translateY(-6px) scale(0.97); transform-origin:top center;
    transition: opacity .2s ease, transform .22s cubic-bezier(.2,.8,.2,1), visibility 0s linear .22s;
  }
  .fp-panel.open{
    opacity:1; visibility:visible; pointer-events:auto; transform:none;
    transition: opacity .2s ease, transform .22s cubic-bezier(.2,.8,.2,1), visibility 0s;
  }
  .fp-lens{
    position:absolute; left:8px; right:8px; top:50%; height:46px; transform:translateY(-50%);
    border-radius:13px; pointer-events:none; z-index:0;
    background:rgba(var(--fp-glow),0.14); border:1px solid rgba(91,155,255,0.5);
    box-shadow:0 0 30px rgba(var(--fp-glow),0.45), inset 0 0 18px rgba(var(--fp-glow),0.18);
  }
  .fp-list{
    position:relative; z-index:1; height:100%; box-sizing:border-box; overflow-y:auto;
    scroll-snap-type:y mandatory; overscroll-behavior:contain; scrollbar-width:none;
    -webkit-mask-image:linear-gradient(transparent 0, #000 18%, #000 82%, transparent 100%);
    mask-image:linear-gradient(transparent 0, #000 18%, #000 82%, transparent 100%);
  }
  .fp-list::-webkit-scrollbar{ display:none; }
  .fp-row{
    height:46px; display:flex; align-items:center; padding:0 22px;
    font-family:var(--font-sf); font-size:16px; font-weight:600; white-space:nowrap;
    color:var(--muted); cursor:pointer; scroll-snap-align:center;
    transform-origin:left center; will-change:transform, filter, opacity;
    transition: color .15s ease;
  }
  .fp-row.is-focus{ color:var(--fp-blue); font-weight:700; text-shadow:0 0 18px rgba(var(--fp-glow),0.55); }
  .fp-row.fp-head{
    height:34px; font-size:11px; letter-spacing:0.08em; text-transform:uppercase;
    font-weight:700; cursor:default; pointer-events:none; scroll-snap-align:none;
  }
  @media(max-width:480px){ .fp-row{ font-size:15px; } }


  @keyframes bounceIn{
    0%{ opacity:0; transform:scale(0.3) translateY(-50px); }
    50%{ opacity:1; transform:scale(1.05) translateY(10px); }
    70%{ transform:scale(0.98) translateY(-5px); }
    100%{ transform:scale(1) translateY(0); }
  }
  .discount-modal-overlay{
    position:fixed; inset:0; z-index:9999;
    background: rgba(3,3,5,0.75);
    backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
    display:flex; align-items:center; justify-content:center;
    padding:24px;
    opacity:0; pointer-events:none;
    transition: opacity .3s var(--ease);
  }
  .discount-modal-overlay.active{ opacity:1; pointer-events:auto; }
  .discount-modal-card{
    width:min(420px, 100%);
    max-height:86vh; overflow-y:auto;
    position:relative;
    background: rgba(10,10,15,0.85);
    backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
    border-radius:24px;
    border:1px solid rgba(56,189,248,0.4);
    padding:36px;
    box-shadow: 0 30px 80px -20px rgba(0,0,0,0.7), 0 0 60px -20px rgba(56,189,248,0.35);
    opacity:0; transform:scale(0.3) translateY(-50px);
  }
  /* Belt-and-suspenders visibility: forces the card to render once .active is
     present regardless of anything else in the cascade touching opacity/display. */
  .discount-modal-overlay.active .discount-modal-card{
    animation: bounceIn 0.5s cubic-bezier(0.68,-0.55,0.27,1.55) forwards;
    position:relative; z-index:10000;
    opacity:1 !important;
    visibility:visible !important;
    display:block !important;
  }
  .discount-modal-close{
    position:absolute; top:16px; right:16px; z-index:10001;
    width:34px; height:34px; border-radius:50%;
    background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.12); color:var(--text);
    display:flex; align-items:center; justify-content:center;
    font-size:1.5rem; line-height:1;
    cursor:pointer;
    transition: background .2s var(--ease), transform .2s var(--ease);
  }
  .discount-modal-close:hover{ background:rgba(255,255,255,0.12); transform:rotate(90deg); }
  .discount-modal-close svg{ width:16px; height:16px; }

  .discount-badge{
    display:inline-flex; align-items:center; gap:6px;
    font-size:12px; font-weight:700; letter-spacing:0.02em;
    color:#fff;
    padding:7px 16px; border-radius:9999px;
    background: linear-gradient(135deg, #2563eb, #38bdf8);
    box-shadow: 0 0 24px rgba(56,189,248,0.6);
    margin-bottom:18px;
  }
  .discount-title{
    font-family: var(--font-sf); font-weight:700;
    font-size:26px; line-height:1.2; letter-spacing:-0.01em;
    color:var(--text); margin-bottom:10px;
  }
  .discount-title .accent{
    background: linear-gradient(135deg, #38bdf8, #2563eb);
    -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
  }
  .discount-sub{ font-size:13.5px; color:var(--muted); line-height:1.55; margin-bottom:24px; }

  .discount-form{ display:flex; flex-direction:column; gap:13px; }
  .discount-form label{
    font-size:11.5px; font-weight:600; color:var(--muted);
    display:flex; flex-direction:column; gap:6px;
  }
  .discount-form input{
    font-family: var(--font-sf); font-size:14px; padding:12px 14px;
    border-radius:12px; border:1px solid rgba(255,255,255,0.14);
    background:rgba(255,255,255,0.04); color:var(--text);
    transition: border-color .2s var(--ease), box-shadow .2s var(--ease), background .2s var(--ease);
  }
  .discount-form input::placeholder{ color:var(--muted); opacity:0.7; }
  .discount-form input:focus{
    outline:none; border-color:#38bdf8; background:rgba(56,189,248,0.08);
    box-shadow:0 0 0 3px rgba(56,189,248,0.22);
  }
  .discount-submit{
    margin-top:6px; width:100%;
    background: linear-gradient(135deg, #2563eb, #38bdf8);
    color:#fff; font-weight:700; font-size:14px;
    padding:14px; border-radius:9999px;
    box-shadow: 0 14px 30px -10px rgba(56,189,248,0.6), inset 0 1px 0 rgba(255,255,255,0.2);
    transition: transform .16s var(--ease), box-shadow .2s var(--ease);
  }
  .discount-submit:hover{ transform:translateY(-1px); box-shadow:0 18px 36px -10px rgba(56,189,248,0.7), inset 0 1px 0 rgba(255,255,255,0.2); }
  .discount-submit:active{ transform:scale(0.97); }

  /* Light mode: the card itself (and its close button/inputs, which assumed a
     dark glass card) flip to a light glass panel. .discount-title/-sub/-form
     label/input text already use var(--text)/var(--muted), so they read fine
     the moment the card behind them stops being dark — no change needed there.
     The dim backdrop behind the card stays dark in both themes, same as any
     modal scrim. */
  :root[data-theme="light"] .discount-modal-card{
    background: rgba(255,255,255,0.92);
    border-color: rgba(62,90,224,0.35);
  }
  :root[data-theme="light"] .discount-modal-close{
    background:rgba(20,21,26,0.05); border-color:rgba(20,21,26,0.12);
  }
  :root[data-theme="light"] .discount-modal-close:hover{ background:rgba(20,21,26,0.1); }
  :root[data-theme="light"] .discount-form input{
    border-color:rgba(20,21,26,0.14);
    background:rgba(20,21,26,0.03);
  }

  .discount-success{ text-align:center; padding:20px 0 6px; display:none; }
  .discount-success.show{ display:block; }
  .discount-success h3{ margin-top:0; color:var(--text); }
  .discount-success p{ font-size:14px; color:var(--muted); line-height:1.55; }

  /* ---------- PHOTO-STYLE HIGHLIGHT CARDS (illustrated placeholders) ---------- */
  .highlight-card.photo{ position:relative; display:block; }
  .highlight-card.wide-photo{ width:var(--cf-w); min-height:380px; }
  .highlight-card.sq-photo{ width:var(--cf-w); min-height:380px; }
  .photo-bg{ position:absolute; inset:0; border-radius:inherit; }
  .photo-bg-chat{
    background: url('../img/ChatGPT conversaciones card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-image{
    background: url('../img/ChatGPT imagenes card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-voice{
    background: url('../img/ChatGPT voz card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-instant{
    background: url('../img/ChatGPT instantaneo card.webp');
    background-size: cover;
    background-position: center;
  }
  /* Its own small dark backing (not a tint over the whole photo) so it reads
     regardless of how bright/colorful the image behind it is. */
  .photo-badge{
    position:absolute; top:20px; left:20px; z-index:3;
    font-size:10.5px; color:#ffffff !important;
    background:rgba(0,0,0,0.45);
    border:1px solid rgba(255,255,255,0.22); padding:4px 10px; border-radius:100px;
    letter-spacing:0.01em;
    forced-color-adjust:none; -webkit-text-fill-color:#ffffff;
  }
  .photo-content{
    position:absolute; left:0; right:0; bottom:0; z-index:2;
    padding:28px; background:linear-gradient(180deg, transparent, rgba(0,0,0,0.55) 55%, rgba(0,0,0,0.85));
  }
  .photo-content h4{
    font-family: var(--font-sf); font-size:19px; color:#ffffff !important; margin-bottom:6px;
    forced-color-adjust:none; -webkit-text-fill-color:#ffffff;
    text-shadow: 0 1px 3px rgba(0,0,0,0.6);
  }
  .photo-content p{
    font-size:13px; color:#ffffff !important; line-height:1.5; max-width:340px;
    forced-color-adjust:none; -webkit-text-fill-color:#ffffff;
    text-shadow: 0 1px 2px rgba(0,0,0,0.6);
  }

  /* Pricing badge group for carousel cards — same visual language as the
     Hero's plan-row: a solid blue pill for the billing period, plus
     bordered/translucent badges for each currency, sitting above the
     card's own title/description. */
  .hl-badge-row{
    display:flex; gap:8px; align-items:center; flex-wrap:wrap;
    margin-bottom:12px;
  }
  .hl-pill{
    display:inline-flex; align-items:center;
    background:#0072ff; color:#ffffff !important;
    font-weight:600; font-size:12.5px; white-space:nowrap;
    padding:6px 16px; border-radius:50px;
    forced-color-adjust:none;
    -webkit-text-fill-color:#ffffff;
    text-shadow: 0 1px 2px rgba(0,0,0,0.5);
  }
  .hl-price-badge{
    display:inline-flex; align-items:center; gap:4px;
    background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.22);
    color:#ffffff !important; font-weight:600; font-size:12.5px; white-space:nowrap;
    padding:6px 14px; border-radius:50px;
    forced-color-adjust:none;
    -webkit-text-fill-color:#ffffff;
    text-shadow: 0 1px 2px rgba(0,0,0,0.6);
  }
  .hl-currency{ color:#8AA6FF !important; font-weight:700; -webkit-text-fill-color:#8AA6FF; forced-color-adjust:none; }
  .hl-currency.usd{ color:#3ddc7a !important; -webkit-text-fill-color:#3ddc7a; }
  .hl-whatsapp-badge{
    display:inline-flex; align-items:center; gap:6px;
    background:rgba(31,191,92,0.14); border:1px solid rgba(31,191,92,0.45);
    color:#3ddc7a; font-weight:600; font-size:12.5px; white-space:nowrap;
    padding:6px 14px; border-radius:50px;
    transition: background .2s var(--ease), border-color .2s var(--ease);
  }
  .hl-whatsapp-badge:hover{ background:rgba(31,191,92,0.26); border-color:#3ddc7a; }
  @media(max-width:640px){
    .highlight-card.wide-photo, .highlight-card.sq-photo{ min-height:280px; }
  }
  .photo-bg-context{
    background: url('../img/Gemini contexto masivo foto.webp');
    background-size: cover;
    background-position: center 60%;
  }
  .photo-bg-multimodal{
    background: url('../img/Gemini multimodal foto.webp');
    background-size: cover;
    background-position: center 60%;
  }
  .photo-bg-extended-context{
    background: url('../img/Gemini contexto extendido foto.webp');
    background-size: cover;
    background-position: center 55%;
  }
  .photo-bg-workspace{
    background: url('../img/Gemini workspace foto.webp');
    background-size: cover;
    background-position: center 55%;
  }
  .photo-bg-claude-docs{
    background: url('../img/Claude documentos card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-claude-privacy{
    background: url('../img/Claude privacidad card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-claude-family{
    background: url('../img/Claude familia card.webp');
    background-size: cover;
    background-position: center 55%;
  }
  .photo-bg-claude-speed{
    background: url('../img/Claude velocidad card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-design{
    background: url('../img/CC todas las apps foto.webp');
    background-size: cover;
    background-position: center 65%;
  }
  .photo-bg-video{
    background: url('../img/CC video motion foto.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-assets{
    background: url('../img/CC biblioteca foto.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-netflix{
    background:
      url('../img/Netflix card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-prime{
    background:
      url('../img/Prime Video card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-hbo{
    background:
      url('../img/HBO Max card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-disney{
    background:
      url('../img/Disney Plus card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-proton{
    background: url('../img/VPN Proton foto.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-mullvad{
    background: url('../img/VPN Mullvad foto.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-ivpn{
    background: url('../img/VPN IVPN foto.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-custom-vpn{
    background: url('../img/VPN personalizada foto.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-sw-data{
    background: url('../img/Software datos card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-sw-calc{
    background: url('../img/Software calculo card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-sw-anon{
    background: url('../img/Software anonimato card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-sw-usb{
    background: url('../img/Software usb card.webp');
    background-size: cover;
    background-position: center;
  }
  .photo-bg-sw-custom{
    background: url('../img/Software a medida card.webp');
    background-size: cover;
    background-position: center;
  }
  .contact-badge{
    position:absolute; top:18px; right:18px; z-index:4;
    display:flex; align-items:center; gap:6px;
    font-family: var(--font-sf); font-weight:700; font-size:12px;
    color:#fff; padding:6px 13px 6px 10px; border-radius:100px;
    background:linear-gradient(135deg,#3fd97a,#1fbf5c);
    box-shadow:0 6px 18px rgba(0,0,0,0.35), inset 0 0 0 1px rgba(255,255,255,0.25);
  }
  .contact-badge svg{ width:12px; height:12px; }
  .platform-icon{
    width:38px; height:38px; margin-bottom:14px;
    border-radius:50%; display:flex; align-items:center; justify-content:center;
    background:rgba(255,255,255,0.1); border:1px solid rgba(255,255,255,0.18);
  }
  /* Inside a badge row (icon sitting beside the pill/price badges instead
     of stacked above the title) the row's own margin handles the spacing,
     so the icon doesn't need its own bottom margin pushing things apart. */
  .hl-badge-row .platform-icon{ margin-bottom:0; flex-shrink:0; }
  .platform-icon svg{ width:14px; height:14px; margin-left:2px; }

  .platform-price{
    position:absolute; top:18px; right:18px; z-index:4;
    font-family: var(--font-sf); font-weight:700; font-size:14px;
    color:#0a0a0d; padding:6px 13px; border-radius:100px;
    box-shadow:0 6px 18px rgba(0,0,0,0.35), inset 0 0 0 1px rgba(255,255,255,0.25);
  }
  .platform-price .period{ font-weight:500; font-size:10px; opacity:0.75; }
  .platform-price.pp-netflix{ background:linear-gradient(135deg,#ff5c6e,#e50914); }
  .platform-price.pp-prime{ background:linear-gradient(135deg,#5fd1ff,#00a8e1); }
  .platform-price.pp-hbo{ background:linear-gradient(135deg,#b18aff,#723ac9); color:#fff; }
  .platform-price.pp-disney{ background:linear-gradient(135deg,#6ea8ff,#113ccf); color:#fff; }
  .platform-price.pp-proton{ background:linear-gradient(135deg,#9b7dff,#6d4aff); color:#fff; }
  .platform-price.pp-mullvad{ background:linear-gradient(135deg,#ffe100,#e0c400); color:#151200; }
  .platform-price.pp-ivpn{ background:linear-gradient(135deg,#4fd6bc,#2dbeaa); color:#04231f; }
  .platform-price.pp-custom-vpn{ background:linear-gradient(135deg,#6fa2ff,#2b6bf2); color:#fff; }

  /* ---------- HIGHLIGHTS CAROUSEL (Claude Pro subpage) ---------- */
  .highlights{ background:#000; padding:80px 0 60px; }
  .highlights-top{
    display:flex; justify-content:space-between; align-items:flex-end;
    margin-bottom:36px; flex-wrap:wrap; gap:16px;
  }
  .highlights-top h2{
    font-family: var(--font-sf); font-weight:600;
    font-size:clamp(26px, 3.2vw, 38px); letter-spacing:-0.01em;
  }
  .hl-track{
    display:flex; gap:24px; overflow-x:auto; scroll-snap-type:x mandatory;
    padding-bottom:4px; scrollbar-width:none; -ms-overflow-style:none;
  }
  .hl-track::-webkit-scrollbar{ display:none; }
  .hl-card{
    scroll-snap-align:start; flex:0 0 min(82%, 860px);
    background:linear-gradient(160deg,#151515,#0a0a0a);
    border-radius:24px; border:1px solid rgba(255,255,255,0.07);
    padding:46px 50px; min-height:400px;
    display:flex; flex-direction:column;
  }
  .hl-card h3{
    font-family: var(--font-sf); font-weight:600;
    font-size:clamp(21px, 2.4vw, 28px); line-height:1.28;
    max-width:520px; color:var(--text);
  }
  .chip-row{
    display:flex; gap:26px; justify-content:center; align-items:center;
    flex-wrap:wrap; margin:auto 0;
  }
  .chip{
    width:148px; height:148px; border-radius:22px;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px;
    border:1px solid; background:#111;
    transition: transform .3s var(--ease);
  }
  .chip:hover{ transform:translateY(-4px); }
  .chip.opus{ background:radial-gradient(circle at 30% 22%, rgba(124,92,252,.28), transparent 62%), #111013; border-color:rgba(124,92,252,.45); }
  .chip.sonnet{ background:radial-gradient(circle at 30% 22%, rgba(91,141,239,.28), transparent 62%), #0f1013; border-color:rgba(91,141,239,.45); }
  .chip.haiku{ background:radial-gradient(circle at 30% 22%, rgba(47,191,159,.28), transparent 62%), #0e1211; border-color:rgba(47,191,159,.45); }
  .chip .chip-icon{ width:30px; height:30px; }
  .chip .name{ font-family: var(--font-sf); font-weight:600; font-size:13.5px; color:var(--text); }

  .hl-card.media{ padding:0; overflow:hidden; position:relative; }
  .hl-card.media img{ width:100%; height:100%; object-fit:cover; display:block; min-height:400px; }
  .hl-card.media .media-caption{
    position:absolute; left:0; right:0; bottom:0; padding:30px 34px;
    background:linear-gradient(to top, rgba(0,0,0,0.8), transparent);
  }
  .hl-card.media .media-caption h3{ margin:0; }

  .hl-controls{ display:flex; align-items:center; justify-content:center; gap:16px; margin-top:30px; }
  .hl-dots{ display:flex; gap:7px; }
  .hl-dot{ width:7px; height:7px; border-radius:50%; background:rgba(255,255,255,0.25); cursor:pointer; transition: width .3s var(--ease), background .3s var(--ease); }
  .hl-dot.active{ width:24px; border-radius:4px; background:#fff; }
  .hl-playtoggle{
    width:30px; height:30px; border-radius:50%; border:1px solid rgba(255,255,255,0.25);
    display:flex; align-items:center; justify-content:center; cursor:pointer; color:#fff;
    transition: border-color .25s var(--ease);
  }
  .hl-playtoggle:hover{ border-color:rgba(255,255,255,0.5); }
  .hl-playtoggle svg{ width:11px; height:11px; }

  @media(max-width:640px){
    .hl-card{ flex-basis:90%; padding:32px 26px; min-height:340px; }
    .chip{ width:110px; height:110px; border-radius:18px; }
  }
  section{ position:relative; padding:140px 0; }
  /* Small pill badge — product plan labels ("Plan Pro", "Combo Streaming", etc). */
  .eyebrow-label{
    display:inline-flex; align-items:center; justify-content:center;
    background:#0072ff; color:#ffffff;
    font-weight:600; font-size:0.95rem;
    padding:8px 24px; border-radius:9999px;
    margin-bottom:18px;
  }

  /* Section-divider pill (e.g. "Cómo comprar", "Dudas") — same treatment, larger
     capsule, used for the site's main section headers. */
  .section-eyebrow{
    display:inline-flex; align-items:center;
    background:#0072ff; color:#ffffff;
    font-weight:500; font-size:0.95rem;
    padding:8px 24px; border-radius:9999px;
    margin-bottom:18px;
  }

  /* Generic/reference price tag shown next to the plan eyebrow on product pages */
  .plan-row{
    display:flex; align-items:center; gap:14px; flex-wrap:wrap;
    margin-bottom:18px;
  }
  .plan-row .eyebrow-label{ margin-bottom:0; }
  .price-tag{
    font-family: var(--font-sf); font-weight:700; font-size:15px;
    padding:5px 14px; border-radius:100px;
    border:1px solid rgba(255,255,255,0.18);
    background:rgba(5,6,9,0.55);
    backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
    display:inline-flex; align-items:baseline; gap:3px;
    letter-spacing:0.01em;
  }
  .price-tag .amount{
    background-clip:text; -webkit-background-clip:text; -webkit-text-fill-color:transparent;
  }
  .price-tag .period{ font-size:11px; font-weight:500; color:var(--muted); -webkit-text-fill-color:var(--muted); }
  .price-tag.price-orange .amount{ background-image:linear-gradient(90deg,#ffcf9e,#ff8a3d,#ff5c1a); }
  .price-tag.price-green .amount{ background-image:linear-gradient(90deg,#b7f5df,#3fd6ae,#10a37f); }
  .price-tag.price-blue .amount{ background-image:linear-gradient(90deg,#bfe0ff,#6fb2ff,#2b6bf2); }
  .price-tag.price-rainbow .amount{ background-image:linear-gradient(90deg,#ff2d55,#ff8a1a,#ffd400,#3ddc7a,#2b8fef,#7c5cfc); }
  .price-tag.price-red .amount{ background-image:linear-gradient(135deg,#ff4d4d,#ff0055); }
  .price-tag.price-cyan .amount{ background-image:linear-gradient(135deg,#4facfe,#00f2fe); }

  h2.section-title{
    font-family: var(--font-sf);
    font-weight:700;
    color:var(--text);
    font-size:clamp(28px, 4vw, 52px);
    line-height:1.15;
    letter-spacing:-0.02em;
    max-width:640px;
  }
  @media(max-width:640px){
    h2.section-title{ font-size:clamp(24px, 6.5vw, 30px); line-height:1.2; }
  }

  .reveal{ opacity:0; transform:translateY(28px); transition:opacity .8s var(--ease), transform .8s var(--ease); }
  .reveal.in{ opacity:1; transform:translateY(0); }

  /* Services */
  /* Both sections used the sitewide 140px vertical padding, which stacked to
     280px of dead space between the Services card and "Por qué D&A". */
  .services{ padding-bottom:70px; }
  #nosotros{ padding-top:70px; padding-bottom:70px; }
  .services-head{ text-align:center; max-width:640px; margin:0 auto; }
  .services-head .section-eyebrow{ margin-bottom:18px; }
  /* "Paint" reveal: the real heading (data-text mirrors its own text content)
     stays solid var(--text) so it is what screen readers and SEO see; a
     duplicate copy on ::after sits exactly on top in a brand gradient and is
     wiped in left-to-right (js/script.js drives --paint over a fixed time
     once the heading comes into view) — it does not depend on how far the
     user keeps scrolling. */
  .paint-reveal{ position:relative; --paint:0%; }
  /* Per-heading gradients (default above is the Services blue→violet→teal). */
  .paint-reveal.pr-warm{ --paint-grad: linear-gradient(90deg, #FF8A1F, #FF3D77 50%, #8B5CF6); }
  .paint-reveal.pr-cyan{ --paint-grad: linear-gradient(90deg, #12C2E9, #2F7BFF); }
  .howbuy-head h2 .accent.paint-reveal{ color:inherit; display:inline-block; }
  /* Icons / capsules: js/script.js wraps each one, keeps the original (neutral
     here) underneath, and wipes a clipped colored clone of it on top. */
  .wipe-wrap{ position:relative; display:flex; flex-shrink:0; --paint:0%; }
  .wipe-top{ position:absolute; pointer-events:none; clip-path: inset(0 calc(100% - var(--paint)) 0 0); }
  .wipe-top:not(svg){ inset:0; margin:0; }
  svg.wipe-top{ left:0; top:0; }
  .hb-pill.wipe-base{ color:#fff; background:#9CA3B0; border-color:#9CA3B0; }
  .howbuy-icon.wipe-base, .hb-protect-icon.wipe-base{ background:rgba(127,127,127,0.14); }
  .howbuy-icon.wipe-base svg, .hb-protect-icon.wipe-base svg, svg.wipe-base{ color:var(--muted); }
  .paint-reveal::after{
    content: attr(data-text);
    position:absolute; inset:0;
    background-image: var(--paint-grad, linear-gradient(90deg, #3E5AE0, #7C5CFC 55%, #2FBF9F));
    background-clip:text; -webkit-background-clip:text; color:transparent;
    clip-path: inset(0 calc(100% - var(--paint)) 0 0);
    pointer-events:none;
  }
  /* White rounded card holding the service rows, floating on the section's
     own page background — same "card on a tinted page" pattern used by
     .howbuy-card and the loading screen, not a one-off. */
  .services-card{
    margin-top:70px;
    background:var(--surface);
    border:1px solid var(--line-strong);
    border-radius:var(--radius-md);
    padding:8px 40px;
    box-shadow:var(--shadow-card);
  }
  .services-card .service-row:first-of-type{ border-top:none; }
  .services-card .service-row:last-of-type{ border-bottom:none; }
  @media(max-width:640px){
    .services-card{ padding:4px 22px; }
  }
  .service-row{
    display:flex; justify-content:space-between; align-items:flex-start; gap:40px;
    padding:44px 0; border-bottom:1px solid var(--line);
    transition: padding-left .4s var(--ease-in-out);
  }
  .service-row:first-of-type{ border-top:1px solid var(--line); }
  .service-row:hover{ padding-left:14px; }
  .service-left{ display:flex; align-items:baseline; gap:28px; flex:1; }
  /* Fixed column width (not flex-sized to each title's own text) so every
     row's description starts at the same x — titles of different lengths
     ("Pagos" vs "Suscripciones") were otherwise pushing their descriptions
     to different starting points, row to row. */
  .service-name{
    font-family: var(--font-sf); font-size:clamp(24px,3vw,38px); font-weight:600;
    white-space:nowrap; flex:0 0 300px;
  }
  .service-desc{ color:var(--muted); font-size:14.5px; max-width:420px; line-height:1.6; }
  .service-arrow{
    width:44px; height:44px; border-radius:50%; border:1px solid var(--line-strong);
    display:flex; align-items:center; justify-content:center; flex-shrink:0;
    transition: border-color .3s var(--ease), transform .4s var(--ease-in-out), background .3s var(--ease);
  }
  .service-row:hover .service-arrow{ border-color:var(--accent); background:var(--accent-soft); transform:rotate(45deg); }
  .service-arrow svg{ width:16px; height:16px; }

  @media(max-width:700px){
    .service-row{ flex-wrap:wrap; gap:16px; padding:32px 0; }
    .service-row:hover{ padding-left:0; }
    .service-left{ flex-direction:column; align-items:flex-start; gap:10px; width:100%; }
    .service-name{ white-space:normal; font-size:clamp(22px,7vw,30px); flex:none; }
    .service-desc{ max-width:100%; font-size:14px; }
    .service-arrow{ width:38px; height:38px; }
  }

  /* Split - why us */
  .split{ display:grid; grid-template-columns:1fr 1fr; gap:80px; align-items:center; }
  @media(max-width:900px){ .split{ grid-template-columns:1fr; gap:48px; } }
  .stat-grid{ display:grid; grid-template-columns:1fr 1fr; gap:32px; margin-top:44px; }
  @media(max-width:640px){ .stat-grid{ grid-template-columns:1fr; gap:24px; text-align:center; justify-items:center; } }
  /* .stat is a flex column so <b> (the figure) still stacks above the caption
     <span> even though <b> itself is inline-flex for baseline number+symbol
     alignment — flex items are always block-ified regardless of their own
     outer display. .stat b .stat-num is scoped past .stat span's specificity
     (a bare .stat-num alone would lose to it and render at 13px, undersized). */
  .stat{ display:flex; flex-direction:column; }
  .stat b{
    font-family: var(--font-sf); font-weight:700; font-size:2.5rem; color:var(--text);
    display:inline-flex; align-items:baseline; gap:2px;
  }
  .stat b .stat-num{
    font-family:inherit; font-weight:inherit; font-size:2.5rem; color:inherit;
    font-variant-numeric:tabular-nums;
  }
  .stat span{ font-size:13px; color:var(--muted); }

  .panel-visual{
    aspect-ratio:1/1; border-radius:var(--radius-md); border:1px solid var(--line-strong);
    background:linear-gradient(160deg, var(--surface), var(--bg-deep));
    position:relative; overflow:hidden;
    display:flex; align-items:center; justify-content:center;
    box-shadow: var(--shadow-card);
  }
  .panel-visual .grid-lines{
    position:absolute; inset:0;
    background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
    background-size: 40px 40px;
    mask-image: radial-gradient(circle at center, black, transparent 75%);
  }
  .panel-visual .core{
    width:34%; height:34%; border-radius:50%;
    background: radial-gradient(circle at 35% 30%, var(--accent), var(--accent-rich) 70%);
    box-shadow: 0 0 70px 6px var(--accent-soft), inset 0 2px 4px rgba(255,255,255,0.2);
    position:relative;
  }

  /* Payment methods marquee */
  /* How to buy section */
  .howbuy{ padding:64px 0 64px; }

  .howbuy-head{ text-align:center; max-width:640px; margin:0 auto 56px; }
  .howbuy-head .section-eyebrow{ margin-bottom:18px; }
  .howbuy-head h2{
    font-family: var(--font-sf); font-weight:700; color:var(--text);
    font-size:clamp(30px,4.4vw,52px); line-height:1.1; letter-spacing:-0.02em;
    margin-bottom:16px;
  }
  .howbuy-head h2 .accent{ color:var(--accent); }
  .howbuy-head p{ color:var(--muted); font-size:15.5px; line-height:1.6; }
  .howbuy-grid{ display:grid; grid-template-columns:1.4fr 1fr; gap:22px; align-items:stretch; }
  @media(max-width:900px){ .howbuy-grid{ grid-template-columns:1fr; } }
  .howbuy-card{
    background:var(--surface); border:1px solid var(--line-strong); border-radius:var(--radius-md); padding:36px;
    box-shadow: var(--shadow-lift);
  }
  .howbuy-main-top{ display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; margin-bottom:22px; padding-bottom:22px; border-bottom:1px solid var(--line); }
  .howbuy-main-top .hb-title{ display:flex; align-items:center; gap:14px; }
  .howbuy-icon{ width:44px; height:44px; border-radius:12px; background:var(--accent-soft); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
  .howbuy-icon svg{ width:22px; height:22px; color:var(--accent); }
  .howbuy-main-top h4{ font-family: var(--font-sf); font-size:17px; font-weight:600; margin-bottom:2px; }
  .howbuy-main-top p{ font-size:13.5px; color:var(--muted); }
  .hb-pill{
    display:flex; align-items:center; gap:7px; font-size:12.5px; font-weight:600; color:#fff;
    background:#1FA855; border:1px solid #1FA855; padding:7px 14px; border-radius:100px;
  }
  .hb-pill svg{ width:14px; height:14px; flex-shrink:0; }
  .hb-checklist{ display:flex; flex-direction:column; gap:14px; margin-bottom:28px; }
  .hb-checklist li{ display:flex; align-items:flex-start; gap:10px; font-size:14.5px; color:var(--text); line-height:1.5; }
  .hb-checklist li svg{ width:16px; height:16px; color:#3ddc7a; flex-shrink:0; margin-top:2px; }
  .hb-checklist li b{ font-weight:600; }
  .howbuy-actions{ display:flex; gap:12px; flex-wrap:wrap; }
  .hb-btn-primary{
    background: linear-gradient(160deg, var(--accent), var(--accent-rich));
    color:#fff; font-weight:600; font-size:14px; padding:14px 26px; border-radius:var(--radius-full);
    box-shadow: 0 14px 30px -10px rgba(62,90,224,0.5), inset 0 1px 0 rgba(255,255,255,0.16);
    transition: transform .16s var(--ease), box-shadow .2s var(--ease);
  }
  .hb-btn-primary:hover{ transform:translateY(-1px); box-shadow: 0 18px 36px -10px rgba(62,90,224,0.6), inset 0 1px 0 rgba(255,255,255,0.16); }
  .hb-btn-primary:active{ transform:scale(0.97); }
  .hb-btn-whatsapp{
    display:inline-flex; align-items:center; gap:8px;
    background:#1fbf5c; color:#fff; font-weight:600; font-size:14px; padding:14px 26px; border-radius:var(--radius-full);
    box-shadow: 0 14px 30px -10px rgba(31,191,92,0.45), inset 0 1px 0 rgba(255,255,255,0.16);
    transition: transform .16s var(--ease), box-shadow .2s var(--ease);
  }
  .hb-btn-whatsapp:hover{ transform:translateY(-1px); box-shadow: 0 18px 36px -10px rgba(31,191,92,0.55), inset 0 1px 0 rgba(255,255,255,0.16); }
  .hb-btn-whatsapp:active{ transform:scale(0.97); }
  .hb-btn-whatsapp svg{ width:16px; height:16px; }
  .howbuy-side h4{ font-family: var(--font-sf); font-size:16px; font-weight:600; margin-bottom:22px; }
  .hb-protect-item{ display:flex; gap:14px; margin-bottom:22px; }
  .hb-protect-item:last-child{ margin-bottom:0; }
  .hb-protect-icon{
    width:34px; height:34px; border-radius:9px; background:var(--accent-soft);
    display:flex; align-items:center; justify-content:center; flex-shrink:0;
  }
  .hb-protect-icon svg{ width:16px; height:16px; color:var(--accent); }
  .hb-protect-item h5{ font-size:14px; font-weight:600; margin-bottom:4px; }
  .hb-protect-item p{ font-size:13px; color:var(--muted); line-height:1.55; }

  /* FAQ / Preguntas frecuentes */
  .faq-section{ padding:64px 0 120px; }
  .faq-head{ text-align:center; max-width:640px; margin:0 auto 48px; }
  .faq-head .section-eyebrow{ margin-bottom:18px; }
  .faq-head h2{
    font-family: var(--font-sf); font-weight:700; color:var(--text);
    font-size:clamp(28px,4vw,46px); line-height:1.1; letter-spacing:-0.02em;
  }
  .faq-list{ max-width:760px; margin:0 auto; display:flex; flex-direction:column; gap:12px; }
  .faq-item{
    border:1px solid var(--line-strong); border-radius:var(--radius-sm); background:var(--surface);
    overflow:hidden; transition: border-color .3s var(--ease), box-shadow .3s var(--ease);
  }
  .faq-item.open{ box-shadow: var(--shadow-lift); }
  .faq-item.open{ border-color:var(--accent); }
  .faq-q{
    width:100%; min-height:44px; display:flex; align-items:center; justify-content:space-between; gap:16px;
    padding:20px 24px; text-align:left; background:none; cursor:pointer;
    font-family: var(--font-sf); font-size:15.5px; font-weight:600; color:var(--text);
    transition: color .3s var(--ease), transform .16s var(--ease);
  }
  .faq-q:active{ transform:scale(0.98); }
  .faq-item.open .faq-q{ color:var(--accent); }
  .faq-chev{ width:18px; height:18px; flex-shrink:0; transition:transform .4s var(--ease); color:var(--muted); }
  .faq-item.open .faq-chev{ transform:rotate(180deg); color:var(--accent); }
  .faq-a-wrap{ max-height:0; overflow:hidden; transition: max-height .45s var(--ease); }
  .faq-a{ padding:0 24px 22px; font-size:14.5px; color:var(--muted); line-height:1.65; }
  .faq-foot{ text-align:center; margin-top:40px; color:var(--muted); font-size:17px; line-height:2.1; }
  /* Liquid-glass capsule around the WhatsApp link: translucent frosted fill,
     bright top edge highlight, soft shadow — same glass recipe as the Hero
     chip, tuned for light and dark pages. */
  .faq-foot a{
    display:inline-block; vertical-align:middle; margin:0 4px;
    padding:8px 20px; border-radius:100px;
    color:var(--accent); font-weight:700; line-height:1.3;
    background: linear-gradient(135deg, rgba(255,255,255,0.55), rgba(255,255,255,0.18));
    backdrop-filter: blur(16px) saturate(180%);
    -webkit-backdrop-filter: blur(16px) saturate(180%);
    border:1px solid rgba(255,255,255,0.65);
    box-shadow: 0 8px 24px rgba(20,21,26,0.12), inset 0 1px 0 rgba(255,255,255,0.85), inset 0 -1px 0 rgba(255,255,255,0.25);
    transition: transform .2s var(--ease), box-shadow .2s var(--ease);
  }
  :root:not([data-theme="light"]) .faq-foot a{
    background: linear-gradient(135deg, rgba(255,255,255,0.14), rgba(255,255,255,0.04));
    border-color: rgba(255,255,255,0.22);
    box-shadow: 0 8px 24px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.28), inset 0 -1px 0 rgba(255,255,255,0.06);
  }
  .faq-foot a:hover{ transform:translateY(-2px); box-shadow: 0 12px 28px rgba(20,21,26,0.18), inset 0 1px 0 rgba(255,255,255,0.9); }
  @media(max-width:640px){
    .faq-foot{ font-size:15.5px; }
    .faq-foot a{ padding:7px 16px; }
  }

  .payments-strip{
    padding:64px 0 28px;
    overflow:hidden;
  }
  /* .section-eyebrow is inline-flex, so it only centers if its parent's
     text-align does the work — .wrap itself has none by default. */
  .payments-strip .wrap{ text-align:center; }
  .payments-strip .section-eyebrow{ margin-bottom:8px; }
  /* Vertical padding gives each chip's drop shadow room inside the clipping
     box (overflow:hidden + mask would otherwise cut it off at the bottom). */
  .marquee{ position:relative; width:100%; overflow:hidden; padding:28px 0 52px;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  }
  .marquee-track{
    display:flex; align-items:center;
    width:max-content;
    animation: marqueeScroll 22s linear infinite;
    backface-visibility:hidden; -webkit-backface-visibility:hidden;
  }
  /* Marquee never pauses — runs continuously and organically */
  @keyframes marqueeScroll{
    from{ transform:translate3d(0,0,0); }
    to{ transform:translate3d(-50%,0,0); }
  }
  /* Phones / touch: an edge mask on a container whose child is animating makes iPhone Safari blank
     the whole strip after a moment, so the fade at the sides is two plain gradients instead. */
  @media (hover:none), (max-width:768px){
    .marquee{ -webkit-mask-image:none; mask-image:none; }
    .marquee::before, .marquee::after{
      content:""; position:absolute; top:0; bottom:0; width:12%; z-index:2; pointer-events:none;
    }
    .marquee::before{ left:0; background:linear-gradient(90deg, var(--bg), rgba(0,0,0,0)); }
    .marquee::after{ right:0; background:linear-gradient(270deg, var(--bg), rgba(0,0,0,0)); }
  }
  .pay-chip{
    display:flex; align-items:center; justify-content:center;
    height:68px; padding:0 30px; margin-right:32px; border-radius:var(--radius-sm);
    background:#fdfdfc;
    border:1px solid rgba(0,0,0,0.04);
    box-shadow:0 10px 22px -12px rgba(0,0,0,0.45), 0 2px 6px rgba(0,0,0,0.05);
    white-space:nowrap; flex-shrink:0;
  }
  .pay-chip img{ height:26px; width:auto; display:block; }
  .pay-chip img[alt="Yape"]{ height:38px; }
  .pay-chip span{ font-family: var(--font-sf); font-weight:600; font-size:14.5px; color:var(--text); }

  /* CTA band */
  .cta-band{
    text-align:center;
    padding:72px 0;   /* was the sitewide 140px: too much empty space above/below the heading */
  }
  .cta-band h2{
    font-family: var(--font-sf); font-weight:600;
    font-size:clamp(34px,6vw,72px); letter-spacing:-0.02em; line-height:1.05;
    max-width:820px; margin:0 auto 36px;
  }
  .magnetic-btn{
    display:inline-flex; align-items:center; gap:10px;
    padding:16px 34px; border-radius:var(--radius-full);
    background:var(--text); color:var(--bg);
    font-weight:600; font-size:14.5px;
    position:relative;
    box-shadow: var(--shadow-lift);
    transition: transform .16s var(--ease);
  }
  .magnetic-btn:active{ transform:scale(0.96); }
  .magnetic-wrap{ display:inline-block; }

  /* Footer */
  footer{ padding:60px 0 40px; background: linear-gradient(180deg, transparent, rgba(91,124,255,0.03)); }
  .footer-top{ display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:40px; padding-bottom:50px; border-bottom:1px solid var(--line); }
  .footer-cols{ display:flex; gap:70px; flex-wrap:wrap; }
  .footer-col h4{ font-size:12.5px; color:var(--muted); font-weight:500; margin-bottom:16px; }
  .footer-col a{ display:block; font-size:14px; margin-bottom:10px; color:var(--text); opacity:0.85; transition:opacity .25s; }
  .footer-col a:hover{ opacity:1; color:var(--accent); }
  .footer-col .footer-note{ display:block; font-size:13.5px; line-height:1.55; color:var(--muted); margin-top:4px; }
  .footer-bottom{ display:flex; justify-content:space-between; padding-top:26px; font-size:12.5px; color:var(--muted); flex-wrap:wrap; gap:12px; }
  @media(max-width:640px){
    .footer-top{ flex-direction:column; gap:32px; text-align:center; align-items:center; }
    .footer-cols{ flex-direction:column; gap:28px; width:100%; text-align:center; align-items:center; }
    .footer-bottom{ flex-direction:column; text-align:center; }
  }

  /* ---------- LOADING SCREEN ---------- */
  .load-overlay{
    position:fixed; inset:0; z-index:9999;
    background: radial-gradient(120% 90% at 50% 50%, var(--surface), var(--bg-deep));
    display:flex; align-items:center; justify-content:center; flex-direction:column; gap:22px;
    pointer-events:none;
    animation: loaderFadeOut .6s ease forwards;
    animation-delay: 2.3s;
  }
  @keyframes loaderFadeOut{ to{ opacity:0; visibility:hidden; } }

  .load-mark{
    width:96px; height:96px; border-radius:50%;
    box-shadow: 0 0 0 1px var(--line-strong), 0 10px 40px rgba(0,0,0,0.5), 0 0 30px var(--accent-soft);
    opacity:0;
    animation: loaderMarkIn .5s var(--ease) forwards;
    animation-delay:.15s;
  }
  @keyframes loaderMarkIn{
    from{ opacity:0; transform:scale(0.7); }
    to{ opacity:1; transform:scale(1); }
  }

  .load-word-wrap{ position:relative; width:380px; max-width:82vw; height:56px; }
  .load-word{
    position:absolute; inset:0;
    display:flex; align-items:center; justify-content:center;
    font-family: var(--font-sf); font-weight:700;
    font-size: clamp(26px, 6.4vw, 46px);
    letter-spacing:0.01em; white-space:nowrap;
  }
  .load-letter{
    display:inline-block;
    color: rgba(255,255,255,0.07);
    transform: translateY(7px) scale(0.8);
    animation: letterPop .32s var(--ease) forwards;
  }
  @keyframes letterPop{ to{ color:var(--lc); transform:translateY(0) scale(1); } }
  .load-letter:nth-child(1){ --lc:#9AB4FF; animation-delay:.50s; }
  .load-letter:nth-child(2){ --lc:#8AA6FF; animation-delay:.59s; }
  .load-letter:nth-child(3){ --lc:#7B98FF; animation-delay:.68s; }
  .load-letter:nth-child(4){ --lc:#6D8AFF; animation-delay:.77s; }
  .load-letter:nth-child(5){ --lc:#5B7CFF; animation-delay:.86s; }
  .load-letter:nth-child(6){ --lc:#5B7CFF; animation-delay:.95s; }
  .load-letter:nth-child(7){ --lc:#6E7CFB; animation-delay:1.04s; }
  .load-letter:nth-child(8){ --lc:#8580F5; animation-delay:1.13s; }
  .load-letter:nth-child(9){ --lc:#9A84EF; animation-delay:1.22s; }
  .load-letter:nth-child(10){ --lc:#AE88E8; animation-delay:1.31s; }
  .load-letter:nth-child(11){ --lc:#C08CE0; animation-delay:1.40s; }

  .snake-glow{
    position:absolute; top:50%; left:0; width:16px; height:16px; margin:-8px 0 0 -8px;
    border-radius:50%;
    background: radial-gradient(circle, rgba(255,255,255,0.95), rgba(255,255,255,0) 72%);
    filter: blur(3px);
    offset-path: path('M -14 6 L 22 -18 L 58 6 L 94 -18 L 130 6 L 166 -18 L 202 6 L 238 -18 L 274 6 L 310 -18 L 346 6 L 382 -18 L 400 0');
    offset-distance: 0%;
    offset-rotate: 0deg;
    animation: snakeMove 1.55s linear forwards;
    animation-delay:.5s;
    mix-blend-mode: screen;
  }
  @keyframes snakeMove{ to{ offset-distance: 100%; } }

  @media(max-width:640px){
    .load-mark{ width:72px; height:72px; }
  }

  /* ---------- Form privacy line (under the order / discount buttons) ---------- */
  .form-privacy{ font-size:11.5px; line-height:1.5; color:var(--muted); text-align:center; margin:2px 0 0; }
  .form-privacy a{ color:var(--accent); font-weight:600; text-decoration:underline; text-underline-offset:2px; }

  /* ---------- Legal pages (Aviso Legal / Privacidad / Cookies) ---------- */
  .legal-page{ min-height:100vh; display:flex; flex-direction:column; }
  .legal-top{
    width:min(860px, calc(100% - 32px)); margin:0 auto; padding:26px 0 10px;
    display:flex; align-items:center; justify-content:space-between; gap:16px;
  }
  .legal-brand{ display:flex; align-items:center; gap:10px; font-weight:700; font-size:15px; color:var(--text); }
  .legal-brand img{ border-radius:50%; display:block; }
  .legal-back{ font-size:13.5px; font-weight:600; color:var(--accent); }
  .legal-wrap{ flex:1; width:min(860px, calc(100% - 32px)); margin:0 auto; padding:14px 0 56px; }
  .legal-card{
    background:var(--surface); border:1px solid var(--line-strong); border-radius:var(--radius-md);
    padding:clamp(24px, 5vw, 52px); box-shadow:var(--shadow-card);
  }
  .legal-card h1{
    font-family:var(--font-sf); font-size:clamp(28px, 5vw, 40px); font-weight:800;
    letter-spacing:-0.02em; line-height:1.1; margin-bottom:8px; color:var(--text);
  }
  .legal-updated{ font-size:13px; color:var(--muted); margin-bottom:26px; }
  .legal-card h2{ font-family:var(--font-sf); font-size:19px; font-weight:700; letter-spacing:-0.01em; margin:30px 0 10px; color:var(--text); }
  .legal-card p, .legal-card li{ font-size:15px; line-height:1.7; color:var(--text); opacity:0.86; }
  .legal-card p{ margin-bottom:12px; }
  .legal-card ul{ list-style:disc; padding-left:22px; margin-bottom:12px; }
  .legal-card li{ margin-bottom:6px; }
  .legal-card strong{ font-weight:700; opacity:1; }
  .legal-card a{ color:var(--accent); font-weight:600; text-decoration:underline; text-underline-offset:3px; }
  .legal-card code{ font-size:13px; background:var(--accent-soft); padding:2px 7px; border-radius:6px; }
  .legal-table-wrap{ overflow-x:auto; margin:6px 0 14px; border:1px solid var(--line-strong); border-radius:12px; }
  .legal-table{ width:100%; border-collapse:collapse; font-size:13.5px; min-width:640px; }
  .legal-table th, .legal-table td{ text-align:left; padding:12px 14px; vertical-align:top; border-bottom:1px solid var(--line); color:var(--text); }
  .legal-table th{ font-size:12px; letter-spacing:0.04em; text-transform:uppercase; color:var(--muted); font-weight:700; background:var(--surface-2); }
  .legal-table tr:last-child td{ border-bottom:0; }
  .legal-foot{
    width:min(860px, calc(100% - 32px)); margin:0 auto; padding:0 0 38px;
    display:flex; flex-wrap:wrap; justify-content:center; gap:10px 22px; font-size:13px; color:var(--muted);
  }
  .legal-foot a{ color:var(--text); opacity:0.8; }
  .legal-foot a:hover{ opacity:1; color:var(--accent); }

  /* ---------- Responsive / touch fixes ---------- */
  /* Very narrow phones (<=380px): the nav's logo + two buttons no longer fit in
     the capsule, which pushed the hamburger past the screen edge. */
  @media(max-width:430px){
    nav{ gap:10px; padding:8px 8px 8px 14px; }
    .logo{ font-size:15px; gap:7px; }
    .logo-mark{ width:30px; height:30px; }
  }
  @media(max-width:340px){
    nav{ gap:6px; padding-left:12px; }
    .logo{ font-size:12.5px; gap:5px; }
    .logo-mark{ width:28px; height:28px; }
    .theme-toggle-btn{ width:40px; height:40px; }
  }
  /* Comfortable touch targets (>=44px) on phones/tablets. */
  @media(max-width:768px){
    .hs-controls .ctrl-btn{ width:44px; height:44px; }
    .hs-link, .hs-cta{ min-height:44px; display:inline-flex; align-items:center; justify-content:center; }
    .mobile-sublink{ padding-top:14px; padding-bottom:14px; }
    .whatsapp-fab{ min-height:44px; }
  }
  @media(max-width:680px){
    .theme-toggle-btn{ width:44px; height:44px; }
  }
  /* Lighter blur on the full-screen modal backdrops for phones (same look, cheaper to paint). */
  @media(max-width:768px){
    .modal-overlay, .discount-modal-overlay{ backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
  }

  /* On the home page the floating WhatsApp button sits low (the product pages stack it
     above their "Comprar" button) so it no longer covers the Hero carousel arrows on short phones. */
  @media(max-width:768px){
    .on-home .whatsapp-fab{ bottom:18px; }
  }
  /* Form controls: 44px tall and 16px text on phones (16px also stops iOS from zooming into the field). */
  @media(max-width:768px){
    .modal-form input, .modal-form select, .discount-form input, .fp-trigger{ min-height:44px; font-size:16px; }
    .modal-close, .discount-modal-close{ width:44px; height:44px; }
  }
  /* Footer links: larger tap area without changing their look. */
  @media(max-width:640px){
    .footer-col a{ padding:10px 0; margin-bottom:0; }
  }
  /* FAQ "Escríbenos por WhatsApp" capsule: 44px tall on phones. */
  @media(max-width:640px){
    .faq-foot a{ padding-top:12px; padding-bottom:12px; }
  }

  /* Streaming / pricing cards: the pill + price capsules sit on a darker glass and a taller shadow
     behind them, so they read on bright photos (a lit TV) and stay in ONE tidy row on phones. */
  .photo-content:has(.hl-badge-row){
    padding-top:56px;
    background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.62) 38%, rgba(0,0,0,0.9) 100%);
  }
  .hl-badge-row .hl-price-badge{ background:rgba(0,0,0,0.5); border-color:rgba(255,255,255,0.28); }
  .hl-badge-row .platform-icon{ background:rgba(0,0,0,0.5); border-color:rgba(255,255,255,0.28); }
  @media(max-width:640px){
    .photo-content{ padding:22px 20px 22px; }
    .photo-content:has(.hl-badge-row){ padding-top:46px; }
    .hl-badge-row{ gap:6px; margin-bottom:10px; flex-wrap:nowrap; }
    .hl-badge-row .platform-icon{ width:30px; height:30px; }
    .hl-badge-row .platform-icon svg{ width:11px; height:11px; margin-left:1px; }
    .hl-badge-row .hl-pill{ font-size:12px; padding:5px 12px; }
    .hl-badge-row .hl-price-badge{ font-size:12px; padding:5px 11px; gap:3px; }
  }
  @media(max-width:360px){
    .hl-badge-row .platform-icon{ display:none; }
  }

  /* Menu links that jump to a home section leave a little room under the floating nav. */
  #servicios, #nosotros, #como-comprar, #faq, #contacto{ scroll-margin-top:28px; }
