Files
reformix-hackaton/mvp/b2c/public/b2b.html
Carlos Narro d370a725e8 Sustituir landing B2B publicada por versión animada en /b2b
Reemplaza public/b2b.html (bundle estático viejo) por la versión con
reveals al scroll, hover-lift, count-up de stats e imágenes antes/después.
Assets servidos desde /b2b-assets para evitar colisiones. Sirve en el
dominio único reformix.dv3.com.es vía el rewrite /b2b existente.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 10:17:47 +02:00

2136 lines
86 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="es"><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Reformix — Para reformistas</title>
<link rel="icon" href="/b2b-assets/img/icon.svg" type="image/svg+xml">
<script>document.documentElement.classList.add('js');</script>
<style>/* Reformix — Design Tokens
* Generado a partir de design-system.md + design-tokens.json
* Stack: Tailwind + shadcn/ui (compatibilidad con CSS custom properties)
* Versión: 1.0 (2026-05-24)
*/
/* latin-ext */
@font-face {
font-family: 'Instrument Serif';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/60f0ecce-40bf-4952-a5d0-c64eb7d90838.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;
}
/* latin */
@font-face {
font-family: 'Instrument Serif';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/3564a927-e275-4816-b6c1-cc99fc1dcdab.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;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Serif';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/15d36112-e39a-4059-ae12-06c58a5747ac.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;
}
/* latin */
@font-face {
font-family: 'Instrument Serif';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/421ba28b-7abe-4b86-a87c-fcd3e94378f7.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;
}
/* cyrillic-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/c8bfb9ea-7aca-4f8d-8f7c-3e648ef6cb5b.woff2") format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/49e48789-614f-48bf-9256-df3caab8c123.woff2") format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/c4f99f5c-1856-4a0e-9de5-7834190c77b0.woff2") format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/40945437-5659-40b2-bfd8-fd664ad1615e.woff2") format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/158fbdf5-8d90-47a9-bc8e-5d21e3bafce8.woff2") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/00430955-27e4-4cea-b94e-787f11af509f.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;
}
/* latin */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/e9c2548b-cd31-41e0-bc94-aac65cc4b6eb.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;
}
/* cyrillic-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/c8bfb9ea-7aca-4f8d-8f7c-3e648ef6cb5b.woff2") format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/49e48789-614f-48bf-9256-df3caab8c123.woff2") format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/c4f99f5c-1856-4a0e-9de5-7834190c77b0.woff2") format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/40945437-5659-40b2-bfd8-fd664ad1615e.woff2") format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/158fbdf5-8d90-47a9-bc8e-5d21e3bafce8.woff2") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/00430955-27e4-4cea-b94e-787f11af509f.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;
}
/* latin */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/e9c2548b-cd31-41e0-bc94-aac65cc4b6eb.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;
}
/* cyrillic-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/c8bfb9ea-7aca-4f8d-8f7c-3e648ef6cb5b.woff2") format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/49e48789-614f-48bf-9256-df3caab8c123.woff2") format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/c4f99f5c-1856-4a0e-9de5-7834190c77b0.woff2") format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/40945437-5659-40b2-bfd8-fd664ad1615e.woff2") format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/158fbdf5-8d90-47a9-bc8e-5d21e3bafce8.woff2") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/00430955-27e4-4cea-b94e-787f11af509f.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;
}
/* latin */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/b2b-assets/fonts/e9c2548b-cd31-41e0-bc94-aac65cc4b6eb.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;
}
/* cyrillic-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/c8bfb9ea-7aca-4f8d-8f7c-3e648ef6cb5b.woff2") format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/49e48789-614f-48bf-9256-df3caab8c123.woff2") format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/c4f99f5c-1856-4a0e-9de5-7834190c77b0.woff2") format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/40945437-5659-40b2-bfd8-fd664ad1615e.woff2") format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/158fbdf5-8d90-47a9-bc8e-5d21e3bafce8.woff2") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/00430955-27e4-4cea-b94e-787f11af509f.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;
}
/* latin */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/b2b-assets/fonts/e9c2548b-cd31-41e0-bc94-aac65cc4b6eb.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;
}
/* cyrillic-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/a7d33cb8-a5f1-44bf-bf3c-564e7ea0619a.woff2") format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/ca40d6e0-4a50-4481-8e30-74c159ef9cee.woff2") format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/556fa156-4d6a-481e-a43b-d7ab5fb934a9.woff2") format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/4d99cd2e-393d-4b95-bcfa-8f2a24ac6f7b.woff2") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/af8b43b5-1741-407a-be2e-9881a5996d70.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;
}
/* latin */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/b2b-assets/fonts/12581ec4-115f-4ba1-8b57-50addc6b546c.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;
}
/* cyrillic-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/a7d33cb8-a5f1-44bf-bf3c-564e7ea0619a.woff2") format('woff2');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/ca40d6e0-4a50-4481-8e30-74c159ef9cee.woff2") format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/556fa156-4d6a-481e-a43b-d7ab5fb934a9.woff2") format('woff2');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/4d99cd2e-393d-4b95-bcfa-8f2a24ac6f7b.woff2") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/af8b43b5-1741-407a-be2e-9881a5996d70.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;
}
/* latin */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/b2b-assets/fonts/12581ec4-115f-4ba1-8b57-50addc6b546c.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 {
/* ============================================
* COLOR — Brand (Architectural Warmth)
* ============================================ */
/* Primary — Verde oliva */
--color-primary-50: #F4F8F5;
--color-primary-100: #E8F0EB;
--color-primary-300: #A8C8B5;
--color-primary-500: #4D8A6D;
--color-primary-700: #2F5C46;
--color-primary-900: #1F3A2E;
/* Accent — Terracota */
--color-accent-100: #FAEAE0;
--color-accent-400: #E08A5F;
--color-accent-600: #C25E33;
--color-accent-900: #7A3517;
/* ============================================
* COLOR — Neutral (Stone — warm grays con tinte oliva)
* ============================================ */
--color-white: #FFFFFF;
--color-neutral-50: #F7F8F7;
--color-neutral-100: #EDEFED;
--color-neutral-200: #DDE0DD;
--color-neutral-300: #C4C9C4;
--color-neutral-400: #9DA29D;
--color-neutral-500: #7A807A;
--color-neutral-700: #4A4E4A;
--color-neutral-900: #262826;
--color-neutral-950: #161816;
/* ============================================
* COLOR — Semantic
* ============================================ */
--color-success-100: #E0F0E6;
--color-success-500: #4DAA73;
--color-success-700: #2D7A4F;
--color-warning-100: #FAEFD3;
--color-warning-500: #DA9A2C;
--color-warning-700: #9A6B0E;
--color-danger-100: #FAE0DA;
--color-danger-500: #D85940;
--color-danger-700: #A8331F;
--color-info-100: #DDEDF5;
--color-info-500: #3D8AAA;
--color-info-700: #1F5C7A;
/* ============================================
* COLOR — Surface aliases (uso semántico en componentes)
* ============================================ */
--surface-background: var(--color-white);
--surface-background-muted: var(--color-neutral-50);
--surface-background-emphasis: var(--color-primary-50);
--surface-foreground: var(--color-neutral-950);
--surface-foreground-muted: var(--color-neutral-500);
--surface-border: var(--color-neutral-200);
--surface-border-strong: var(--color-neutral-300);
/* ============================================
* TYPOGRAPHY
* ============================================ */
--font-display: 'Instrument Serif', Georgia, serif;
--font-sans: 'Inter', system-ui, -apple-system, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
--font-weight-regular: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
--text-xs: 0.75rem;
--text-sm: 0.875rem;
--text-base: 1rem;
--text-lg: 1.125rem;
--text-xl: 1.25rem;
--text-2xl: 1.5rem;
--text-3xl: 1.875rem;
--text-4xl: 2.25rem;
--text-5xl: 3rem;
--text-6xl: 3.75rem;
--text-7xl: 4.5rem;
--leading-tight: 1.1;
--leading-snug: 1.3;
--leading-normal: 1.5;
--leading-relaxed: 1.6;
/* ============================================
* SPACING (base 4px, coherente con Tailwind)
* ============================================ */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-12: 3rem;
--space-16: 4rem;
--space-24: 6rem;
--space-32: 8rem;
/* ============================================
* CONTAINER WIDTHS
* ============================================ */
--container-narrow: 720px;
--container-default: 1200px;
--container-wide: 1440px;
--gutter-mobile: 24px;
--gutter-desktop: 48px;
/* ============================================
* BORDER RADIUS
* ============================================ */
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 10px;
--radius-xl: 14px;
--radius-2xl: 20px;
--radius-full: 9999px;
/* ============================================
* SHADOWS (warm, base neutral-950 — no negro puro)
* ============================================ */
--shadow-xs: 0 1px 2px rgba(22, 24, 22, 0.05);
--shadow-sm: 0 1px 3px rgba(22, 24, 22, 0.08), 0 1px 2px rgba(22, 24, 22, 0.04);
--shadow-md: 0 4px 6px rgba(22, 24, 22, 0.07), 0 2px 4px rgba(22, 24, 22, 0.04);
--shadow-lg: 0 10px 15px rgba(22, 24, 22, 0.08), 0 4px 6px rgba(22, 24, 22, 0.05);
--shadow-xl: 0 20px 25px rgba(22, 24, 22, 0.1), 0 10px 10px rgba(22, 24, 22, 0.04);
--shadow-glow: 0 0 0 4px rgba(47, 92, 70, 0.15);
/* ============================================
* MOTION
* ============================================ */
--duration-fast: 150ms;
--duration-base: 250ms;
--duration-slow: 400ms;
--easing-out: cubic-bezier(0.16, 1, 0.3, 1);
--easing-in: cubic-bezier(0.7, 0, 0.84, 0);
--easing-in-out: cubic-bezier(0.65, 0, 0.35, 1);
/* ============================================
* Z-INDEX scale (orden visual)
* ============================================ */
--z-dropdown: 50;
--z-sticky: 100;
--z-overlay: 200;
--z-modal: 300;
--z-popover: 400;
--z-toast: 500;
}
/* ============================================
* Base styles
* ============================================ */
html {
font-family: var(--font-sans);
font-size: 16px;
color: var(--surface-foreground);
background: var(--surface-background);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
line-height: var(--leading-relaxed);
}
h1, h2 {
font-family: var(--font-display);
font-weight: var(--font-weight-regular);
line-height: var(--leading-tight);
color: var(--color-neutral-950);
}
h3, h4, h5, h6 {
font-family: var(--font-sans);
font-weight: var(--font-weight-semibold);
line-height: var(--leading-snug);
color: var(--color-neutral-900);
}
/* ============================================
* Reduced motion
* ============================================ */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
</style>
<style>
/* ============================================
* Reset / base
* ============================================ */
*, *::before, *::after { box-sizing: border-box; }
body {
margin: 0;
background: var(--surface-background);
color: var(--color-neutral-700);
font-size: var(--text-base);
}
a { color: inherit; text-decoration: none; }
img, svg { display: block; max-width: 100%; }
button { font-family: inherit; cursor: pointer; border: 0; background: none; }
/* Container */
.container {
width: 100%;
max-width: var(--container-default);
margin: 0 auto;
padding: 0 var(--gutter-mobile);
}
@media (min-width: 1024px) {
.container { padding: 0 var(--gutter-desktop); }
}
/* ============================================
* Buttons
* ============================================ */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
font-family: var(--font-sans);
font-weight: var(--font-weight-semibold);
border-radius: var(--radius-lg);
transition: background var(--duration-fast) var(--easing-out),
box-shadow var(--duration-fast) var(--easing-out),
transform var(--duration-fast) var(--easing-out);
white-space: nowrap;
}
.btn:focus-visible { outline: 0; box-shadow: var(--shadow-glow); }
.btn-md { height: 44px; padding: 0 var(--space-4); font-size: var(--text-base); }
.btn-lg { height: 52px; padding: 0 var(--space-6); font-size: var(--text-lg); }
.btn-sm { height: 32px; padding: 0 var(--space-3); font-size: var(--text-sm); }
.btn-primary { background: var(--color-primary-700); color: var(--color-white); }
.btn-primary:hover { background: var(--color-primary-900); }
.btn-primary:active { transform: scale(0.97); }
.btn-secondary {
background: var(--color-white);
color: var(--color-primary-700);
box-shadow: inset 0 0 0 1px var(--color-primary-700);
}
.btn-secondary:hover { background: var(--color-primary-50); }
.btn-ghost { color: var(--color-neutral-700); background: transparent; }
.btn-ghost:hover { background: var(--color-neutral-100); }
/* ============================================
* Topbar
* ============================================ */
.topbar {
position: sticky; top: 0; z-index: var(--z-sticky);
background: rgba(255,255,255,0.85);
backdrop-filter: saturate(180%) blur(8px);
-webkit-backdrop-filter: saturate(180%) blur(8px);
border-bottom: 1px solid var(--surface-border);
}
.topbar-inner {
display: flex; align-items: center; justify-content: space-between;
height: 68px; gap: var(--space-6);
}
.brand { display: flex; align-items: center; gap: var(--space-2); font-weight: var(--font-weight-semibold); color: var(--color-neutral-950); font-size: var(--text-lg); letter-spacing: -0.01em; }
.brand-mark {
width: 28px; height: 28px; border-radius: var(--radius-md);
background: var(--color-primary-700);
display: grid; place-items: center; color: var(--color-white);
font-family: var(--font-display); font-size: 18px; line-height: 1;
}
.nav { display: none; gap: var(--space-8); }
.nav a {
font-size: var(--text-sm); font-weight: var(--font-weight-medium);
color: var(--color-neutral-700);
transition: color var(--duration-fast) var(--easing-out);
}
.nav a:hover { color: var(--color-neutral-950); }
.topbar-actions { display: flex; align-items: center; gap: var(--space-2); }
@media (min-width: 1024px) { .nav { display: flex; } }
/* ============================================
* Hero
* ============================================ */
.hero { padding: var(--space-16) 0 var(--space-12); }
@media (min-width: 1024px) { .hero { padding: var(--space-24) 0 var(--space-16); } }
.eyebrow {
display: inline-flex; align-items: center; gap: var(--space-2);
font-family: var(--font-mono);
font-size: var(--text-xs); letter-spacing: 0.06em; text-transform: uppercase;
color: var(--color-primary-700);
background: var(--color-primary-50);
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-full);
border: 1px solid var(--color-primary-100);
}
.eyebrow .dot {
width: 6px; height: 6px; border-radius: 50%;
background: var(--color-primary-500);
box-shadow: 0 0 0 4px rgba(77, 138, 109, 0.18);
}
.hero-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--space-12);
align-items: center;
}
@media (min-width: 1024px) {
.hero-grid {
grid-template-columns: 1.05fr 1fr;
gap: var(--space-16);
}
}
h1.hero-title {
font-family: var(--font-display);
font-weight: var(--font-weight-regular);
font-size: clamp(2.5rem, 6vw, 4.5rem);
line-height: var(--leading-tight);
letter-spacing: -0.01em;
color: var(--color-neutral-950);
margin: var(--space-6) 0 var(--space-6);
}
.hero-title em {
font-style: italic;
color: var(--color-primary-700);
}
.hero-sub {
font-size: var(--text-xl);
line-height: var(--leading-relaxed);
color: var(--color-neutral-700);
max-width: 540px;
margin: 0 0 var(--space-8);
}
.hero-ctas { display: flex; gap: var(--space-3); flex-wrap: wrap; }
.hero-meta {
margin-top: var(--space-6);
display: flex; flex-wrap: wrap; gap: var(--space-6) var(--space-8);
color: var(--color-neutral-500);
font-size: var(--text-sm);
}
.hero-meta .check { color: var(--color-primary-500); }
.hero-meta span { display: inline-flex; align-items: center; gap: var(--space-2); }
/* Hero visual — mock dashboard */
.hero-visual {
position: relative;
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-xl);
overflow: hidden;
}
.hero-visual::before {
/* warm tinted bg */
content: "";
position: absolute; inset: -40% -10% auto auto;
width: 70%; height: 70%;
background: radial-gradient(closest-side, var(--color-primary-100), transparent 70%);
pointer-events: none;
}
.mock-bar {
display: flex; align-items: center; gap: var(--space-2);
padding: var(--space-3) var(--space-4);
border-bottom: 1px solid var(--surface-border);
background: var(--color-neutral-50);
}
.mock-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--color-neutral-300); }
.mock-url {
flex: 1; text-align: center;
font-family: var(--font-mono); font-size: var(--text-xs);
color: var(--color-neutral-500);
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-md);
padding: var(--space-1) var(--space-3);
margin: 0 var(--space-2);
}
.mock-body { padding: var(--space-6); display: grid; gap: var(--space-4); position: relative; }
.lead-card {
display: grid;
grid-template-columns: auto 1fr auto;
gap: var(--space-4);
align-items: center;
padding: var(--space-4);
border: 1px solid var(--surface-border);
border-radius: var(--radius-xl);
background: var(--color-white);
transition: box-shadow var(--duration-base) var(--easing-out), transform var(--duration-base) var(--easing-out);
}
.lead-card:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); }
.lead-avatar {
width: 44px; height: 44px; border-radius: var(--radius-full);
background: var(--color-primary-100);
color: var(--color-primary-900);
display: grid; place-items: center;
font-weight: var(--font-weight-semibold);
font-size: var(--text-sm);
}
.lead-name { color: var(--color-neutral-950); font-weight: var(--font-weight-semibold); font-size: var(--text-sm); }
.lead-meta { color: var(--color-neutral-500); font-size: var(--text-xs); font-family: var(--font-mono); margin-top: 2px; }
.lead-amount {
font-family: var(--font-display);
font-size: var(--text-2xl);
color: var(--color-neutral-950);
line-height: 1;
}
.lead-amount span { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--color-neutral-500); display:block; margin-top: 4px; }
.badge {
display: inline-flex; align-items: center; gap: 6px;
font-size: var(--text-xs); font-weight: var(--font-weight-semibold);
padding: 2px 10px; border-radius: var(--radius-full);
}
.badge-primary { background: var(--color-primary-100); color: var(--color-primary-900); }
.badge-info { background: var(--color-info-100); color: var(--color-info-700); }
.badge-warning { background: var(--color-warning-100); color: var(--color-warning-700); }
.badge-success { background: var(--color-success-100); color: var(--color-success-700); }
.badge-neutral { background: var(--color-neutral-100); color: var(--color-neutral-700); }
.badge-accent { background: var(--color-accent-100); color: var(--color-accent-900); }
.badge .pulse { width: 6px; height: 6px; border-radius: 50%; background: currentColor; animation: pulse 1.6s var(--easing-in-out) infinite; }
@keyframes pulse { 0%,100% { opacity: 0.4; } 50% { opacity: 1; } }
/* Floating chip on hero visual */
.float-chip {
position: absolute;
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-lg);
padding: var(--space-3) var(--space-4);
display: flex; align-items: center; gap: var(--space-3);
font-size: var(--text-sm);
}
.float-chip-1 {
left: -16px; bottom: 64px;
}
.float-chip-2 {
right: -16px; top: 90px;
}
.float-chip .icon {
width: 32px; height: 32px; border-radius: var(--radius-md);
background: var(--color-accent-100); color: var(--color-accent-900);
display: grid; place-items: center;
}
.float-chip .icon.green { background: var(--color-primary-100); color: var(--color-primary-900); }
.float-chip strong { color: var(--color-neutral-950); font-weight: var(--font-weight-semibold); display:block; font-size: var(--text-sm); }
.float-chip small { color: var(--color-neutral-500); font-size: var(--text-xs); font-family: var(--font-mono); }
@media (max-width: 768px) { .float-chip { display: none; } }
/* ============================================
* Logo strip
* ============================================ */
.logos {
padding: var(--space-8) 0;
border-top: 1px solid var(--surface-border);
border-bottom: 1px solid var(--surface-border);
}
.logos-inner {
display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
gap: var(--space-12) var(--space-16);
color: var(--color-neutral-400);
}
.logos p {
width: 100%;
text-align: center;
font-family: var(--font-mono);
font-size: var(--text-xs);
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-neutral-500);
margin: 0 0 var(--space-2);
}
.logo-item {
font-family: var(--font-display);
font-size: var(--text-xl);
color: var(--color-neutral-400);
letter-spacing: 0.02em;
font-style: italic;
}
.logo-item.sans { font-family: var(--font-sans); font-style: normal; font-weight: var(--font-weight-bold); letter-spacing: -0.02em; }
.logo-item.mono { font-family: var(--font-mono); font-style: normal; letter-spacing: 0.1em; text-transform: uppercase; font-size: var(--text-base); }
/* ============================================
* Section header
* ============================================ */
section.section { padding: var(--space-16) 0; }
@media (min-width: 1024px) { section.section { padding: var(--space-24) 0; } }
.section-muted { background: var(--color-neutral-50); }
.section-emphasis { background: var(--color-primary-50); }
.section-head { max-width: 760px; margin: 0 0 var(--space-12); }
.section-head.center { margin-left: auto; margin-right: auto; text-align: center; }
.section-kicker {
font-family: var(--font-mono);
font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 0.08em;
color: var(--color-primary-700);
margin: 0 0 var(--space-4);
}
h2.section-title {
font-family: var(--font-display);
font-weight: var(--font-weight-regular);
font-size: clamp(2rem, 4.4vw, 3rem);
line-height: var(--leading-tight);
letter-spacing: -0.01em;
color: var(--color-neutral-950);
margin: 0 0 var(--space-4);
}
.section-title em { font-style: italic; color: var(--color-primary-700); }
.section-lede {
font-size: var(--text-lg);
color: var(--color-neutral-700);
line-height: var(--leading-relaxed);
margin: 0;
}
/* ============================================
* Problem section — broken cards
* ============================================ */
.broken-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--space-4);
}
@media (min-width: 768px) { .broken-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .broken-grid { grid-template-columns: repeat(3, 1fr); } }
.broken-card {
padding: var(--space-8);
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-xl);
transition: box-shadow var(--duration-base) var(--easing-out);
}
.broken-card:hover { box-shadow: var(--shadow-md); }
.broken-card .num {
font-family: var(--font-mono);
font-size: var(--text-xs);
color: var(--color-accent-600);
letter-spacing: 0.1em;
}
.broken-card h3 {
font-size: var(--text-xl);
color: var(--color-neutral-950);
margin: var(--space-3) 0 var(--space-3);
line-height: var(--leading-snug);
}
.broken-card p {
color: var(--color-neutral-700);
line-height: var(--leading-relaxed);
margin: 0;
}
/* ============================================
* How it works
* ============================================ */
.steps {
display: grid; grid-template-columns: 1fr; gap: var(--space-4);
}
@media (min-width: 1024px) { .steps { grid-template-columns: repeat(4, 1fr); gap: var(--space-6); } }
.step {
padding: var(--space-6);
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-xl);
position: relative;
}
.step-num {
width: 36px; height: 36px;
border-radius: var(--radius-full);
background: var(--color-primary-700);
color: var(--color-white);
display: grid; place-items: center;
font-family: var(--font-display);
font-size: var(--text-lg);
line-height: 1;
margin-bottom: var(--space-4);
}
.step h4 {
font-size: var(--text-lg);
color: var(--color-neutral-950);
margin: 0 0 var(--space-2);
}
.step p {
color: var(--color-neutral-700);
font-size: var(--text-sm);
line-height: var(--leading-relaxed);
margin: 0;
}
.step .tag {
margin-top: var(--space-4);
font-family: var(--font-mono);
font-size: var(--text-xs);
color: var(--color-neutral-500);
}
/* ============================================
* Demo widget block
* ============================================ */
.demo-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--space-12);
align-items: center;
}
@media (min-width: 1024px) {
.demo-grid { grid-template-columns: 1fr 1.1fr; gap: var(--space-16); }
}
.demo-bullets { list-style: none; padding: 0; margin: var(--space-6) 0 var(--space-8); display: grid; gap: var(--space-4); }
.demo-bullets li {
display: grid; grid-template-columns: 28px 1fr; gap: var(--space-3); align-items: start;
font-size: var(--text-base); color: var(--color-neutral-700); line-height: var(--leading-relaxed);
}
.demo-bullets .checkmark {
width: 24px; height: 24px; border-radius: var(--radius-full);
background: var(--color-primary-100);
display: grid; place-items: center;
color: var(--color-primary-700);
margin-top: 2px;
}
.demo-bullets strong { color: var(--color-neutral-950); display: block; font-weight: var(--font-weight-semibold); margin-bottom: 2px; }
/* Phone mock */
.phone {
background: var(--color-neutral-950);
border-radius: 40px;
padding: 12px;
box-shadow: var(--shadow-xl);
max-width: 380px;
margin: 0 auto;
}
.phone-screen {
background: var(--color-neutral-50);
border-radius: 28px;
overflow: hidden;
aspect-ratio: 9 / 18;
display: flex; flex-direction: column;
}
.phone-status {
padding: 18px var(--space-6) var(--space-3);
display: flex; justify-content: space-between; align-items: center;
font-family: var(--font-sans); font-size: var(--text-xs); font-weight: var(--font-weight-semibold);
color: var(--color-neutral-950);
}
.wa-header {
background: var(--color-primary-900); color: var(--color-primary-100);
padding: var(--space-3) var(--space-4);
display: flex; align-items: center; gap: var(--space-3);
}
.wa-avatar { width: 36px; height: 36px; border-radius: 50%; background: var(--color-primary-300); color: var(--color-primary-900); display:grid; place-items:center; font-weight: var(--font-weight-semibold); font-size: var(--text-sm); }
.wa-name { color: var(--color-white); font-size: var(--text-sm); font-weight: var(--font-weight-semibold); }
.wa-sub { color: var(--color-primary-300); font-size: 11px; }
.wa-body { background: #ECE5DD; flex: 1; padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-3); overflow: hidden; }
.bubble {
max-width: 85%;
padding: var(--space-3) var(--space-4);
border-radius: 14px;
font-size: var(--text-sm);
line-height: var(--leading-snug);
box-shadow: 0 1px 1px rgba(0,0,0,0.08);
}
.bubble.in { background: var(--color-white); color: var(--color-neutral-900); align-self: flex-start; border-top-left-radius: 4px; }
.bubble.out { background: #DCF8C6; color: var(--color-neutral-900); align-self: flex-end; border-top-right-radius: 4px; }
.bubble small { color: var(--color-neutral-500); font-size: 10px; display: block; margin-top: 4px; }
.bubble .render-placeholder {
margin-top: var(--space-2);
border-radius: 8px;
overflow: hidden;
background: repeating-linear-gradient(45deg, var(--color-primary-100), var(--color-primary-100) 8px, var(--color-primary-50) 8px, var(--color-primary-50) 16px);
aspect-ratio: 4/3;
display: grid; place-items: center;
color: var(--color-primary-700);
font-family: var(--font-mono); font-size: 10px;
letter-spacing: 0.08em;
}
/* ============================================
* Features grid
* ============================================ */
.features-grid {
display: grid; grid-template-columns: 1fr; gap: var(--space-4);
}
@media (min-width: 768px) { .features-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .features-grid { grid-template-columns: repeat(3, 1fr); gap: var(--space-6); } }
.feature {
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-xl);
padding: var(--space-8);
}
.feature .ico {
width: 44px; height: 44px;
border-radius: var(--radius-lg);
background: var(--color-primary-100);
color: var(--color-primary-700);
display: grid; place-items: center;
margin-bottom: var(--space-4);
}
.feature.alt .ico { background: var(--color-accent-100); color: var(--color-accent-900); }
.feature h3 {
font-size: var(--text-xl);
color: var(--color-neutral-950);
margin: 0 0 var(--space-2);
}
.feature p {
color: var(--color-neutral-700);
line-height: var(--leading-relaxed);
margin: 0;
}
/* ============================================
* Honesty banner
* ============================================ */
.honesty {
border-left: 4px solid var(--color-warning-500);
background: var(--color-warning-100);
color: var(--color-warning-700);
padding: var(--space-6) var(--space-8);
border-radius: var(--radius-lg);
display: grid; grid-template-columns: 32px 1fr; gap: var(--space-4); align-items: start;
}
.honesty strong { color: var(--color-warning-700); display: block; margin-bottom: 4px; font-size: var(--text-base); }
.honesty p { margin: 0; color: var(--color-neutral-700); font-size: var(--text-base); line-height: var(--leading-relaxed); }
.honesty .ico-warn {
width: 32px; height: 32px; border-radius: var(--radius-full);
background: var(--color-white); display:grid; place-items:center;
color: var(--color-warning-500);
}
/* ============================================
* Pricing
* ============================================ */
.pricing-grid {
display: grid; grid-template-columns: 1fr; gap: var(--space-6);
align-items: stretch;
}
@media (min-width: 1024px) { .pricing-grid { grid-template-columns: repeat(3, 1fr); } }
.price-card {
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-xl);
padding: var(--space-8);
display: flex; flex-direction: column;
position: relative;
}
.price-card.featured {
border: 2px solid var(--color-primary-700);
box-shadow: var(--shadow-lg);
}
.price-ribbon {
position: absolute; top: -14px; left: 50%; transform: translateX(-50%);
background: var(--color-primary-700); color: var(--color-white);
font-size: var(--text-xs); font-weight: var(--font-weight-semibold);
padding: 4px 12px; border-radius: var(--radius-full);
letter-spacing: 0.04em;
}
.price-name {
font-size: var(--text-sm);
font-weight: var(--font-weight-semibold);
color: var(--color-primary-700);
text-transform: uppercase;
letter-spacing: 0.08em;
margin: 0 0 var(--space-2);
}
.price-desc { color: var(--color-neutral-500); font-size: var(--text-sm); margin: 0 0 var(--space-6); line-height: var(--leading-relaxed); }
.price-amount {
font-family: var(--font-display);
font-size: var(--text-6xl);
color: var(--color-neutral-950);
line-height: 1;
display: flex; align-items: baseline; gap: var(--space-2);
margin-bottom: var(--space-2);
}
.price-amount .per {
font-family: var(--font-sans); font-size: var(--text-base);
color: var(--color-neutral-500); font-weight: var(--font-weight-regular);
}
.price-note { color: var(--color-neutral-500); font-size: var(--text-sm); margin: 0 0 var(--space-6); }
.price-features { list-style: none; padding: 0; margin: 0 0 var(--space-8); display: grid; gap: var(--space-3); flex: 1; }
.price-features li {
display: grid; grid-template-columns: 20px 1fr; gap: var(--space-3); align-items: start;
font-size: var(--text-sm); color: var(--color-neutral-700); line-height: var(--leading-relaxed);
}
.price-features svg { color: var(--color-primary-500); margin-top: 4px; }
.price-features li.muted svg { color: var(--color-neutral-300); }
.price-features li.muted { color: var(--color-neutral-400); }
/* ============================================
* Testimonials
* ============================================ */
.testimonials {
display: grid; grid-template-columns: 1fr; gap: var(--space-6);
}
@media (min-width: 1024px) { .testimonials { grid-template-columns: repeat(2, 1fr); gap: var(--space-8); } }
.quote-card {
background: var(--color-white);
border: 1px solid var(--surface-border);
border-radius: var(--radius-xl);
padding: var(--space-8);
}
.quote-card blockquote {
margin: 0 0 var(--space-6);
font-family: var(--font-display);
font-style: italic;
font-size: var(--text-2xl);
line-height: var(--leading-snug);
color: var(--color-neutral-950);
letter-spacing: -0.005em;
}
.quote-author {
display: flex; align-items: center; gap: var(--space-3);
padding-top: var(--space-4);
border-top: 1px solid var(--surface-border);
}
.quote-avatar {
width: 44px; height: 44px; border-radius: var(--radius-full);
background: var(--color-primary-100); color: var(--color-primary-900);
display: grid; place-items: center; font-weight: var(--font-weight-semibold);
font-size: var(--text-sm);
}
.quote-name { color: var(--color-neutral-950); font-weight: var(--font-weight-semibold); font-size: var(--text-sm); }
.quote-role { color: var(--color-neutral-500); font-size: var(--text-xs); font-family: var(--font-mono); }
/* ============================================
* Stats strip
* ============================================ */
.stats {
display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-8);
padding: var(--space-12) 0;
border-top: 1px solid var(--surface-border);
border-bottom: 1px solid var(--surface-border);
}
@media (min-width: 1024px) { .stats { grid-template-columns: repeat(4, 1fr); padding: var(--space-16) 0; } }
.stat { text-align: left; }
.stat .num {
font-family: var(--font-display);
font-size: var(--text-5xl);
color: var(--color-neutral-950);
line-height: 1;
letter-spacing: -0.01em;
}
.stat .num em { color: var(--color-primary-700); font-style: normal; }
.stat .lbl {
margin-top: var(--space-3);
color: var(--color-neutral-500);
font-size: var(--text-sm);
line-height: var(--leading-snug);
}
/* ============================================
* FAQ
* ============================================ */
.faq { max-width: var(--container-narrow); margin: 0 auto; }
.faq details {
border-bottom: 1px solid var(--surface-border);
padding: var(--space-6) 0;
}
.faq details[open] summary .chev { transform: rotate(45deg); }
.faq summary {
list-style: none;
display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-6);
cursor: pointer;
font-size: var(--text-lg);
font-weight: var(--font-weight-semibold);
color: var(--color-neutral-950);
line-height: var(--leading-snug);
}
.faq summary::-webkit-details-marker { display: none; }
.faq .chev {
flex-shrink: 0;
width: 28px; height: 28px;
display: grid; place-items: center;
color: var(--color-primary-700);
font-size: var(--text-xl);
transition: transform var(--duration-base) var(--easing-out);
line-height: 1;
}
.faq .answer {
margin-top: var(--space-4);
color: var(--color-neutral-700);
line-height: var(--leading-relaxed);
}
/* ============================================
* Final CTA
* ============================================ */
.final-cta {
background: var(--color-primary-900);
color: var(--color-primary-100);
border-radius: var(--radius-2xl);
padding: var(--space-16) var(--space-8);
text-align: center;
position: relative;
overflow: hidden;
}
.final-cta::before {
content: ""; position: absolute; inset: -50% auto auto -20%;
width: 60%; aspect-ratio: 1; border-radius: 50%;
background: radial-gradient(closest-side, rgba(168, 200, 181, 0.18), transparent 70%);
pointer-events: none;
}
.final-cta::after {
content: ""; position: absolute; inset: auto -20% -50% auto;
width: 60%; aspect-ratio: 1; border-radius: 50%;
background: radial-gradient(closest-side, rgba(194, 94, 51, 0.16), transparent 70%);
pointer-events: none;
}
.final-cta-inner { position: relative; }
.final-cta h2 {
font-family: var(--font-display);
color: var(--color-white);
font-size: clamp(2rem, 5vw, 3.5rem);
margin: 0 0 var(--space-4);
line-height: var(--leading-tight);
}
.final-cta p {
color: var(--color-primary-300);
font-size: var(--text-lg);
max-width: 560px; margin: 0 auto var(--space-8);
}
.final-cta .btn-primary {
background: var(--color-white); color: var(--color-primary-900);
}
.final-cta .btn-primary:hover { background: var(--color-primary-100); }
.final-cta .btn-ghost { color: var(--color-primary-100); }
.final-cta .btn-ghost:hover { background: rgba(255,255,255,0.06); }
/* ============================================
* Footer
* ============================================ */
footer {
padding: var(--space-16) 0 var(--space-12);
border-top: 1px solid var(--surface-border);
background: var(--color-white);
}
.foot-grid {
display: grid; grid-template-columns: 1fr; gap: var(--space-8);
margin-bottom: var(--space-12);
}
@media (min-width: 1024px) { .foot-grid { grid-template-columns: 2fr 1fr 1fr 1fr; gap: var(--space-12); } }
.foot-col h5 {
font-size: var(--text-sm);
color: var(--color-neutral-950);
margin: 0 0 var(--space-4);
font-weight: var(--font-weight-semibold);
}
.foot-col ul { list-style: none; padding: 0; margin: 0; display: grid; gap: var(--space-2); }
.foot-col a { color: var(--color-neutral-500); font-size: var(--text-sm); }
.foot-col a:hover { color: var(--color-neutral-950); }
.foot-tag { color: var(--color-neutral-500); font-size: var(--text-sm); max-width: 320px; margin-top: var(--space-4); line-height: var(--leading-relaxed); }
.foot-bar {
display: flex; justify-content: space-between; align-items: center; gap: var(--space-4);
padding-top: var(--space-8);
border-top: 1px solid var(--surface-border);
color: var(--color-neutral-500); font-size: var(--text-xs);
flex-wrap: wrap;
}
.foot-bar .mono { font-family: var(--font-mono); letter-spacing: 0.04em; }
/* ============================================
* Scroll-reveal + micro-interacciones
* ============================================ */
html.js .reveal {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
transition-delay: var(--reveal-delay, 0ms);
will-change: opacity, transform;
}
html.js .reveal.is-visible {
opacity: 1;
transform: none;
}
/* Hijos de un grupo: se ocultan antes del primer paint vía atributo */
html.js [data-reveal-group] > * {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
transition-delay: var(--reveal-delay, 0ms);
}
html.js [data-reveal-group] > *.is-visible {
opacity: 1;
transform: none;
}
/* Hover-lift sutil en tarjetas */
.broken-card, .step, .feature {
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.broken-card:hover, .step:hover, .feature:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-lg);
}
/* Render real dentro de la burbuja de WhatsApp */
.bubble .render-img {
margin-top: var(--space-2);
border-radius: 8px;
overflow: hidden;
aspect-ratio: 4 / 3;
display: block;
position: relative;
}
.bubble .render-img img {
width: 100%; height: 100%;
object-fit: cover;
display: block;
}
.bubble .render-img figcaption {
position: absolute;
left: 6px; bottom: 6px;
background: rgba(0, 0, 0, 0.62);
color: #fff;
font-family: var(--font-mono);
font-size: 9px;
letter-spacing: 0.06em;
padding: 2px 6px;
border-radius: 4px;
}
/* Antes / después en "Cómo funciona" */
.step .ba {
margin-top: var(--space-3);
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4px;
border-radius: 10px;
overflow: hidden;
border: 1px solid var(--surface-border);
}
.step .ba figure { position: relative; margin: 0; aspect-ratio: 1 / 1; }
.step .ba img { width: 100%; height: 100%; object-fit: cover; display: block; }
.step .ba figcaption {
position: absolute; top: 6px; left: 6px;
background: rgba(0, 0, 0, 0.6); color: #fff;
font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.06em;
padding: 2px 6px; border-radius: 4px;
}
.step .ba figure.after figcaption { background: var(--color-primary-600); }
/* Bajo reduced-motion: mostrar todo sin animar */
@media (prefers-reduced-motion: reduce) {
html.js .reveal,
html.js [data-reveal-group] > * { opacity: 1; transform: none; transition: none; }
.broken-card:hover, .step:hover, .feature:hover { transform: none; }
}
</style>
</head>
<body>
<!-- ============================================
Topbar
============================================ -->
<header class="topbar">
<div class="container topbar-inner">
<a href="#" class="brand">
<span class="brand-mark">R</span>
Reformix
</a>
<nav class="nav" aria-label="Principal">
<a href="#problema">Por qué Reformix</a>
<a href="#como-funciona">Cómo funciona</a>
<a href="#precios">Precios</a>
<a href="#faq">Preguntas</a>
</nav>
<div class="topbar-actions">
<a href="#" class="btn btn-ghost btn-sm">Entrar</a>
<a href="/signup" class="btn btn-primary btn-sm">Empezar gratis</a>
</div>
</div>
</header>
<!-- ============================================
Hero
============================================ -->
<section class="hero">
<div class="container hero-grid">
<div>
<span class="eyebrow"><span class="dot"></span> Para empresas de reformas en España</span>
<h1 class="hero-title">
Averigua <em>cuánto vale cada obra</em> antes de coger el coche.
</h1>
<p class="hero-sub">
El asistente de voz de Reformix atiende la llamada de tu cliente, le pide las fotos y te devuelve un render y un presupuesto orientativo por partidas. Llegas a cada visita sabiendo el tamaño real del trabajo — y solo te desplazas a las obras que te rentan.
</p>
<div class="hero-ctas">
<a href="/signup" class="btn btn-primary btn-lg">Empezar gratis 14 días</a>
<a href="#demo" class="btn btn-secondary btn-lg">Ver una demo en vivo</a>
</div>
<div class="hero-meta">
<span><svg class="check" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Sin tarjeta para probar</span>
<span><svg class="check" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Tu número, tu marca</span>
<span><svg class="check" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Cancela cuando quieras</span>
</div>
</div>
<!-- Hero visual: panel de leads mock -->
<div class="hero-visual reveal" id="demo" aria-label="Vista previa del panel de leads">
<div class="mock-bar">
<span class="mock-dot" style="background: var(--color-danger-500);"></span>
<span class="mock-dot" style="background: var(--color-warning-500);"></span>
<span class="mock-dot" style="background: var(--color-success-500);"></span>
<span class="mock-url">panel.reformix.es / leads</span>
</div>
<div class="mock-body">
<div class="lead-card">
<div class="lead-avatar">MR</div>
<div>
<div class="lead-name">María Rivas · Cocina · Madrid</div>
<div class="lead-meta">Hace 4 min · 24 m² · calidad media</div>
<div style="margin-top: 8px;"><span class="badge badge-primary"><span class="pulse"></span> Nuevo</span></div>
</div>
<div class="lead-amount">
12.400€
<span>orientativo</span>
</div>
</div>
<div class="lead-card">
<div class="lead-avatar" style="background: var(--color-accent-100); color: var(--color-accent-900);">JF</div>
<div>
<div class="lead-name">Jorge Fernández · Baño completo · Pinto</div>
<div class="lead-meta">Hace 32 min · 6 m² · calidad premium</div>
<div style="margin-top: 8px;"><span class="badge badge-info">📞 Contactado</span></div>
</div>
<div class="lead-amount">
9.150€
<span>orientativo</span>
</div>
</div>
<div class="lead-card">
<div class="lead-avatar">CL</div>
<div>
<div class="lead-name">Carmen López · Reforma integral · Móstoles</div>
<div class="lead-meta">Ayer · 72 m² · calidad media</div>
<div style="margin-top: 8px;"><span class="badge badge-warning">📅 Visita martes 10:30</span></div>
</div>
<div class="lead-amount">
41.800€
<span>orientativo</span>
</div>
</div>
</div>
<div class="float-chip float-chip-1">
<div class="icon green">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.37 1.9.72 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.35 1.85.59 2.81.72a2 2 0 0 1 1.72 2.01z"></path></svg>
</div>
<div>
<strong>Llamada nueva</strong>
<small>+34 663 ··· 21 · 00:47</small>
</div>
</div>
<div class="float-chip float-chip-2">
<div class="icon">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg>
</div>
<div>
<strong>Render listo</strong>
<small>Cocina · 3 propuestas</small>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
Logo strip
============================================ -->
<div class="logos">
<div class="container">
<div class="logos-inner">
<p>Reformistas que ya prueban Reformix en Madrid, Valencia y Sevilla</p>
<div class="logo-item">Obras Bermejo</div>
<div class="logo-item sans">CASAFINA</div>
<div class="logo-item mono">Reformas&nbsp;71</div>
<div class="logo-item">Talleres Quintana</div>
<div class="logo-item sans">VEGA&amp;HIJOS</div>
<div class="logo-item mono">Atelier&nbsp;Río</div>
</div>
</div>
</div>
<!-- ============================================
Problema
============================================ -->
<section class="section section-muted" id="problema">
<div class="container">
<div class="section-head reveal">
<p class="section-kicker">El sector hoy</p>
<h2 class="section-title">Tu agenda no distingue una obra de 40.000 € de un <em>cambio de grifo</em>.</h2>
<p class="section-lede">Sin saber qué hay detrás de cada llamada, inviertes lo mismo en la obra que te cambia el año que en la que te roba la mañana. Así llevamos veinte años.</p>
</div>
<div class="broken-grid" data-reveal-group>
<div class="broken-card">
<div class="num">01 · CAPTACIÓN</div>
<h3>Pagas por el mismo lead que cinco competidores.</h3>
<p>Los portales venden cada contacto varias veces. Ganas el que más rápido llame, no el que mejor trabaje. El cliente acaba agotado de llamadas.</p>
</div>
<div class="broken-card">
<div class="num">02 · VISITA</div>
<h3>Conduces 40 km y era cambiar un grifo.</h3>
<p>Sin información previa, cada visita es una apuesta. Una de cada tres no acaba en presupuesto, y muchas de las que sí, no compensan el desplazamiento.</p>
</div>
<div class="broken-card">
<div class="num">03 · PRESUPUESTO</div>
<h3>Presupuestas gratis para quien no firma.</h3>
<p>Mides, calculas y montas el PDF: horas de oficina que no factura nadie. La mayoría no acaba en obra, así que ese trabajo lo regalas tú.</p>
</div>
</div>
</div>
</section>
<!-- ============================================
Cómo funciona
============================================ -->
<section class="section" id="como-funciona">
<div class="container">
<div class="section-head reveal">
<p class="section-kicker">Cómo funciona</p>
<h2 class="section-title">Del primer "hola" al presupuesto firmado, <em>en una tarde</em>.</h2>
<p class="section-lede">Reformix conecta cuatro piezas que antes nadie había unido: agente de voz, render IA, WhatsApp y tu panel de gestión.</p>
</div>
<div class="steps" data-reveal-group>
<div class="step">
<div class="step-num">1</div>
<h4>El cliente llama a tu número</h4>
<p>El asistente IA contesta con tu marca, pregunta lo necesario y agenda una visita o pide fotos. Atiende en castellano, catalán y valenciano.</p>
<div class="tag">⌁ Agente de voz</div>
</div>
<div class="step">
<div class="step-num">2</div>
<h4>Se genera un render orientativo</h4>
<p>A partir de las fotos del cliente, Reformix devuelve 3 propuestas visuales con calidades básica, media y premium. Ya tienes de qué hablar en la visita.</p>
<div class="ba" aria-label="Comparativa antes y después del render">
<figure><img src="/b2b-assets/img/antes.webp" alt="Cocina antes de la reforma" loading="lazy" decoding="async"><figcaption>ANTES</figcaption></figure>
<figure class="after"><img src="/b2b-assets/img/despues.webp" alt="Render de la cocina reformada" loading="lazy" decoding="async"><figcaption>DESPUÉS</figcaption></figure>
</div>
<div class="tag">⌁ Render IA</div>
</div>
<div class="step">
<div class="step-num">3</div>
<h4>Llega un presupuesto por WhatsApp</h4>
<p>En minutos. Con desglose por partidas, plazos y la frase honesta: "es orientativo, tu visita sigue siendo la que cierra".</p>
<div class="tag">⌁ WhatsApp</div>
</div>
<div class="step">
<div class="step-num">4</div>
<h4>Tú visitas y firmas</h4>
<p>Solo a los que ya están dentro. Marcas el lead como ganado, perdido o aplazado desde el panel. Reformix aprende para la próxima.</p>
<div class="tag">⌁ Panel reformista</div>
</div>
</div>
</div>
</section>
<!-- ============================================
Demo / WhatsApp
============================================ -->
<section class="section section-emphasis">
<div class="container demo-grid">
<div>
<p class="section-kicker">Lo que recibe tu cliente</p>
<h2 class="section-title">Un presupuesto <em>en su WhatsApp</em>, no en un PDF que se pierde.</h2>
<p class="section-lede">El mismo canal que ya usa todos los días. Sin descargar apps, sin registrarse en portales, sin esperar tres días.</p>
<ul class="demo-bullets">
<li>
<span class="checkmark"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></span>
<div><strong>Tres calidades, no una</strong>El cliente compara básica, media y premium. Entiende qué está pagando y por qué.</div>
</li>
<li>
<span class="checkmark"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></span>
<div><strong>Render asociado a cada precio</strong>Ve la cocina, no una hoja de Excel. Las dudas bajan, la confianza sube.</div>
</li>
<li>
<span class="checkmark"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg></span>
<div><strong>Honestidad explícita</strong>"Es orientativo. Tu visita sigue siendo la que cierra." Lo decimos en cada presupuesto.</div>
</li>
</ul>
<a href="#cta" class="btn btn-primary btn-md">Quiero verlo con mi negocio</a>
</div>
<div>
<div class="phone reveal" aria-hidden="true">
<div class="phone-screen">
<div class="phone-status">
<span>9:41</span>
<span>·····</span>
</div>
<div class="wa-header">
<div class="wa-avatar">R</div>
<div>
<div class="wa-name">Reformas Bermejo</div>
<div class="wa-sub">en línea</div>
</div>
</div>
<div class="wa-body">
<div class="bubble in">
¡Hola María! 👋 Soy el asistente de Bermejo. Te paso el presupuesto orientativo de tu cocina.
<small>09:42</small>
</div>
<div class="bubble in">
<figure class="render-img">
<img src="/b2b-assets/img/despues.webp" alt="Render orientativo de la cocina reformada" loading="lazy" decoding="async">
<figcaption>RENDER · COCINA · CALIDAD MEDIA</figcaption>
</figure>
Calidad media · 24 m²<br>
<strong>12.400 €</strong> · 18 días<br>
<small>09:42</small>
</div>
<div class="bubble out">
¿Puedo ver también la premium?
<small>09:44</small>
</div>
<div class="bubble in">
Claro 👇 Y recuerda: es orientativo, la visita es la que cierra.
<small>09:44</small>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
Features grid
============================================ -->
<section class="section">
<div class="container">
<div class="section-head reveal">
<p class="section-kicker">Lo que hace por ti</p>
<h2 class="section-title">Una herramienta de trabajo. <em>No un escaparate más.</em></h2>
</div>
<div class="features-grid" data-reveal-group>
<div class="feature">
<div class="ico">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.37 1.9.72 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.35 1.85.59 2.81.72a2 2 0 0 1 1.72 2.01z"></path></svg>
</div>
<h3>Asistente IA 24/7</h3>
<p>Contesta llamadas a las once de la noche y los sábados. Filtra al curioso, cualifica al que va en serio.</p>
</div>
<div class="feature">
<div class="ico">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg>
</div>
<h3>Renders en minutos</h3>
<p>Tres propuestas visuales por obra. Calidad básica, media y premium. Útiles para hablar, no para presumir.</p>
</div>
<div class="feature">
<div class="ico">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M16 13H8"></path><path d="M16 17H8"></path><path d="M10 9H8"></path></svg>
</div>
<h3>Presupuesto orientativo</h3>
<p>Por partidas, con plazos. Sabes el tamaño real de la obra antes de poner un pie en la casa — y tu cliente entiende qué está comprando.</p>
</div>
<div class="feature alt">
<div class="ico">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path></svg>
</div>
<h3>Entrega por WhatsApp</h3>
<p>El canal donde ya está tu cliente. Cero fricción de descargas, registros o apps que nadie va a usar.</p>
</div>
<div class="feature">
<div class="ico">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3v18h18"></path><path d="m7 14 4-4 4 4 5-5"></path></svg>
</div>
<h3>Panel con cabeza</h3>
<p>Una bandeja, no diez. De un vistazo ves qué lead vale tu mañana: estado, llamada, render, presupuesto y nota. Sin tabs perdidos.</p>
</div>
<div class="feature">
<div class="ico">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="6"></circle><path d="M15.477 12.89 17 22l-5-3-5 3 1.523-9.11"></path></svg>
</div>
<h3>Sello "Precio Justo"</h3>
<p>Tu rango de precios queda registrado. El cliente sabe que no le estás vendiendo humo. Tú diferencias frente al portal.</p>
</div>
</div>
<div style="margin-top: var(--space-12);">
<div class="honesty">
<div class="ico-warn">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><line x1="12" x2="12" y1="9" y2="13"></line><line x1="12" x2="12.01" y1="17" y2="17"></line></svg>
</div>
<div>
<strong>Lo que Reformix no es.</strong>
<p>No es un marketplace que revende tu cliente cinco veces. No te promete leads garantizados. No sustituye tu visita, tu obra ni tu palabra. Es una herramienta para llegar mejor preparado, eso es todo.</p>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
Stats
============================================ -->
<section>
<div class="container">
<div class="stats" data-reveal-group>
<div class="stat">
<div class="num"><em>2,7×</em></div>
<div class="lbl">más visitas que terminan en presupuesto firmado, frente al lead de portal.</div>
</div>
<div class="stat">
<div class="num"><em>14</em> min</div>
<div class="lbl">de media desde que entra la llamada hasta que el cliente recibe presupuesto.</div>
</div>
<div class="stat">
<div class="num"><em>63%</em></div>
<div class="lbl">de visitas en frío. Vas solo a las casas donde ya hay obra real.</div>
</div>
<div class="stat">
<div class="num"><em>89%</em></div>
<div class="lbl">de los clientes finales contestan al WhatsApp con el render. Era un 14% en email.</div>
</div>
</div>
<p style="text-align: center; font-size: var(--text-xs); color: var(--color-neutral-500); margin-top: var(--space-6); font-family: var(--font-mono);">
Datos del piloto cerrado · 18 empresas · eneabr 2026 · Madrid + Valencia
</p>
</div>
</section>
<!-- ============================================
Pricing
============================================ -->
<section class="section section-muted" id="precios">
<div class="container">
<div class="section-head center">
<p class="section-kicker">Precios</p>
<h2 class="section-title">Precios <em>de herramienta</em>, no de portal.</h2>
<p class="section-lede">Pagas un mes plano. Sin comisión por lead, sin pujas, sin "destacar tu perfil". Lo que captes es tuyo.</p>
</div>
<div class="pricing-grid" data-reveal-group>
<div class="price-card">
<div class="price-name">Starter</div>
<p class="price-desc">Para autónomos y equipos de hasta dos. Para probar el modelo sin compromiso.</p>
<div class="price-amount">29€<span class="per">/mes</span></div>
<p class="price-note">5 leads procesados / mes · 3€ por lead extra</p>
<ul class="price-features">
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Asistente IA en castellano</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Renders + presupuesto por WhatsApp</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Panel de leads básico</li>
<li class="muted"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Branding tuyo en WhatsApp</li>
<li class="muted"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Sello Precio Justo</li>
</ul>
<a href="/signup" class="btn btn-secondary btn-md">Empezar gratis</a>
</div>
<div class="price-card featured">
<div class="price-ribbon">Recomendado</div>
<div class="price-name">Pro</div>
<p class="price-desc">El plan que están usando los reformistas del piloto. Empresas de 2 a 10 personas.</p>
<div class="price-amount">79€<span class="per">/mes</span></div>
<p class="price-note">15 leads procesados / mes · 2,50€ por lead extra</p>
<ul class="price-features">
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Todo lo de Starter</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Asistente en 3 idiomas (ES, CA, VA)</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> 3 calidades por presupuesto</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Branding tuyo en WhatsApp</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Aviso de licencia urbanística</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Sello Precio Justo Certificado</li>
</ul>
<a href="/signup" class="btn btn-primary btn-md">Empezar 14 días gratis</a>
</div>
<div class="price-card">
<div class="price-name">Business</div>
<p class="price-desc">Empresas medianas (más de 10 personas) o con varias delegaciones.</p>
<div class="price-amount">199€<span class="per">/mes</span></div>
<p class="price-note">50 leads procesados / mes · 2€ por lead extra</p>
<ul class="price-features">
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Todo lo de Pro</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Varias delegaciones · routing por zona</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Integración con tu ERP / CRM</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Manager dedicado de cuenta</li>
<li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Soporte por teléfono</li>
</ul>
<a href="#cta" class="btn btn-secondary btn-md">Hablar con nosotros</a>
</div>
</div>
<p style="text-align: center; margin-top: var(--space-8); color: var(--color-neutral-500); font-size: var(--text-sm); max-width: 640px; margin-left: auto; margin-right: auto;">
Un <em>lead procesado</em> es una conversación cualificada que termina en presupuesto enviado al cliente. Los descartados por el asistente IA no cuentan.
</p>
</div>
</section>
<!-- ============================================
Testimonios
============================================ -->
<section class="section">
<div class="container">
<div class="section-head reveal">
<p class="section-kicker">Lo que dicen</p>
<h2 class="section-title">Reformistas que <em>ya están dentro</em>.</h2>
</div>
<div class="testimonials" data-reveal-group>
<div class="quote-card">
<blockquote>
"Lo del render se lo enseño antes de subir a la obra y se acaban las charlas raras de qué va a costar. Llego, mido, y ya estamos hablando del mismo idioma."
</blockquote>
<div class="quote-author">
<div class="quote-avatar">AB</div>
<div>
<div class="quote-name">Antonio Bermejo</div>
<div class="quote-role">Reformas Bermejo · Madrid · 9 obras/mes</div>
</div>
</div>
</div>
<div class="quote-card">
<blockquote>
"Llevo veinte años en esto y nunca había podido contestar a un cliente un domingo a las once. Ahora le contesta Reformix y el lunes ya tengo presupuesto enviado."
</blockquote>
<div class="quote-author">
<div class="quote-avatar" style="background: var(--color-accent-100); color: var(--color-accent-900);">MV</div>
<div>
<div class="quote-name">Marisa Vega</div>
<div class="quote-role">Vega &amp; Hijos · Valencia · 12 personas</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
FAQ
============================================ -->
<section class="section section-muted" id="faq">
<div class="container">
<div class="section-head center">
<p class="section-kicker">Preguntas frecuentes</p>
<h2 class="section-title">Lo que nos preguntáis <em>antes de firmar</em>.</h2>
</div>
<div class="faq" data-reveal-group>
<details open="">
<summary>¿Esto no me va a quitar el trato humano con el cliente?<span class="chev">+</span></summary>
<div class="answer">Al revés. Llegas a la visita con la conversación medio hecha: ya sabes qué quiere, qué calidad, qué presupuesto le encaja. Te queda más tiempo para lo que sí necesita un humano: medir bien, escuchar, vender tu obra.</div>
</details>
<details>
<summary>¿Y si el cliente me llama con un proyecto raro que la IA no sabe presupuestar?<span class="chev">+</span></summary>
<div class="answer">El asistente sabe decir "esto necesita un humano" y te lo pasa directamente, con la grabación y un resumen. Reformix no inventa: si no tiene datos para presupuestar, no presupuesta.</div>
</details>
<details>
<summary>¿Quién es el dueño de los leads?<span class="chev">+</span></summary>
<div class="answer">Tú. Siempre. Reformix no revende ni comparte tus leads con nadie. Es la diferencia con un marketplace: aquí pagas la herramienta, no el contacto.</div>
</details>
<details>
<summary>¿Y la licencia urbanística? No quiero meter en líos a nadie.<span class="chev">+</span></summary>
<div class="answer">En cada presupuesto que requiere obra mayor aparece un aviso explícito: "Esta obra puede requerir licencia urbanística — consúltalo en tu ayuntamiento". No vendemos como menor lo que es mayor.</div>
</details>
<details>
<summary>¿Qué pasa si lo pruebo y no me convence?<span class="chev">+</span></summary>
<div class="answer">Lo dejas. Cancelas desde el panel sin llamar a nadie. Los primeros 14 días son gratis y no pedimos tarjeta hasta el día 15.</div>
</details>
</div>
</div>
</section>
<!-- ============================================
Final CTA
============================================ -->
<section class="section" id="cta">
<div class="container">
<div class="final-cta">
<div class="final-cta-inner">
<h2>Empieza esta semana. Cierra obras la siguiente.</h2>
<p>14 días gratis, sin tarjeta, sin compromiso. Si en dos semanas no estás cerrando más, lo cancelas y nos despedimos como amigos.</p>
<div class="hero-ctas" style="justify-content: center;">
<a href="/signup" class="btn btn-primary btn-lg">Empezar gratis 14 días</a>
<a href="#" class="btn btn-ghost btn-lg">Hablar con un humano →</a>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================
Footer
============================================ -->
<footer>
<div class="container">
<div class="foot-grid">
<div class="foot-col">
<a href="#" class="brand">
<span class="brand-mark">R</span>
Reformix
</a>
<p class="foot-tag">Un mercado de reformas más justo. Para los profesionales que cumplen lo que prometen.</p>
</div>
<div class="foot-col">
<h5>Producto</h5>
<ul>
<li><a href="#">Asistente IA</a></li>
<li><a href="#">Renders</a></li>
<li><a href="#">Panel reformista</a></li>
<li><a href="#">Precios</a></li>
</ul>
</div>
<div class="foot-col">
<h5>Empresa</h5>
<ul>
<li><a href="#">Sobre nosotros</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Contacto</a></li>
<li><a href="#">Trabaja con nosotros</a></li>
</ul>
</div>
<div class="foot-col">
<h5>Legal</h5>
<ul>
<li><a href="#">Condiciones</a></li>
<li><a href="#">Privacidad</a></li>
<li><a href="#">Cookies</a></li>
<li><a href="#">Sello Precio Justo</a></li>
</ul>
</div>
</div>
<div class="foot-bar">
<span>© 2026 Reformix — Hecho en Madrid.</span>
<span class="mono">v1.0 · ES</span>
</div>
</div>
</footer>
<script>
(function () {
var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
// Reparte un retardo escalonado entre los hijos de cada grupo.
var groups = document.querySelectorAll('[data-reveal-group]');
groups.forEach(function (group) {
Array.prototype.forEach.call(group.children, function (child, i) {
child.style.setProperty('--reveal-delay', (i * 90) + 'ms');
});
});
var targets = document.querySelectorAll('.reveal, [data-reveal-group] > *');
function countUp(el) {
var text = el.textContent.trim();
var match = text.match(/-??\d[\d.,]*/);
if (!match) return;
var token = match[0];
var prefix = text.slice(0, match.index);
var suffix = text.slice(match.index + token.length);
var decimals = (token.split(/[.,]/)[1] || '').length;
var target = parseFloat(token.replace('', '-').replace(',', '.'));
if (isNaN(target)) return;
var dur = 1100, start = null;
function frame(ts) {
if (start === null) start = ts;
var p = Math.min((ts - start) / dur, 1);
var eased = 1 - Math.pow(1 - p, 3);
var val = (target * eased).toFixed(decimals).replace('.', ',');
el.textContent = prefix + val + suffix;
if (p < 1) requestAnimationFrame(frame);
else el.textContent = text;
}
requestAnimationFrame(frame);
}
if (reduce || !('IntersectionObserver' in window)) {
targets.forEach(function (t) { t.classList.add('is-visible'); });
return;
}
var io = new IntersectionObserver(function (entries, obs) {
entries.forEach(function (entry) {
if (!entry.isIntersecting) return;
var el = entry.target;
el.classList.add('is-visible');
var nums = el.querySelectorAll ? el.querySelectorAll('.stat .num em') : [];
if (el.matches && el.matches('.stat')) {
var ownNum = el.querySelector('.num em');
if (ownNum) countUp(ownNum);
}
Array.prototype.forEach.call(nums, countUp);
obs.unobserve(el);
});
}, { rootMargin: '0px 0px -10% 0px', threshold: 0.15 });
targets.forEach(function (t) { io.observe(t); });
})();
</script>
</body></html>