aiplang 2.11.8 → 2.11.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/aiplang.js CHANGED
@@ -5,7 +5,7 @@ const fs = require('fs')
5
5
  const path = require('path')
6
6
  const http = require('http')
7
7
 
8
- const VERSION = '2.11.8'
8
+ const VERSION = '2.11.9'
9
9
  const RUNTIME_DIR = path.join(__dirname, '..', 'runtime')
10
10
  const cmd = process.argv[2]
11
11
  const args = process.argv.slice(3)
@@ -686,7 +686,7 @@ function generateTypes(app, srcFile) {
686
686
  }
687
687
 
688
688
  lines.push(`// ── aiplang version ──────────────────────────────────────────`)
689
- lines.push(`export const AIPLANG_VERSION = '2.11.8'`)
689
+ lines.push(`export const AIPLANG_VERSION = '2.11.9'`)
690
690
  lines.push(``)
691
691
  return lines.join('\n')
692
692
  }
@@ -1801,868 +1801,853 @@ function genCustomThemeVars(ct) {
1801
1801
 
1802
1802
  function genThemeVarCSS(t) {
1803
1803
  const r=[]
1804
- // Override CSS custom properties com valores do ~theme
1805
- const rootVars = []
1806
- if(t.accent) {
1807
- // Converter hex para rgb para --aip-accent-rgb
1808
- const hex = t.accent.replace('#','')
1809
- const rgb = hex.length===6 ? `${parseInt(hex.slice(0,2),16)},${parseInt(hex.slice(2,4),16)},${parseInt(hex.slice(4,6),16)}` : '255,87,34'
1810
- rootVars.push(`--aip-accent:${t.accent}`)
1811
- rootVars.push(`--aip-accent-rgb:${rgb}`)
1812
- rootVars.push(`--aip-accent-light:${t.accent}cc`)
1813
- }
1814
- if(t.bg) {
1815
- const hex = t.bg.replace('#','')
1816
- const rgb = hex.length===6 ? `${parseInt(hex.slice(0,2),16)},${parseInt(hex.slice(2,4),16)},${parseInt(hex.slice(4,6),16)}` : '3,7,18'
1817
- rootVars.push(`--aip-bg:${t.bg}`)
1818
- rootVars.push(`--aip-bg-rgb:${rgb}`)
1819
- }
1820
- if(t.text) rootVars.push(`--aip-text:${t.text}`)
1821
- if(rootVars.length) r.push(`:root{${rootVars.join(';')}}`)
1822
- if(t.accent) r.push(`.fx-cta,.fx-btn,.fx-pricing-cta{background:${t.accent}!important;color:#fff!important}`)
1823
- if(t.bg) r.push(`body{background:${t.bg}!important}`)
1824
- if(t.text) r.push(`body{color:${t.text}!important}`)
1825
- if(t.font) r.push(`@import url('https://fonts.googleapis.com/css2?family=${t.font.replace(/ /g,'+')}:wght@400;700;900&display=swap');body{font-family:'${t.font}',system-ui,sans-serif!important}`)
1826
- if(t.radius) r.push(`.fx-card,.fx-form,.fx-btn,.fx-input,.fx-cta,.fx-pricing-card{border-radius:${t.radius}!important}`)
1827
- if(t.surface) r.push(`.fx-card,.fx-form{background:${t.surface}!important}`)
1828
- if(t.border) r.push(`.fx-card,.fx-form,.fx-input{border-color:${t.border}!important}`)
1829
- if(t.shadow) r.push(`.fx-card:hover{box-shadow:${t.shadow}!important}`)
1830
- if(t.navbg) r.push(`.fx-nav{background:${t.navbg}!important}`)
1831
- if(t.spacing) r.push(`.fx-sect,.fx-hero{padding-top:${t.spacing};padding-bottom:${t.spacing}}`)
1804
+ const rv=[]
1805
+ function h2r(h){h=h.replace('#','');return h.length===6?parseInt(h.slice(0,2),16)+','+parseInt(h.slice(2,4),16)+','+parseInt(h.slice(4,6),16):'255,255,255'}
1806
+ if(t.accent){rv.push('--aip-accent:'+t.accent);rv.push('--aip-accent-rgb:'+h2r(t.accent))}
1807
+ if(t.bg){var rgb=h2r(t.bg);rv.push('--ds-background-100:'+t.bg);rv.push('--ds-background-100-rgb:'+rgb);rv.push('--ds-background-200:'+t.bg)}
1808
+ if(t.text){rv.push('--ds-gray-1000:'+t.text)}
1809
+ if(t.radius){rv.push('--radius-sm:'+t.radius);rv.push('--radius-md:'+t.radius)}
1810
+ if(rv.length) r.push(':root{'+rv.join(';')+'}')
1811
+ if(t.font) r.push("body{font-family:'"+t.font+"',var(--geist-font)!important}")
1812
+ if(t.accent) r.push('.fx-cta,.fx-btn,.fx-pricing-cta,.fx-nav-cta{background:'+t.accent+'!important;color:#fff!important}')
1813
+ if(t.bg) r.push('body,html{background:'+t.bg+'!important}')
1814
+ if(t.text) r.push('body{color:'+t.text+'!important}')
1832
1815
  return r.join('')
1833
1816
  }
1834
1817
 
1818
+
1835
1819
  function css(theme) {
1836
1820
  // ════════════════════════════════════════════════════════════════
1837
- // DESIGN SYSTEM — CSS custom properties como fundação
1838
- // Cada tema define suas variáveis; todos os componentes usam vars
1821
+ // GEIST DESIGN SYSTEM — Vercel's design language for aiplang
1822
+ // Principles: precision, minimalism, Swiss typography, semantic tokens
1823
+ // Fonts: Geist Sans + Geist Mono (Google Fonts)
1839
1824
  // ════════════════════════════════════════════════════════════════
1840
1825
  const base = `
1841
- :root{
1842
- --aip-font-display:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;
1843
- --aip-font-mono:'JetBrains Mono','Fira Code','Cascadia Code','Courier New',monospace;
1844
- --aip-ease-out:cubic-bezier(.16,1,.3,1);
1845
- --aip-ease-spring:cubic-bezier(.34,1.56,.64,1);
1846
- }
1826
+ @import url('https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700;800;900&family=Geist+Mono:wght@400;500;700&display=swap');
1827
+
1828
+ :root {
1829
+ --geist-font:'Geist','Geist Sans',-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
1830
+ --geist-mono:'Geist Mono','Geist_Mono',ui-monospace,'Cascadia Code','Source Code Pro',Menlo,Consolas,'DejaVu Sans Mono',monospace;
1831
+ /* Spacing scale (4px base) */
1832
+ --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;
1833
+ --space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;
1834
+ /* Radius */
1835
+ --radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;
1836
+ /* Easing - Vercel guidelines */
1837
+ --ease-out:cubic-bezier(.16,1,.3,1);
1838
+ --ease-in-out:cubic-bezier(.4,0,.2,1);
1839
+ --ease-spring:cubic-bezier(.34,1.56,.64,1);
1840
+ /* Transitions - only opacity + transform per guidelines */
1841
+ --duration-fast:100ms;--duration-normal:150ms;--duration-slow:250ms;
1842
+ }
1843
+
1844
+ /* ── Reset ── */
1847
1845
  *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
1848
- html{scroll-behavior:smooth;text-size-adjust:100%;-webkit-text-size-adjust:100%}
1846
+ html{
1847
+ font-size:16px;
1848
+ scroll-behavior:smooth;
1849
+ text-size-adjust:100%;
1850
+ -webkit-text-size-adjust:100%;
1851
+ /* Vercel: tabular nums by default for consistency */
1852
+ font-feature-settings:'ss01','ss02','cv01','cv02';
1853
+ }
1849
1854
  body{
1850
- font-family:var(--aip-font-display);
1851
- background:var(--aip-bg);
1852
- color:var(--aip-text);
1853
- line-height:1.6;
1855
+ font-family:var(--geist-font);
1856
+ background:var(--ds-background-100);
1857
+ color:var(--ds-gray-1000);
1858
+ line-height:1.5;
1854
1859
  -webkit-font-smoothing:antialiased;
1855
1860
  -moz-osx-font-smoothing:grayscale;
1856
1861
  min-height:100vh;
1857
1862
  overflow-x:hidden;
1863
+ /* Reduce banding from gradients */
1864
+ text-rendering:optimizeLegibility;
1858
1865
  }
1859
1866
  a{text-decoration:none;color:inherit}
1860
1867
  img{max-width:100%;height:auto;display:block}
1861
- input,button,select,textarea{font-family:inherit;font-size:inherit}
1862
- button{cursor:pointer}
1863
- code,pre{font-family:var(--aip-font-mono)}
1864
-
1865
- /* ── NOISE OVERLAY ── */
1866
- body::before{
1867
- content:'';
1868
- position:fixed;
1869
- inset:0;
1870
- background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E");
1871
- pointer-events:none;
1872
- z-index:9999;
1873
- opacity:.6;
1874
- mix-blend-mode:overlay;
1868
+ input,button,select,textarea{font-family:var(--geist-font);font-size:inherit}
1869
+ button{cursor:pointer;border:none;background:none}
1870
+ code,pre,kbd{font-family:var(--geist-mono)}
1871
+ /* Vercel guideline: touch-action on interactive elements */
1872
+ button,a,[role=button]{touch-action:manipulation}
1873
+ /* Vercel: visible focus ring */
1874
+ :focus-visible{
1875
+ outline:2px solid var(--ds-blue-700);
1876
+ outline-offset:2px;
1877
+ border-radius:var(--radius-sm);
1878
+ }
1879
+ /* Vercel: honor prefers-reduced-motion */
1880
+ @media(prefers-reduced-motion:reduce){
1881
+ *,*::before,*::after{
1882
+ animation-duration:.01ms!important;
1883
+ animation-iteration-count:1!important;
1884
+ transition-duration:.01ms!important;
1885
+ }
1875
1886
  }
1876
1887
 
1877
1888
  /* ═══════════════════════════════════════════
1878
- NAV
1889
+ NAV — Geist nav style
1879
1890
  ═══════════════════════════════════════════ */
1880
1891
  .fx-nav{
1881
- display:flex;
1882
- align-items:center;
1883
- justify-content:space-between;
1884
- padding:0 2rem;
1885
- height:60px;
1886
- position:sticky;
1887
- top:0;
1888
- z-index:100;
1889
- background:rgba(var(--aip-bg-rgb),.75);
1890
- backdrop-filter:blur(20px) saturate(180%);
1891
- -webkit-backdrop-filter:blur(20px) saturate(180%);
1892
- border-bottom:1px solid var(--aip-border);
1893
- transition:border-color .3s;
1894
- flex-wrap:wrap;
1895
- gap:.5rem;
1896
- }
1897
- .fx-nav.scrolled{border-bottom-color:var(--aip-border-strong)}
1892
+ position:sticky;top:0;z-index:200;
1893
+ display:flex;align-items:center;justify-content:space-between;
1894
+ padding:0 var(--space-6);height:54px;
1895
+ background:var(--ds-background-100);
1896
+ border-bottom:1px solid var(--ds-gray-alpha-400);
1897
+ /* Vercel: backdrop-blur for glass effect */
1898
+ backdrop-filter:blur(16px) saturate(200%);
1899
+ -webkit-backdrop-filter:blur(16px) saturate(200%);
1900
+ background:rgba(var(--ds-background-100-rgb),.92);
1901
+ flex-wrap:wrap;gap:var(--space-2);
1902
+ transition:border-color var(--duration-slow) var(--ease-in-out);
1903
+ }
1904
+ .fx-nav.scrolled{border-bottom-color:var(--ds-gray-alpha-400)}
1898
1905
  .fx-brand{
1899
- font-size:1.125rem;
1900
- font-weight:800;
1901
- letter-spacing:-.04em;
1902
- color:var(--aip-text);
1906
+ font-size:14px;font-weight:600;letter-spacing:-.02em;
1907
+ color:var(--ds-gray-1000);
1903
1908
  }
1904
- .fx-nav-links{display:flex;align-items:center;gap:.25rem}
1909
+ .fx-nav-links{display:flex;align-items:center;gap:2px}
1905
1910
  .fx-nav-link{
1906
- font-size:.8125rem;
1907
- font-weight:500;
1908
- color:var(--aip-text-muted);
1909
- padding:.375rem .75rem;
1910
- border-radius:.5rem;
1911
- transition:background .15s,color .15s;
1911
+ display:inline-flex;align-items:center;
1912
+ font-size:13px;font-weight:400;
1913
+ color:var(--ds-gray-900);
1914
+ padding:5px 10px;border-radius:var(--radius-md);
1915
+ /* Only transition opacity + transform per Vercel guidelines */
1916
+ transition:color var(--duration-normal) var(--ease-in-out),background var(--duration-normal) var(--ease-in-out);
1917
+ }
1918
+ .fx-nav-link:hover{
1919
+ color:var(--ds-gray-1000);
1920
+ background:var(--ds-gray-alpha-200);
1921
+ }
1922
+ /* Vercel CTA button style */
1923
+ .fx-nav-cta{
1924
+ display:inline-flex;align-items:center;gap:6px;
1925
+ height:32px;padding:0 12px;
1926
+ background:var(--ds-gray-1000);
1927
+ color:var(--ds-background-100);
1928
+ font-size:13px;font-weight:500;
1929
+ border-radius:var(--radius-md);
1930
+ transition:opacity var(--duration-normal) var(--ease-in-out);
1912
1931
  white-space:nowrap;
1913
1932
  }
1914
- .fx-nav-link:hover{background:var(--aip-surface-hover);color:var(--aip-text)}
1915
- .fx-nav-cta{
1916
- font-size:.8125rem;
1917
- font-weight:700;
1918
- padding:.4375rem 1rem;
1919
- background:var(--aip-accent);
1920
- color:#fff;
1921
- border-radius:.5rem;
1922
- transition:opacity .15s,transform .1s;
1923
- letter-spacing:-.01em;
1924
- }
1925
- .fx-nav-cta:hover{opacity:.88;transform:translateY(-1px)}
1926
- .fx-hamburger{display:none;flex-direction:column;gap:4px;background:none;border:none;padding:.375rem}
1927
- .fx-hamburger span{display:block;width:20px;height:1.5px;background:var(--aip-text-muted);border-radius:1px;transition:all .2s}
1933
+ .fx-nav-cta:hover{opacity:.85}
1934
+ .fx-hamburger{display:none;flex-direction:column;gap:5px;padding:6px;border-radius:var(--radius-md)}
1935
+ .fx-hamburger span{display:block;width:18px;height:1px;background:var(--ds-gray-900);transition:all var(--duration-normal) var(--ease-in-out)}
1928
1936
  .fx-hamburger.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
1929
- .fx-hamburger.open span:nth-child(2){opacity:0;transform:translateX(-4px)}
1937
+ .fx-hamburger.open span:nth-child(2){opacity:0}
1930
1938
  .fx-hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
1931
1939
  @media(max-width:640px){
1932
1940
  .fx-hamburger{display:flex}
1933
- .fx-nav-links{display:none;width:100%;flex-direction:column;align-items:stretch;padding:.75rem 0;gap:.125rem;border-top:1px solid var(--aip-border);margin-top:.5rem}
1941
+ .fx-nav-links{
1942
+ display:none;width:100%;
1943
+ flex-direction:column;align-items:stretch;
1944
+ padding:8px 0;gap:1px;
1945
+ border-top:1px solid var(--ds-gray-alpha-400);margin-top:8px;
1946
+ }
1934
1947
  .fx-nav-links.open{display:flex}
1935
- .fx-nav-link{padding:.625rem .75rem}
1948
+ .fx-nav-link{padding:8px 10px}
1936
1949
  }
1937
1950
 
1938
1951
  /* ═══════════════════════════════════════════
1939
1952
  HERO
1940
1953
  ═══════════════════════════════════════════ */
1941
1954
  .fx-hero{
1942
- display:flex;
1943
- align-items:center;
1944
- justify-content:center;
1945
- min-height:calc(100vh - 60px);
1946
- padding:5rem 1.5rem 4rem;
1947
- position:relative;
1955
+ display:flex;align-items:center;justify-content:center;
1956
+ min-height:calc(100svh - 54px);
1957
+ padding:80px 24px 64px;
1958
+ position:relative;overflow:hidden;
1948
1959
  }
1949
1960
  .fx-hero-inner{
1950
- max-width:60rem;
1961
+ max-width:960px;width:100%;
1951
1962
  text-align:center;
1952
- display:flex;
1953
- flex-direction:column;
1954
- align-items:center;
1955
- gap:1.75rem;
1956
- position:relative;
1957
- z-index:1;
1958
- }
1959
- .fx-hero-split{
1960
- display:grid;
1961
- grid-template-columns:1fr 1fr;
1962
- gap:4rem;
1963
- align-items:center;
1964
- padding:4rem 2.5rem;
1965
- min-height:80vh;
1963
+ display:flex;flex-direction:column;align-items:center;
1964
+ gap:24px;
1965
+ position:relative;z-index:1;
1966
1966
  }
1967
- @media(max-width:768px){.fx-hero-split{grid-template-columns:1fr;padding:3rem 1.5rem;min-height:auto}}
1968
- .fx-hero-split .fx-hero-inner{text-align:left;align-items:flex-start;max-width:none}
1969
- .fx-hero-img{width:100%;border-radius:1.25rem;border:1px solid var(--aip-border)}
1970
- .fx-hero-minimal{min-height:52vh!important}
1971
- .fx-hero-tall{min-height:100vh!important}
1972
-
1973
- /* Landing variant — grid + glow */
1967
+ .fx-hero-minimal{min-height:50vh!important}
1968
+ .fx-hero-tall{min-height:100svh!important}
1969
+ /* Landing: Vercel-style grid + radial */
1974
1970
  .fx-hero-landing{overflow:hidden}
1971
+ .fx-hero-grid{
1972
+ position:absolute;inset:0;pointer-events:none;
1973
+ background-image:
1974
+ linear-gradient(var(--ds-gray-alpha-200) 1px,transparent 1px),
1975
+ linear-gradient(90deg,var(--ds-gray-alpha-200) 1px,transparent 1px);
1976
+ background-size:48px 48px;
1977
+ mask-image:radial-gradient(ellipse 80% 70% at 50% 0%,black 40%,transparent 100%);
1978
+ -webkit-mask-image:radial-gradient(ellipse 80% 70% at 50% 0%,black 40%,transparent 100%);
1979
+ }
1980
+ /* Vercel-style ambient glow */
1975
1981
  .fx-hero-landing::after{
1976
- content:'';
1977
- position:absolute;
1978
- width:900px;height:600px;
1982
+ content:'';position:absolute;
1983
+ width:80vw;height:40vh;max-width:900px;
1979
1984
  border-radius:50%;
1980
- background:radial-gradient(ellipse,rgba(var(--aip-accent-rgb),.14) 0%,transparent 65%);
1981
- left:50%;top:50%;
1982
- transform:translate(-50%,-55%);
1983
- pointer-events:none;
1984
- animation:fx-breathe 8s ease-in-out infinite;
1985
- }
1986
- @keyframes fx-breathe{0%,100%{transform:translate(-50%,-55%) scale(1)}50%{transform:translate(-50%,-55%) scale(1.12)}}
1987
- .fx-hero-grid{
1988
- position:absolute;inset:0;
1989
- background:
1990
- linear-gradient(var(--aip-grid-line) 1px,transparent 1px),
1991
- linear-gradient(90deg,var(--aip-grid-line) 1px,transparent 1px);
1992
- background-size:64px 64px;
1993
- mask-image:radial-gradient(ellipse 75% 65% at 50% 50%,black 20%,transparent);
1994
- -webkit-mask-image:radial-gradient(ellipse 75% 65% at 50% 50%,black 20%,transparent);
1985
+ background:radial-gradient(ellipse,rgba(var(--aip-accent-rgb),.08) 0%,transparent 60%);
1986
+ left:50%;top:0;transform:translate(-50%,-20%);
1995
1987
  pointer-events:none;
1988
+ animation:fx-glow 8s ease-in-out infinite;
1996
1989
  }
1997
-
1998
- /* Badge */
1999
- .fx-hero-badge{
2000
- display:inline-flex;align-items:center;gap:.5rem;
2001
- font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;font-weight:600;
2002
- padding:.3125rem .875rem;
2003
- border-radius:999px;
2004
- border:1px solid var(--aip-border-strong);
2005
- background:var(--aip-surface);
2006
- color:var(--aip-text-muted);
2007
- }
2008
- .fx-hero-badge-dot{
2009
- width:6px;height:6px;border-radius:50%;
2010
- background:var(--aip-accent);
2011
- animation:fx-pulse 2.5s ease infinite;
2012
- flex-shrink:0;
2013
- }
2014
- @keyframes fx-pulse{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(var(--aip-accent-rgb),.5)}60%{opacity:.4;box-shadow:0 0 0 6px rgba(var(--aip-accent-rgb),0)}}
2015
-
2016
- /* Typography */
1990
+ @keyframes fx-glow{0%,100%{opacity:.6}50%{opacity:1}}
1991
+ /* Vercel hero typography */
2017
1992
  .fx-title{
2018
- font-size:clamp(2.75rem,7.5vw,6.5rem);
2019
- font-weight:900;
2020
- letter-spacing:-.05em;
2021
- line-height:.92;
2022
- color:var(--aip-text);
1993
+ font-size:clamp(40px,6vw,80px);
1994
+ font-weight:700;
1995
+ letter-spacing:-.04em;
1996
+ line-height:1.05;
1997
+ color:var(--ds-gray-1000);
2023
1998
  }
2024
1999
  .fx-gradient-text{
2025
- background:linear-gradient(135deg,var(--aip-accent) 0%,var(--aip-accent-light) 50%,var(--aip-text) 100%);
2026
- -webkit-background-clip:text;
2027
- -webkit-text-fill-color:transparent;
2028
- background-clip:text;
2000
+ background:linear-gradient(90deg,var(--ds-gray-1000) 0%,var(--ds-gray-700) 100%);
2001
+ -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
2002
+ }
2003
+ /* Override with accent when set */
2004
+ .fx-gradient-text-accent{
2005
+ background:linear-gradient(135deg,var(--ds-gray-1000) 30%,rgba(var(--aip-accent-rgb),1) 100%);
2006
+ -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
2029
2007
  }
2030
2008
  .fx-sub{
2031
- font-size:clamp(1rem,2vw,1.1875rem);
2032
- line-height:1.75;
2033
- color:var(--aip-text-muted);
2034
- max-width:38rem;
2009
+ font-size:clamp(15px,2vw,18px);
2010
+ line-height:1.65;
2011
+ color:var(--ds-gray-900);
2012
+ max-width:540px;font-weight:400;
2035
2013
  }
2036
- .fx-cta{
2037
- display:inline-flex;align-items:center;gap:.5rem;
2038
- padding:.75rem 1.75rem;
2039
- border-radius:.625rem;
2040
- font-weight:700;
2041
- font-size:.9375rem;
2042
- letter-spacing:-.015em;
2043
- transition:transform .15s var(--aip-ease-out),box-shadow .15s,opacity .15s;
2044
- background:var(--aip-accent);
2045
- color:#fff;
2014
+ /* Vercel hero badge */
2015
+ .fx-hero-badge{
2016
+ display:inline-flex;align-items:center;gap:6px;
2017
+ height:28px;padding:0 10px;
2018
+ background:var(--ds-gray-alpha-100);
2019
+ border:1px solid var(--ds-gray-alpha-400);
2020
+ border-radius:var(--radius-full);
2021
+ font-size:12px;font-weight:500;color:var(--ds-gray-900);
2022
+ letter-spacing:.01em;
2046
2023
  }
2047
- .fx-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(var(--aip-accent-rgb),.35)}
2024
+ .fx-hero-badge-dot{
2025
+ width:5px;height:5px;border-radius:50%;
2026
+ background:var(--ds-green-700);
2027
+ animation:fx-pulse 3s ease infinite;flex-shrink:0;
2028
+ }
2029
+ @keyframes fx-pulse{0%,100%{opacity:1}50%{opacity:.4}}
2030
+ /* Vercel CTA button */
2031
+ .fx-cta{
2032
+ display:inline-flex;align-items:center;gap:6px;
2033
+ height:40px;padding:0 20px;
2034
+ background:var(--ds-gray-1000);
2035
+ color:var(--ds-background-100);
2036
+ font-size:14px;font-weight:500;letter-spacing:-.01em;
2037
+ border-radius:var(--radius-md);
2038
+ /* Only transform per Vercel guidelines */
2039
+ transition:opacity var(--duration-normal) var(--ease-in-out),transform var(--duration-normal) var(--ease-out);
2040
+ }
2041
+ .fx-cta:hover{opacity:.88;transform:translateY(-1px)}
2048
2042
  .fx-cta:active{transform:translateY(0)}
2049
2043
  .fx-cta-outline{
2050
2044
  background:transparent!important;
2051
- border:1px solid var(--aip-border-strong)!important;
2052
- color:var(--aip-text)!important;
2053
- box-shadow:none!important;
2045
+ border:1px solid var(--ds-gray-alpha-400)!important;
2046
+ color:var(--ds-gray-900)!important;
2054
2047
  }
2055
- .fx-cta-outline:hover{background:var(--aip-surface)!important;transform:translateY(-1px)!important}
2048
+ .fx-cta-outline:hover{background:var(--ds-gray-alpha-100)!important}
2049
+ /* Vercel hero split */
2050
+ .fx-hero-split{
2051
+ display:grid;grid-template-columns:1fr 1fr;gap:64px;
2052
+ align-items:center;padding:80px 40px;min-height:80vh;
2053
+ }
2054
+ @media(max-width:768px){.fx-hero-split{grid-template-columns:1fr;padding:48px 24px;min-height:auto}}
2055
+ .fx-hero-split .fx-hero-inner{text-align:left;align-items:flex-start;max-width:none}
2056
+ .fx-hero-img{width:100%;border-radius:var(--radius-lg);border:1px solid var(--ds-gray-alpha-400)}
2056
2057
 
2057
2058
  /* ═══════════════════════════════════════════
2058
- STATS BAR
2059
+ STATS BAR — Geist big number style
2059
2060
  ═══════════════════════════════════════════ */
2060
2061
  .fx-stats{
2061
2062
  display:grid;
2062
- grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
2063
- border-top:1px solid var(--aip-border);
2064
- border-bottom:1px solid var(--aip-border);
2063
+ grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
2064
+ border-top:1px solid var(--ds-gray-alpha-400);
2065
+ border-bottom:1px solid var(--ds-gray-alpha-400);
2065
2066
  }
2066
2067
  .fx-stat{
2067
- padding:2.25rem 1.5rem;
2068
- text-align:center;
2069
- border-right:1px solid var(--aip-border);
2070
- position:relative;
2071
- overflow:hidden;
2068
+ padding:40px 24px;text-align:center;
2069
+ border-right:1px solid var(--ds-gray-alpha-400);
2070
+ transition:background var(--duration-normal) var(--ease-in-out);
2072
2071
  }
2073
2072
  .fx-stat:last-child{border-right:none}
2074
- .fx-stat::before{
2075
- content:'';position:absolute;top:0;left:0;right:0;height:2px;
2076
- background:linear-gradient(90deg,transparent,var(--aip-accent),transparent);
2077
- opacity:0;transition:opacity .3s;
2078
- }
2079
- .fx-stat:hover::before{opacity:1}
2073
+ .fx-stat:hover{background:var(--ds-gray-alpha-100)}
2080
2074
  .fx-stat-val{
2081
- font-size:clamp(2rem,4vw,3rem);
2082
- font-weight:900;
2083
- letter-spacing:-.05em;
2084
- line-height:1;
2085
- color:var(--aip-accent);
2075
+ font-size:clamp(28px,4vw,40px);
2076
+ font-weight:700;letter-spacing:-.04em;line-height:1;
2077
+ color:var(--ds-gray-1000);
2086
2078
  font-variant-numeric:tabular-nums;
2087
2079
  }
2088
2080
  .fx-stat-lbl{
2089
- font-size:.7rem;
2090
- font-weight:700;
2091
- text-transform:uppercase;
2092
- letter-spacing:.1em;
2093
- color:var(--aip-text-muted);
2094
- margin-top:.5rem;
2095
- }
2096
- .fx-stat-vs{
2097
- font-size:.68rem;
2098
- color:var(--aip-text-dim);
2099
- margin-top:.3rem;
2100
- letter-spacing:.01em;
2081
+ font-size:12px;font-weight:500;
2082
+ text-transform:uppercase;letter-spacing:.08em;
2083
+ color:var(--ds-gray-700);
2084
+ margin-top:8px;
2085
+ }
2086
+ .fx-stat-vs{font-size:11px;color:var(--ds-gray-600);margin-top:4px;letter-spacing:.01em}
2087
+ @media(max-width:640px){
2088
+ .fx-stats{grid-template-columns:repeat(2,1fr)}
2089
+ .fx-stat{border-right:none;border-bottom:1px solid var(--ds-gray-alpha-400)}
2090
+ .fx-stat:nth-child(odd){border-right:1px solid var(--ds-gray-alpha-400)}
2091
+ .fx-stat:last-child,:nth-last-child(-n+2):nth-child(even){border-bottom:none}
2101
2092
  }
2102
- @media(max-width:640px){.fx-stats{grid-template-columns:repeat(2,1fr)}.fx-stat{border-right:none;border-bottom:1px solid var(--aip-border)}.fx-stat:last-child{border-bottom:none}}
2103
2093
 
2104
2094
  /* ═══════════════════════════════════════════
2105
2095
  SECTIONS
2106
2096
  ═══════════════════════════════════════════ */
2107
- .fx-sect{
2108
- padding:5rem 2.5rem;
2109
- position:relative;
2110
- }
2097
+ .fx-sect{padding:80px 40px;position:relative}
2098
+ @media(max-width:768px){.fx-sect{padding:64px 24px}}
2111
2099
  .fx-sect-title{
2112
- font-size:clamp(1.75rem,4vw,3.25rem);
2113
- font-weight:800;
2114
- letter-spacing:-.04em;
2115
- line-height:1.1;
2116
- margin-bottom:1rem;
2117
- text-align:center;
2100
+ font-size:clamp(24px,3.5vw,40px);
2101
+ font-weight:700;letter-spacing:-.03em;line-height:1.15;
2102
+ margin-bottom:12px;text-align:center;color:var(--ds-gray-1000);
2118
2103
  }
2119
2104
  .fx-sect-body{
2120
- font-size:1.0625rem;
2121
- line-height:1.75;
2122
- text-align:center;
2123
- color:var(--aip-text-muted);
2124
- max-width:44rem;
2125
- margin:0 auto;
2126
- }
2127
- .fx-sect-link{
2128
- font-size:.875rem;
2129
- font-weight:600;
2130
- color:var(--aip-accent);
2131
- display:inline-block;
2132
- margin-top:.75rem;
2105
+ font-size:15px;line-height:1.7;text-align:center;
2106
+ color:var(--ds-gray-900);max-width:480px;margin:0 auto;
2133
2107
  }
2134
- @media(max-width:768px){.fx-sect{padding:4rem 1.5rem}}
2108
+ .fx-sect-link{font-size:13px;font-weight:500;color:var(--ds-blue-700);display:inline-block;margin-top:12px}
2135
2109
 
2136
2110
  /* ═══════════════════════════════════════════
2137
- CARDS / GRID
2111
+ CARDS / GRID — Geist card style
2138
2112
  ═══════════════════════════════════════════ */
2139
- .fx-grid{display:grid;gap:.875rem;padding:0 2.5rem 5rem}
2113
+ .fx-grid{display:grid;gap:12px;padding:0 40px 80px}
2140
2114
  .fx-grid-2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
2141
2115
  .fx-grid-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
2142
2116
  .fx-grid-4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
2143
- @media(max-width:640px){.fx-grid{padding:0 1.25rem 3rem}.fx-grid-2,.fx-grid-3,.fx-grid-4{grid-template-columns:1fr}}
2144
-
2117
+ @media(max-width:640px){.fx-grid{padding:0 24px 48px}.fx-grid-2,.fx-grid-3,.fx-grid-4{grid-template-columns:1fr}}
2145
2118
  .fx-card{
2146
- border-radius:.875rem;
2147
- padding:1.625rem;
2148
- background:var(--aip-surface);
2149
- border:1px solid var(--aip-border);
2150
- transition:border-color .2s,transform .2s var(--aip-ease-out),box-shadow .2s;
2151
- position:relative;
2152
- overflow:hidden;
2153
- }
2154
- .fx-card::before{
2155
- content:'';
2156
- position:absolute;
2157
- inset:0;
2158
- background:linear-gradient(135deg,rgba(var(--aip-accent-rgb),.04),transparent 60%);
2159
- opacity:0;
2160
- transition:opacity .3s;
2119
+ border-radius:var(--radius-lg);
2120
+ padding:24px;
2121
+ background:var(--ds-background-200);
2122
+ border:1px solid var(--ds-gray-alpha-400);
2123
+ transition:border-color var(--duration-normal) var(--ease-in-out),transform var(--duration-slow) var(--ease-out);
2124
+ position:relative;overflow:hidden;
2161
2125
  }
2162
2126
  .fx-card:hover{
2163
- border-color:var(--aip-border-strong);
2164
- transform:translateY(-2px);
2165
- box-shadow:0 16px 48px rgba(0,0,0,.25);
2127
+ border-color:var(--ds-gray-alpha-700);
2128
+ transform:translateY(-1px);
2166
2129
  }
2167
- .fx-card:hover::before{opacity:1}
2168
- .fx-card-img{width:100%;border-radius:.625rem;height:180px;object-fit:cover;margin-bottom:1rem}
2130
+ .fx-card-img{width:100%;border-radius:var(--radius-md);height:180px;object-fit:cover;margin-bottom:16px;border:1px solid var(--ds-gray-alpha-400)}
2169
2131
  .fx-icon{
2170
- font-size:1.5rem;
2171
- margin-bottom:1rem;
2172
- width:48px;height:48px;
2132
+ font-size:20px;
2133
+ margin-bottom:16px;
2134
+ width:40px;height:40px;
2173
2135
  display:flex;align-items:center;justify-content:center;
2174
- border-radius:.75rem;
2175
- background:rgba(var(--aip-accent-rgb),.08);
2176
- border:1px solid rgba(var(--aip-accent-rgb),.15);
2136
+ border-radius:var(--radius-md);
2137
+ background:var(--ds-gray-alpha-200);
2138
+ border:1px solid var(--ds-gray-alpha-400);
2177
2139
  }
2178
2140
  .fx-card-title{
2179
- font-size:1rem;
2180
- font-weight:700;
2181
- letter-spacing:-.025em;
2182
- margin-bottom:.5rem;
2183
- color:var(--aip-text);
2184
- }
2185
- .fx-card-body{
2186
- font-size:.8375rem;
2187
- line-height:1.7;
2188
- color:var(--aip-text-muted);
2189
- }
2190
- .fx-card-link{
2191
- font-size:.8125rem;
2192
- font-weight:600;
2193
- color:var(--aip-accent);
2194
- display:inline-block;
2195
- margin-top:1rem;
2196
- opacity:.8;
2197
- transition:opacity .15s;
2198
- }
2199
- .fx-card-link:hover{opacity:1}
2200
- .fx-grid-feature .fx-card:hover{border-color:rgba(var(--aip-accent-rgb),.3)}
2141
+ font-size:14px;font-weight:600;letter-spacing:-.015em;
2142
+ margin-bottom:6px;color:var(--ds-gray-1000);line-height:1.4;
2143
+ }
2144
+ .fx-card-body{font-size:13px;line-height:1.65;color:var(--ds-gray-900)}
2145
+ .fx-card-link{font-size:13px;font-weight:500;color:var(--ds-blue-700);display:inline-block;margin-top:12px}
2146
+ .fx-grid-feature .fx-card:hover{border-color:rgba(var(--aip-accent-rgb),.4)}
2147
+ .fx-grid-feature .fx-icon{background:rgba(var(--aip-accent-rgb),.06);border-color:rgba(var(--aip-accent-rgb),.15)}
2201
2148
 
2202
2149
  /* ═══════════════════════════════════════════
2203
- FORMS
2150
+ FORMS — Geist input style
2204
2151
  ═══════════════════════════════════════════ */
2205
- .fx-form-wrap{padding:3rem 2.5rem;display:flex;justify-content:center}
2152
+ .fx-form-wrap{padding:48px 40px;display:flex;justify-content:center}
2206
2153
  .fx-form{
2207
- width:100%;max-width:28rem;
2208
- background:var(--aip-surface);
2209
- border:1px solid var(--aip-border);
2210
- border-radius:1rem;
2211
- padding:2.25rem;
2154
+ width:100%;max-width:400px;
2155
+ background:var(--ds-background-200);
2156
+ border:1px solid var(--ds-gray-alpha-400);
2157
+ border-radius:var(--radius-xl);padding:32px;
2212
2158
  }
2213
- .fx-field{margin-bottom:1.125rem}
2159
+ .fx-field{margin-bottom:16px}
2214
2160
  .fx-label{
2215
- display:block;
2216
- font-size:.8rem;
2217
- font-weight:600;
2218
- color:var(--aip-text-muted);
2219
- margin-bottom:.4375rem;
2220
- letter-spacing:.02em;
2161
+ display:block;font-size:13px;font-weight:500;
2162
+ color:var(--ds-gray-1000);margin-bottom:6px;letter-spacing:-.01em;
2221
2163
  }
2222
2164
  .fx-input{
2223
- width:100%;
2224
- padding:.6875rem 1rem;
2225
- background:var(--aip-bg);
2226
- border:1px solid var(--aip-border);
2227
- border-radius:.5rem;
2228
- color:var(--aip-text);
2229
- font-size:.9375rem;
2230
- outline:none;
2231
- transition:border-color .15s,box-shadow .15s;
2232
- -webkit-appearance:none;
2233
- }
2165
+ width:100%;height:40px;padding:0 12px;
2166
+ background:var(--ds-background-100);
2167
+ border:1px solid var(--ds-gray-alpha-400);
2168
+ border-radius:var(--radius-md);
2169
+ color:var(--ds-gray-1000);font-size:14px;
2170
+ outline:none;-webkit-appearance:none;
2171
+ transition:border-color var(--duration-normal) var(--ease-in-out),box-shadow var(--duration-normal) var(--ease-in-out);
2172
+ }
2173
+ .fx-input:hover{border-color:var(--ds-gray-alpha-700)}
2234
2174
  .fx-input:focus{
2235
- border-color:var(--aip-accent);
2236
- box-shadow:0 0 0 3px rgba(var(--aip-accent-rgb),.15);
2175
+ border-color:var(--ds-blue-700);
2176
+ box-shadow:0 0 0 3px rgba(var(--ds-blue-rgb),.15);
2237
2177
  }
2238
- .fx-input::placeholder{color:var(--aip-text-dim)}
2239
- select.fx-input{cursor:pointer}
2178
+ .fx-input::placeholder{color:var(--ds-gray-600)}
2179
+ textarea.fx-input{height:auto;padding:10px 12px;resize:vertical;min-height:80px;line-height:1.5}
2240
2180
  .fx-btn{
2241
- width:100%;
2242
- padding:.75rem 1.5rem;
2243
- border:none;
2244
- border-radius:.5rem;
2245
- background:var(--aip-accent);
2246
- color:#fff;
2247
- font-size:.9375rem;
2248
- font-weight:700;
2249
- cursor:pointer;
2250
- margin-top:.375rem;
2251
- transition:transform .15s var(--aip-ease-out),opacity .15s,box-shadow .15s;
2252
- letter-spacing:-.015em;
2253
- }
2254
- .fx-btn:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(var(--aip-accent-rgb),.3)}
2181
+ width:100%;height:40px;padding:0 16px;
2182
+ background:var(--ds-gray-1000);color:var(--ds-background-100);
2183
+ font-size:14px;font-weight:500;letter-spacing:-.01em;
2184
+ border-radius:var(--radius-md);
2185
+ margin-top:4px;
2186
+ transition:opacity var(--duration-normal) var(--ease-in-out),transform var(--duration-normal) var(--ease-out);
2187
+ }
2188
+ .fx-btn:hover{opacity:.88;transform:translateY(-1px)}
2255
2189
  .fx-btn:active{transform:translateY(0)}
2256
- .fx-btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
2257
- .fx-btn-wrap{padding:0 2.5rem 1.5rem}
2258
- .fx-standalone-btn{width:auto;padding:.625rem 1.5rem;margin-top:0}
2259
- .fx-form-msg{font-size:.8125rem;padding:.5rem 0;min-height:1.5rem;text-align:center;font-weight:500}
2260
- .fx-form-err{color:#f87171}.fx-form-ok{color:#4ade80}
2190
+ .fx-btn:disabled{opacity:.4;cursor:not-allowed;transform:none}
2191
+ .fx-btn-wrap{padding:0 40px 24px}
2192
+ .fx-standalone-btn{width:auto;padding:0 20px;margin-top:0}
2193
+ .fx-form-msg{font-size:13px;padding:6px 0;min-height:24px;text-align:center;font-weight:500}
2194
+ .fx-form-err{color:var(--ds-red-700)}.fx-form-ok{color:var(--ds-green-700)}
2261
2195
 
2262
2196
  /* ═══════════════════════════════════════════
2263
- TABLE
2197
+ TABLE — Geist table style
2264
2198
  ═══════════════════════════════════════════ */
2265
- .fx-table-wrap{overflow-x:auto;padding:0 2.5rem 4rem}
2266
- .fx-table{width:100%;border-collapse:collapse;font-size:.875rem}
2199
+ .fx-table-wrap{overflow-x:auto;padding:0 40px 64px}
2200
+ .fx-table{width:100%;border-collapse:collapse;font-size:13px}
2267
2201
  .fx-th{
2268
- text-align:left;
2269
- padding:.75rem 1rem;
2270
- font-size:.7rem;
2271
- font-weight:700;
2272
- text-transform:uppercase;
2273
- letter-spacing:.08em;
2274
- color:var(--aip-text-dim);
2275
- border-bottom:1px solid var(--aip-border);
2276
- background:var(--aip-surface);
2277
- white-space:nowrap;
2202
+ text-align:left;padding:0 12px 10px;
2203
+ font-size:11px;font-weight:600;text-transform:uppercase;
2204
+ letter-spacing:.06em;color:var(--ds-gray-700);
2205
+ border-bottom:1px solid var(--ds-gray-alpha-400);white-space:nowrap;
2278
2206
  }
2279
2207
  .fx-th-actions{opacity:.5}
2280
- .fx-tr{border-bottom:1px solid var(--aip-border);transition:background .1s}
2208
+ .fx-tr{border-bottom:1px solid var(--ds-gray-alpha-200);transition:background var(--duration-fast) var(--ease-in-out)}
2281
2209
  .fx-tr:last-child{border-bottom:none}
2282
- .fx-tr:hover{background:var(--aip-surface-hover)}
2283
- .fx-td{padding:.75rem 1rem;color:var(--aip-text-muted);vertical-align:middle}
2284
- .fx-td:first-child{color:var(--aip-text);font-weight:500}
2285
- .fx-td-empty{padding:3rem 1rem;text-align:center;color:var(--aip-text-dim);font-size:.875rem}
2286
- .fx-td-actions{white-space:nowrap;padding:.5rem .75rem!important}
2210
+ .fx-tr:hover{background:var(--ds-gray-alpha-100)}
2211
+ .fx-td{padding:12px;color:var(--ds-gray-900);vertical-align:middle}
2212
+ .fx-td:first-child{color:var(--ds-gray-1000);font-weight:500}
2213
+ .fx-td-empty{padding:48px 12px;text-align:center;color:var(--ds-gray-600);font-size:13px}
2214
+ .fx-td-actions{white-space:nowrap;padding:6px 12px!important}
2287
2215
  .fx-action-btn{
2288
- border:none;cursor:pointer;
2289
- font-size:.75rem;font-weight:600;
2290
- padding:.3rem .75rem;border-radius:.375rem;
2291
- margin-right:.375rem;font-family:inherit;
2292
- transition:opacity .15s,transform .1s;
2216
+ height:28px;padding:0 10px;border-radius:var(--radius-md);
2217
+ font-size:12px;font-weight:500;margin-right:4px;
2218
+ transition:background var(--duration-normal) var(--ease-in-out);
2293
2219
  }
2294
- .fx-action-btn:hover{opacity:.85;transform:translateY(-1px)}
2295
- .fx-edit-btn{background:rgba(59,130,246,.15);color:#60a5fa;border:1px solid rgba(59,130,246,.2)}
2296
- .fx-delete-btn{background:rgba(239,68,68,.12);color:#f87171;border:1px solid rgba(239,68,68,.2)}
2220
+ .fx-edit-btn{background:var(--ds-blue-100);color:var(--ds-blue-700)}
2221
+ .fx-edit-btn:hover{background:var(--ds-blue-200)}
2222
+ .fx-delete-btn{background:var(--ds-red-100);color:var(--ds-red-700)}
2223
+ .fx-delete-btn:hover{background:var(--ds-red-200)}
2297
2224
 
2298
2225
  /* ═══════════════════════════════════════════
2299
- PRICING
2226
+ PRICING — Geist pricing style
2300
2227
  ═══════════════════════════════════════════ */
2301
2228
  .fx-pricing{
2302
- display:grid;
2303
- grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
2304
- gap:1.25rem;
2305
- padding:2rem 2.5rem 5rem;
2306
- align-items:start;
2229
+ display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
2230
+ gap:16px;padding:24px 40px 80px;align-items:start;
2307
2231
  }
2308
2232
  .fx-pricing-card{
2309
- border-radius:1rem;
2310
- padding:2rem;
2311
- background:var(--aip-surface);
2312
- border:1px solid var(--aip-border);
2233
+ border-radius:var(--radius-xl);padding:32px;
2234
+ background:var(--ds-background-200);
2235
+ border:1px solid var(--ds-gray-alpha-400);
2313
2236
  position:relative;
2314
- transition:border-color .2s,transform .2s var(--aip-ease-out);
2315
- }
2316
- .fx-pricing-featured{
2317
- border-color:var(--aip-accent)!important;
2318
- transform:scale(1.02);
2319
- box-shadow:0 0 0 1px var(--aip-accent),0 24px 48px rgba(var(--aip-accent-rgb),.15);
2237
+ transition:border-color var(--duration-normal) var(--ease-in-out);
2320
2238
  }
2239
+ .fx-pricing-featured{border-color:var(--ds-gray-alpha-700)!important}
2321
2240
  .fx-pricing-badge{
2322
- position:absolute;top:-13px;left:50%;transform:translateX(-50%);
2323
- background:var(--aip-accent);color:#fff;
2324
- font-size:.65rem;font-weight:700;
2325
- padding:.25rem .875rem;border-radius:999px;white-space:nowrap;letter-spacing:.06em;
2326
- }
2327
- .fx-pricing-name{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--aip-text-muted);margin-bottom:.75rem}
2328
- .fx-pricing-price{font-size:3.25rem;font-weight:900;letter-spacing:-.06em;line-height:1;margin-bottom:.75rem;color:var(--aip-text)}
2329
- .fx-pricing-price-sm{font-size:2rem}
2330
- .fx-pricing-desc{font-size:.875rem;line-height:1.65;margin-bottom:1.75rem;color:var(--aip-text-muted)}
2331
- .fx-pricing-cta{display:block;text-align:center;padding:.75rem;border-radius:.625rem;font-weight:700;font-size:.9rem;transition:opacity .15s,transform .1s;background:var(--aip-accent);color:#fff}
2332
- .fx-pricing-cta:hover{opacity:.88;transform:translateY(-1px)}
2333
- .fx-pricing-compact{
2334
- background:var(--aip-surface);border:1px solid var(--aip-border);
2335
- border-radius:.875rem;padding:1.5rem;
2336
- }
2241
+ position:absolute;top:-12px;left:50%;transform:translateX(-50%);
2242
+ background:var(--ds-gray-1000);color:var(--ds-background-100);
2243
+ font-size:11px;font-weight:600;padding:3px 10px;
2244
+ border-radius:var(--radius-full);white-space:nowrap;letter-spacing:.04em;
2245
+ }
2246
+ .fx-pricing-name{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--ds-gray-700);margin-bottom:12px}
2247
+ .fx-pricing-price{font-size:40px;font-weight:700;letter-spacing:-.05em;line-height:1;margin-bottom:8px;color:var(--ds-gray-1000);font-variant-numeric:tabular-nums}
2248
+ .fx-pricing-price-sm{font-size:28px}
2249
+ .fx-pricing-desc{font-size:13px;line-height:1.6;margin-bottom:24px;color:var(--ds-gray-900)}
2250
+ .fx-pricing-cta{
2251
+ display:block;text-align:center;height:36px;line-height:36px;
2252
+ border-radius:var(--radius-md);font-size:13px;font-weight:500;
2253
+ background:var(--ds-gray-1000);color:var(--ds-background-100);
2254
+ transition:opacity var(--duration-normal) var(--ease-in-out);
2255
+ }
2256
+ .fx-pricing-cta:hover{opacity:.85}
2337
2257
 
2338
2258
  /* ═══════════════════════════════════════════
2339
- FAQ
2259
+ FAQ — Geist collapse style
2340
2260
  ═══════════════════════════════════════════ */
2341
- .fx-faq-wrap{padding:0 2.5rem 4rem}
2342
- .fx-faq{max-width:48rem;margin:0 auto}
2261
+ .fx-faq-wrap{padding:0 40px 64px}
2262
+ .fx-faq{max-width:640px;margin:0 auto}
2343
2263
  .fx-faq-item{
2344
- border:1px solid var(--aip-border);
2345
- background:var(--aip-surface);
2346
- border-radius:.75rem;
2347
- margin-bottom:.5rem;
2264
+ border-bottom:1px solid var(--ds-gray-alpha-400);
2348
2265
  cursor:pointer;
2349
- overflow:hidden;
2350
- transition:border-color .2s;
2351
2266
  }
2352
- .fx-faq-item:hover{border-color:var(--aip-border-strong)}
2267
+ .fx-faq-item:first-child{border-top:1px solid var(--ds-gray-alpha-400)}
2353
2268
  .fx-faq-q{
2354
2269
  display:flex;justify-content:space-between;align-items:center;
2355
- padding:1rem 1.25rem;
2356
- font-size:.9375rem;font-weight:600;
2357
- color:var(--aip-text);
2270
+ padding:16px 0;
2271
+ font-size:14px;font-weight:500;color:var(--ds-gray-1000);
2272
+ user-select:none;
2273
+ }
2274
+ .fx-faq-arrow{
2275
+ width:16px;height:16px;color:var(--ds-gray-700);flex-shrink:0;
2276
+ transition:transform var(--duration-normal) var(--ease-in-out);
2277
+ }
2278
+ .fx-faq-arrow::after{
2279
+ content:'↓';font-size:12px;display:block;text-align:center;line-height:16px;
2358
2280
  }
2359
- .fx-faq-arrow{transition:transform .25s var(--aip-ease-out);color:var(--aip-text-dim);font-size:.75rem}
2360
2281
  .fx-faq-item.open .fx-faq-arrow{transform:rotate(180deg)}
2361
2282
  .fx-faq-a{
2362
2283
  max-height:0;overflow:hidden;
2363
- font-size:.875rem;line-height:1.7;
2364
- color:var(--aip-text-muted);
2365
- transition:max-height .3s var(--aip-ease-out),padding .3s;
2366
- padding:0 1.25rem;
2284
+ font-size:14px;line-height:1.65;color:var(--ds-gray-900);
2285
+ transition:max-height var(--duration-slow) var(--ease-out),padding var(--duration-slow) var(--ease-out);
2286
+ padding:0;
2367
2287
  }
2368
- .fx-faq-item.open .fx-faq-a{max-height:300px;padding:.75rem 1.25rem 1.25rem}
2288
+ .fx-faq-item.open .fx-faq-a{max-height:300px;padding:0 0 16px}
2369
2289
 
2370
2290
  /* ═══════════════════════════════════════════
2371
- CODE WINDOW
2291
+ CODE WINDOW — Geist snippet style
2372
2292
  ═══════════════════════════════════════════ */
2373
2293
  .fx-code-window{
2374
- border-radius:.875rem;
2375
- overflow:hidden;
2376
- border:1px solid var(--aip-border);
2377
- background:var(--aip-surface);
2378
- margin:0 2.5rem 2rem;
2379
- position:relative;
2294
+ border-radius:var(--radius-lg);overflow:hidden;
2295
+ border:1px solid var(--ds-gray-alpha-400);
2296
+ background:var(--ds-background-200);
2297
+ margin:0 40px 24px;
2380
2298
  }
2381
2299
  .fx-code-bar{
2382
- display:flex;align-items:center;gap:.75rem;
2383
- padding:.6875rem 1rem;
2384
- background:var(--aip-surface-hover);
2385
- border-bottom:1px solid var(--aip-border);
2300
+ display:flex;align-items:center;gap:8px;
2301
+ padding:10px 16px;
2302
+ background:var(--ds-background-200);
2303
+ border-bottom:1px solid var(--ds-gray-alpha-400);
2386
2304
  }
2387
- .fx-dots{display:flex;gap:.375rem}
2388
- .fx-dots span{width:11px;height:11px;border-radius:50%}
2305
+ .fx-dots{display:flex;gap:5px}
2306
+ .fx-dots span{width:10px;height:10px;border-radius:50%}
2389
2307
  .fx-dots span:nth-child(1){background:#ff5f57}
2390
2308
  .fx-dots span:nth-child(2){background:#febc2e}
2391
2309
  .fx-dots span:nth-child(3){background:#28c840}
2392
- .fx-code-lang{font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--aip-text-dim);margin-left:.25rem;font-family:var(--aip-font-mono)}
2310
+ .fx-code-lang{
2311
+ font-size:11px;letter-spacing:.06em;text-transform:uppercase;
2312
+ color:var(--ds-gray-700);margin-left:4px;font-family:var(--geist-mono);font-weight:500;
2313
+ }
2393
2314
  .fx-code-copy{
2394
- margin-left:auto;
2395
- font-family:var(--aip-font-mono);font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;
2396
- background:none;border:1px solid var(--aip-border-strong);
2397
- color:var(--aip-text-dim);
2398
- padding:.2rem .625rem;border-radius:.3rem;cursor:pointer;
2399
- transition:all .15s;
2400
- }
2401
- .fx-code-copy:hover{border-color:var(--aip-accent);color:var(--aip-accent)}
2402
- .fx-code-body{padding:1.375rem 1.5rem;overflow-x:auto}
2403
- .fx-code-line{font-family:var(--aip-font-mono);font-size:.8rem;line-height:1.8;color:var(--aip-text-muted);white-space:pre}
2404
- .fx-kw{color:#c792ea}.fx-st{color:#c3e88d}.fx-fn{color:#82aaff}.fx-nb{color:#f78c6c}
2405
- .fx-op{color:var(--aip-accent)}.fx-comment{color:var(--aip-text-dim);font-style:italic}
2315
+ margin-left:auto;height:24px;padding:0 8px;
2316
+ font-family:var(--geist-mono);font-size:11px;letter-spacing:.04em;
2317
+ background:var(--ds-gray-alpha-200);
2318
+ border:1px solid var(--ds-gray-alpha-400);
2319
+ color:var(--ds-gray-900);border-radius:var(--radius-sm);cursor:pointer;
2320
+ transition:background var(--duration-normal),color var(--duration-normal);
2321
+ }
2322
+ .fx-code-copy:hover{background:var(--ds-gray-alpha-400);color:var(--ds-gray-1000)}
2323
+ .fx-code-body{padding:20px 24px;overflow-x:auto}
2324
+ .fx-code-line{font-family:var(--geist-mono);font-size:13px;line-height:1.75;color:var(--ds-gray-800);white-space:pre}
2325
+ .fx-kw{color:#c792ea}.fx-st{color:#a6e3a1}.fx-fn{color:#89b4fa}
2326
+ .fx-nb{color:#fab387}.fx-op{color:rgba(var(--aip-accent-rgb),1)}.fx-comment{color:var(--ds-gray-600);font-style:italic}
2406
2327
 
2407
2328
  /* ═══════════════════════════════════════════
2408
2329
  INSTALL BLOCK
2409
2330
  ═══════════════════════════════════════════ */
2410
2331
  .fx-install-wrap{
2411
- border-radius:.875rem;overflow:hidden;
2412
- border:1px solid var(--aip-border);
2413
- background:var(--aip-surface);
2414
- margin:0 2.5rem 2rem;max-width:540px;
2332
+ border-radius:var(--radius-lg);overflow:hidden;
2333
+ border:1px solid var(--ds-gray-alpha-400);
2334
+ background:var(--ds-background-200);
2335
+ margin:0 40px 24px;max-width:480px;
2415
2336
  }
2416
- .fx-install-body{padding:1.375rem 1.5rem}
2417
- .fx-install-line{display:flex;gap:.875rem;padding:.25rem 0;font-family:var(--aip-font-mono);font-size:.8rem;line-height:1.75}
2418
- .fx-install-prompt{color:var(--aip-accent);flex-shrink:0;font-weight:700}
2419
- .fx-install-cmd{color:var(--aip-text)}
2420
- .fx-install-comment{font-family:var(--aip-font-mono);font-size:.72rem;color:var(--aip-text-dim);padding:.25rem 0;font-style:italic}
2337
+ .fx-install-body{padding:20px 24px}
2338
+ .fx-install-line{display:flex;gap:10px;padding:3px 0;font-family:var(--geist-mono);font-size:13px;line-height:1.6}
2339
+ .fx-install-prompt{color:rgba(var(--aip-accent-rgb),1);flex-shrink:0;font-weight:700}
2340
+ .fx-install-cmd{color:var(--ds-gray-1000)}
2341
+ .fx-install-comment{font-family:var(--geist-mono);font-size:12px;color:var(--ds-gray-700);padding:3px 0;font-style:italic}
2421
2342
 
2422
2343
  /* ═══════════════════════════════════════════
2423
2344
  BENCHMARK CARDS
2424
2345
  ═══════════════════════════════════════════ */
2425
2346
  .fx-benchmark{
2426
- display:grid;
2427
- grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
2428
- gap:1rem;padding:0 2.5rem 4rem;
2347
+ display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
2348
+ gap:12px;padding:0 40px 64px;
2429
2349
  }
2430
2350
  .fx-bench-card{
2431
- border-radius:1rem;padding:1.5rem;
2432
- background:var(--aip-surface);
2433
- border:1px solid var(--aip-border);
2351
+ border-radius:var(--radius-lg);padding:24px;
2352
+ background:var(--ds-background-200);
2353
+ border:1px solid var(--ds-gray-alpha-400);
2434
2354
  position:relative;overflow:hidden;
2435
- transition:border-color .2s,transform .15s;
2355
+ transition:border-color var(--duration-normal) var(--ease-in-out);
2436
2356
  }
2357
+ .fx-bench-card:hover{border-color:var(--ds-gray-alpha-700)}
2358
+ /* Subtle top accent line */
2437
2359
  .fx-bench-card::after{
2438
- content:'';position:absolute;top:0;left:0;right:0;height:2px;
2439
- background:linear-gradient(90deg,transparent,var(--aip-accent),transparent);
2360
+ content:'';position:absolute;top:0;left:0;right:0;height:1px;
2361
+ background:linear-gradient(90deg,transparent,rgba(var(--aip-accent-rgb),.6),transparent);
2440
2362
  }
2441
- .fx-bench-card:hover{border-color:var(--aip-border-strong);transform:translateY(-2px)}
2442
- .fx-bench-label{font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:var(--aip-text-dim);margin-bottom:.625rem;font-weight:600}
2443
- .fx-bench-num{font-size:clamp(2rem,5vw,3rem);font-weight:900;letter-spacing:-.05em;line-height:1;color:var(--aip-accent)}
2444
- .fx-bench-vs{font-size:.7rem;color:var(--aip-text-dim);margin-top:.375rem;font-family:var(--aip-font-mono)}
2445
- .fx-bench-bar{margin-top:1.125rem;height:4px;background:rgba(var(--aip-accent-rgb),.1);border-radius:2px;overflow:hidden}
2446
- .fx-bench-fill{height:100%;border-radius:2px;background:var(--aip-accent);transition:width 1.5s cubic-bezier(.4,0,.2,1)}
2363
+ .fx-bench-label{
2364
+ font-size:11px;letter-spacing:.06em;text-transform:uppercase;
2365
+ color:var(--ds-gray-700);margin-bottom:10px;font-weight:600;
2366
+ }
2367
+ .fx-bench-num{
2368
+ font-size:clamp(24px,4vw,36px);font-weight:700;
2369
+ letter-spacing:-.04em;line-height:1;
2370
+ color:var(--ds-gray-1000);font-variant-numeric:tabular-nums;
2371
+ }
2372
+ .fx-bench-vs{font-size:12px;color:var(--ds-gray-700);margin-top:6px;font-family:var(--geist-mono)}
2373
+ .fx-bench-bar{margin-top:16px;height:3px;background:var(--ds-gray-alpha-200);border-radius:999px;overflow:hidden}
2374
+ .fx-bench-fill{height:100%;border-radius:999px;background:rgba(var(--aip-accent-rgb),1);transition:width 1.2s var(--ease-out)}
2447
2375
 
2448
2376
  /* ═══════════════════════════════════════════
2449
- MARQUEE
2377
+ MARQUEE — smooth infinite scroll
2450
2378
  ═══════════════════════════════════════════ */
2451
2379
  .fx-marquee{
2452
- overflow:hidden;
2453
- padding:1.375rem 0;
2454
- border-top:1px solid var(--aip-border);
2455
- border-bottom:1px solid var(--aip-border);
2456
- -webkit-mask:linear-gradient(90deg,transparent,black 8%,black 92%,transparent);
2457
- mask:linear-gradient(90deg,transparent,black 8%,black 92%,transparent);
2458
- }
2459
- .fx-marquee-track{display:flex;width:max-content;animation:fx-marquee 28s linear infinite}
2380
+ overflow:hidden;padding:20px 0;
2381
+ border-top:1px solid var(--ds-gray-alpha-400);
2382
+ border-bottom:1px solid var(--ds-gray-alpha-400);
2383
+ -webkit-mask:linear-gradient(90deg,transparent,black 10%,black 90%,transparent);
2384
+ mask:linear-gradient(90deg,transparent,black 10%,black 90%,transparent);
2385
+ }
2386
+ .fx-marquee-track{display:flex;width:max-content;animation:fx-marquee 30s linear infinite}
2460
2387
  .fx-marquee:hover .fx-marquee-track{animation-play-state:paused}
2461
2388
  @keyframes fx-marquee{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}
2462
- .fx-marquee-item{font-size:.875rem;font-weight:600;color:var(--aip-text-dim);white-space:nowrap;padding:0 1.75rem;transition:color .2s}
2463
- .fx-marquee-item:hover{color:var(--aip-text-muted)}
2464
- .fx-marquee-sep{color:var(--aip-border-strong);padding:0 .25rem}
2389
+ .fx-marquee-item{
2390
+ font-size:13px;font-weight:500;
2391
+ color:var(--ds-gray-700);
2392
+ white-space:nowrap;padding:0 24px;
2393
+ transition:color var(--duration-normal);
2394
+ }
2395
+ .fx-marquee-item:hover{color:var(--ds-gray-1000)}
2396
+ .fx-marquee-sep{color:var(--ds-gray-alpha-400)}
2465
2397
 
2466
2398
  /* ═══════════════════════════════════════════
2467
2399
  CTA SECTION
2468
2400
  ═══════════════════════════════════════════ */
2469
2401
  .fx-cta-section{
2470
- position:relative;padding:7rem 2.5rem;text-align:center;overflow:hidden;
2471
- border-top:1px solid var(--aip-border);
2402
+ position:relative;padding:120px 40px;text-align:center;overflow:hidden;
2403
+ border-top:1px solid var(--ds-gray-alpha-400);
2472
2404
  }
2473
2405
  .fx-cta-glow{
2474
- position:absolute;width:700px;height:400px;border-radius:50%;
2475
- background:radial-gradient(ellipse,rgba(var(--aip-accent-rgb),.12),transparent 65%);
2476
- left:50%;top:50%;transform:translate(-50%,-50%);
2477
- pointer-events:none;
2406
+ position:absolute;
2407
+ width:700px;height:350px;border-radius:50%;
2408
+ background:radial-gradient(ellipse,rgba(var(--aip-accent-rgb),.06),transparent 60%);
2409
+ left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;
2478
2410
  }
2479
- .fx-cta-inner{position:relative;z-index:1;max-width:44rem;margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:1.75rem}
2480
- .fx-cta-title{font-size:clamp(2rem,5vw,4rem);font-weight:900;letter-spacing:-.05em;line-height:1.05}
2481
- .fx-cta-sub{font-size:1.0625rem;line-height:1.7;color:var(--aip-text-muted);max-width:36rem}
2482
- .fx-cta-actions{display:flex;gap:1rem;flex-wrap:wrap;justify-content:center}
2411
+ .fx-cta-inner{position:relative;z-index:1;max-width:560px;margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:24px}
2412
+ .fx-cta-title{
2413
+ font-size:clamp(28px,4vw,48px);font-weight:700;
2414
+ letter-spacing:-.04em;line-height:1.1;color:var(--ds-gray-1000);
2415
+ }
2416
+ .fx-cta-sub{font-size:15px;line-height:1.65;color:var(--ds-gray-900);max-width:440px}
2417
+ .fx-cta-actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
2483
2418
 
2484
2419
  /* ═══════════════════════════════════════════
2485
- STEPS
2420
+ STEPS — numbered with connector
2486
2421
  ═══════════════════════════════════════════ */
2487
2422
  .fx-steps{
2488
- display:grid;
2489
- grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
2490
- gap:2.5rem;
2491
- padding:1.5rem 2.5rem 5rem;
2492
- position:relative;
2423
+ display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
2424
+ gap:40px;padding:16px 40px 80px;position:relative;
2493
2425
  }
2494
2426
  .fx-steps::before{
2495
- content:'';position:absolute;top:2.75rem;
2496
- left:calc(2.5rem + 2rem);right:calc(2.5rem + 2rem);
2497
- height:1px;
2498
- background:linear-gradient(90deg,transparent,var(--aip-border-strong),transparent);
2499
- pointer-events:none;
2427
+ content:'';position:absolute;top:36px;
2428
+ left:calc(40px + 20px);right:calc(40px + 20px);
2429
+ height:1px;background:var(--ds-gray-alpha-400);pointer-events:none;
2500
2430
  }
2501
- @media(max-width:640px){.fx-steps::before{display:none}.fx-steps{gap:2rem;padding:1rem 1.5rem 3rem}}
2502
- .fx-step{display:flex;flex-direction:column;align-items:flex-start;gap:.875rem}
2431
+ @media(max-width:640px){.fx-steps::before{display:none}.fx-steps{gap:32px;padding:0 24px 48px}}
2432
+ .fx-step{display:flex;flex-direction:column;align-items:flex-start;gap:16px}
2503
2433
  .fx-step-num{
2504
- width:44px;height:44px;border-radius:50%;
2505
- background:var(--aip-accent);color:#fff;
2506
- font-weight:900;font-size:1rem;
2434
+ width:36px;height:36px;border-radius:50%;
2435
+ background:var(--ds-gray-alpha-200);
2436
+ border:1px solid var(--ds-gray-alpha-400);
2437
+ color:var(--ds-gray-1000);
2438
+ font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;
2507
2439
  display:flex;align-items:center;justify-content:center;
2508
2440
  flex-shrink:0;position:relative;z-index:1;
2509
- box-shadow:0 0 0 4px rgba(var(--aip-accent-rgb),.15),0 0 0 8px rgba(var(--aip-accent-rgb),.05);
2510
2441
  }
2511
- .fx-step-title{font-size:.9375rem;font-weight:700;letter-spacing:-.02em;color:var(--aip-text)}
2512
- .fx-step-desc{font-size:.8375rem;line-height:1.65;color:var(--aip-text-muted)}
2442
+ .fx-step-title{font-size:14px;font-weight:600;letter-spacing:-.015em;color:var(--ds-gray-1000)}
2443
+ .fx-step-desc{font-size:13px;line-height:1.6;color:var(--ds-gray-900)}
2513
2444
 
2514
2445
  /* ═══════════════════════════════════════════
2515
- COMPARE
2446
+ COMPARE — visual feature table
2516
2447
  ═══════════════════════════════════════════ */
2517
- .fx-compare{max-width:600px;margin:0 auto 4rem;padding:0 2.5rem;border-radius:1rem;overflow:hidden;border:1px solid var(--aip-border)}
2448
+ .fx-compare{
2449
+ max-width:560px;margin:0 auto 64px;padding:0 40px;
2450
+ border-radius:var(--radius-xl);overflow:hidden;
2451
+ border:1px solid var(--ds-gray-alpha-400);
2452
+ }
2518
2453
  .fx-compare-header{
2519
2454
  display:grid;grid-template-columns:1fr 1fr 1fr;
2520
- padding:.75rem 1.125rem;
2521
- background:var(--aip-surface-hover);
2522
- font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--aip-text-dim);
2523
- border-bottom:1px solid var(--aip-border);
2455
+ padding:12px 16px;
2456
+ background:var(--ds-background-200);
2457
+ font-size:11px;font-weight:700;text-transform:uppercase;
2458
+ letter-spacing:.08em;color:var(--ds-gray-700);
2459
+ border-bottom:1px solid var(--ds-gray-alpha-400);
2524
2460
  }
2525
2461
  .fx-compare-row{
2526
2462
  display:grid;grid-template-columns:1fr 1fr 1fr;
2527
- padding:.75rem 1.125rem;
2528
- border-bottom:1px solid var(--aip-border);
2529
- transition:background .1s;
2463
+ padding:12px 16px;border-bottom:1px solid var(--ds-gray-alpha-200);
2464
+ transition:background var(--duration-fast);
2530
2465
  }
2531
2466
  .fx-compare-row:last-child{border-bottom:none}
2532
- .fx-compare-row:hover{background:var(--aip-surface-hover)}
2533
- .fx-compare-feature{font-size:.875rem;color:var(--aip-text-muted)}
2534
- .fx-compare-col-a{text-align:center;font-size:.875rem;font-weight:600;color:#4ade80}
2535
- .fx-compare-col-b{text-align:center;font-size:.875rem;color:var(--aip-text-dim)}
2467
+ .fx-compare-row:hover{background:var(--ds-gray-alpha-100)}
2468
+ .fx-compare-feature{font-size:13px;color:var(--ds-gray-900)}
2469
+ .fx-compare-col-a{text-align:center;font-size:14px;font-weight:600;color:var(--ds-green-700)}
2470
+ .fx-compare-col-b{text-align:center;font-size:14px;color:var(--ds-gray-600)}
2536
2471
 
2537
2472
  /* ═══════════════════════════════════════════
2538
2473
  VIDEO
2539
2474
  ═══════════════════════════════════════════ */
2540
- .fx-video-wrap{padding:0 2.5rem 3rem}
2541
- .fx-video-yt{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:1rem;border:1px solid var(--aip-border);background:var(--aip-surface)}
2475
+ .fx-video-wrap{padding:0 40px 48px}
2476
+ .fx-video-yt{
2477
+ position:relative;padding-bottom:56.25%;height:0;overflow:hidden;
2478
+ border-radius:var(--radius-xl);border:1px solid var(--ds-gray-alpha-400);
2479
+ background:var(--ds-background-200);
2480
+ }
2542
2481
  .fx-video-yt iframe{position:absolute;top:0;left:0;width:100%;height:100%}
2543
- .fx-video{width:100%;border-radius:1rem;border:1px solid var(--aip-border)}
2482
+ .fx-video{width:100%;border-radius:var(--radius-xl);border:1px solid var(--ds-gray-alpha-400)}
2544
2483
 
2545
2484
  /* ═══════════════════════════════════════════
2546
2485
  TESTIMONIAL
2547
2486
  ═══════════════════════════════════════════ */
2548
- .fx-testi-wrap{padding:5rem 2.5rem;display:flex;justify-content:center}
2549
- .fx-testi{max-width:44rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:1.5rem}
2550
- .fx-testi-img,.fx-testi-avatar{width:56px;height:56px;border-radius:50%;object-fit:cover}
2551
- .fx-testi-avatar{display:flex;align-items:center;justify-content:center;font-size:1.25rem;font-weight:800;background:var(--aip-surface);border:1px solid var(--aip-border);color:var(--aip-text)}
2552
- .fx-testi-quote{font-size:1.1875rem;line-height:1.7;font-style:italic;color:var(--aip-text-muted)}
2553
- .fx-testi-author{font-size:.8125rem;font-weight:600;color:var(--aip-text-dim)}
2487
+ .fx-testi-wrap{padding:80px 40px;display:flex;justify-content:center}
2488
+ .fx-testi{max-width:560px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:20px}
2489
+ .fx-testi-img,.fx-testi-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover}
2490
+ .fx-testi-avatar{
2491
+ display:flex;align-items:center;justify-content:center;
2492
+ font-size:18px;font-weight:700;
2493
+ background:var(--ds-background-200);
2494
+ border:1px solid var(--ds-gray-alpha-400);
2495
+ color:var(--ds-gray-1000);
2496
+ }
2497
+ .fx-testi-quote{font-size:18px;line-height:1.65;color:var(--ds-gray-900);letter-spacing:-.01em}
2498
+ .fx-testi-author{font-size:13px;font-weight:500;color:var(--ds-gray-700)}
2554
2499
 
2555
2500
  /* ═══════════════════════════════════════════
2556
2501
  GALLERY
2557
2502
  ═══════════════════════════════════════════ */
2558
- .fx-gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem;padding:1rem 2.5rem 4rem}
2559
- .fx-gallery-item{border-radius:.75rem;overflow:hidden;aspect-ratio:4/3;border:1px solid var(--aip-border)}
2560
- .fx-gallery-item img{width:100%;height:100%;object-fit:cover;transition:transform .35s var(--aip-ease-out)}
2561
- .fx-gallery-item:hover img{transform:scale(1.04)}
2503
+ .fx-gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;padding:16px 40px 64px}
2504
+ .fx-gallery-item{border-radius:var(--radius-lg);overflow:hidden;aspect-ratio:4/3;border:1px solid var(--ds-gray-alpha-400)}
2505
+ .fx-gallery-item img{width:100%;height:100%;object-fit:cover;transition:transform var(--duration-slow) var(--ease-out)}
2506
+ .fx-gallery-item:hover img{transform:scale(1.03)}
2562
2507
 
2563
2508
  /* ═══════════════════════════════════════════
2564
- MISC
2509
+ MISC COMPONENTS
2565
2510
  ═══════════════════════════════════════════ */
2566
- .fx-divider{display:flex;align-items:center;gap:1rem;padding:.875rem 2.5rem;color:var(--aip-text-dim);font-size:.8125rem}
2567
- .fx-divider::before,.fx-divider::after{content:'';flex:1;height:1px;background:var(--aip-border)}
2568
- .fx-hr{border:none;height:1px;background:var(--aip-border);margin:0 2.5rem}
2569
- .fx-badge-row{padding:.5rem 2.5rem}
2570
- .fx-badge-tag{font-size:.75rem;font-weight:700;padding:.25rem .75rem;border-radius:999px;background:rgba(var(--aip-accent-rgb),.12);color:var(--aip-accent);border:1px solid rgba(var(--aip-accent-rgb),.25);letter-spacing:.04em}
2511
+ .fx-divider{
2512
+ display:flex;align-items:center;gap:12px;
2513
+ padding:12px 40px;color:var(--ds-gray-700);font-size:12px;font-weight:500;
2514
+ }
2515
+ .fx-divider::before,.fx-divider::after{content:'';flex:1;height:1px;background:var(--ds-gray-alpha-400)}
2516
+ .fx-hr{border:none;height:1px;background:var(--ds-gray-alpha-400);margin:0 40px}
2517
+ .fx-badge-row{padding:6px 40px}
2518
+ .fx-badge-tag{
2519
+ font-size:11px;font-weight:600;padding:3px 8px;border-radius:var(--radius-full);
2520
+ background:rgba(var(--aip-accent-rgb),.08);color:rgba(var(--aip-accent-rgb),1);
2521
+ border:1px solid rgba(var(--aip-accent-rgb),.2);letter-spacing:.03em;
2522
+ }
2571
2523
  .fx-spacer{flex-shrink:0}
2572
- .fx-html{padding:0 2.5rem}
2573
- .fx-cols{display:grid;gap:1.5rem;padding:1rem 2.5rem 3rem}
2524
+ .fx-html{padding:0 40px}
2525
+ .fx-cols{display:grid;gap:24px;padding:16px 40px 48px}
2574
2526
  .fx-col{min-width:0}
2575
- .fx-chart-container{padding:0 2.5rem 3rem}
2576
- .fx-select-wrap{padding:.5rem 2.5rem}
2577
- .fx-select-block{width:auto;min-width:200px;margin-top:0}
2578
- .fx-each{padding:0 2.5rem 2rem}
2579
- .fx-each-empty{padding:2rem;text-align:center;color:var(--aip-text-dim);font-size:.875rem}
2527
+ .fx-chart-container{padding:0 40px 48px}
2528
+ .fx-select-wrap{padding:6px 40px}
2529
+ .fx-select-block{width:auto;min-width:180px;height:36px;margin-top:0}
2530
+ .fx-each{padding:0 40px 24px}
2531
+ .fx-each-empty{padding:48px;text-align:center;color:var(--ds-gray-700);font-size:13px}
2580
2532
  .fx-if-wrap{display:contents}
2581
- .fx-editor-wrap{padding:0 2.5rem 2rem}
2533
+ .fx-editor-wrap{padding:0 40px 24px}
2582
2534
 
2583
2535
  /* ═══════════════════════════════════════════
2584
- SCROLL ANIMATIONS
2536
+ SCROLL ANIMATIONS — GPU only per Vercel guidelines
2585
2537
  ═══════════════════════════════════════════ */
2586
2538
  .fx-animate{
2587
- opacity:0;
2588
- transform:translateY(18px);
2589
- transition:opacity .65s var(--aip-ease-out),transform .65s var(--aip-ease-out);
2539
+ opacity:0;transform:translateY(12px);
2540
+ transition:opacity .5s var(--ease-out),transform .5s var(--ease-out);
2590
2541
  }
2591
2542
  .fx-animate.fx-visible{opacity:1;transform:none}
2592
2543
  .fx-animate-stagger>*{
2593
- opacity:0;transform:translateY(14px);
2594
- transition:opacity .55s var(--aip-ease-out),transform .55s var(--aip-ease-out);
2544
+ opacity:0;transform:translateY(8px);
2545
+ transition:opacity .45s var(--ease-out),transform .45s var(--ease-out);
2595
2546
  }
2596
2547
  .fx-animate-stagger.fx-visible>*:nth-child(1){opacity:1;transform:none;transition-delay:.04s}
2597
- .fx-animate-stagger.fx-visible>*:nth-child(2){opacity:1;transform:none;transition-delay:.12s}
2598
- .fx-animate-stagger.fx-visible>*:nth-child(3){opacity:1;transform:none;transition-delay:.2s}
2599
- .fx-animate-stagger.fx-visible>*:nth-child(4){opacity:1;transform:none;transition-delay:.28s}
2600
- .fx-animate-stagger.fx-visible>*:nth-child(5){opacity:1;transform:none;transition-delay:.36s}
2601
- .fx-animate-stagger.fx-visible>*:nth-child(6){opacity:1;transform:none;transition-delay:.44s}
2548
+ .fx-animate-stagger.fx-visible>*:nth-child(2){opacity:1;transform:none;transition-delay:.1s}
2549
+ .fx-animate-stagger.fx-visible>*:nth-child(3){opacity:1;transform:none;transition-delay:.16s}
2550
+ .fx-animate-stagger.fx-visible>*:nth-child(4){opacity:1;transform:none;transition-delay:.22s}
2551
+ .fx-animate-stagger.fx-visible>*:nth-child(5){opacity:1;transform:none;transition-delay:.28s}
2552
+ .fx-animate-stagger.fx-visible>*:nth-child(6){opacity:1;transform:none;transition-delay:.34s}
2602
2553
 
2603
- /* Number counter */
2604
- .fx-count{display:inline-block;font-variant-numeric:tabular-nums}
2605
- .fx-year{font-variant-numeric:tabular-nums}
2554
+ /* Counter + year */
2555
+ .fx-count,.fx-year{font-variant-numeric:tabular-nums;display:inline-block}
2606
2556
 
2607
- /* Hero badge */
2608
- .fx-hero-badge{display:inline-flex;align-items:center;gap:.5rem;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;font-weight:600;padding:.3125rem .875rem;border-radius:999px;border:1px solid var(--aip-border-strong);background:var(--aip-surface);color:var(--aip-text-muted)}
2609
- .fx-hero-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--aip-accent);animation:fx-pulse 2.5s ease infinite;flex-shrink:0}
2610
-
2611
- /* Footer */
2612
- .fx-footer{
2613
- padding:2.5rem;
2614
- border-top:1px solid var(--aip-border);
2615
- }
2557
+ /* ═══════════════════════════════════════════
2558
+ FOOTER Geist footer style
2559
+ ═══════════════════════════════════════════ */
2560
+ .fx-footer{padding:32px 40px;border-top:1px solid var(--ds-gray-alpha-400)}
2616
2561
  .fx-footer-inner{
2617
- max-width:1100px;margin:0 auto;
2618
- display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1.5rem;
2619
- }
2620
- .fx-footer-brand{font-size:.9375rem;font-weight:800;letter-spacing:-.03em;color:var(--aip-text)}
2621
- .fx-footer-links{display:flex;gap:1.75rem;flex-wrap:wrap}
2622
- .fx-footer-link{font-size:.8125rem;color:var(--aip-text-dim);transition:color .15s}
2623
- .fx-footer-link:hover{color:var(--aip-text-muted)}
2624
- .fx-footer-note{font-size:.75rem;color:var(--aip-text-dim);font-family:var(--aip-font-mono)}
2625
- .fx-footer-text{font-size:.8125rem;color:var(--aip-text-dim)}
2626
- @media(max-width:640px){.fx-footer{padding:2rem 1.5rem}.fx-footer-inner{flex-direction:column;align-items:flex-start;gap:1rem}}
2562
+ max-width:1200px;margin:0 auto;
2563
+ display:flex;justify-content:space-between;align-items:center;
2564
+ flex-wrap:wrap;gap:16px;
2565
+ }
2566
+ .fx-footer-brand{font-size:13px;font-weight:600;letter-spacing:-.02em;color:var(--ds-gray-1000)}
2567
+ .fx-footer-links{display:flex;gap:24px;flex-wrap:wrap}
2568
+ .fx-footer-link{font-size:13px;color:var(--ds-gray-700);transition:color var(--duration-normal)}
2569
+ .fx-footer-link:hover{color:var(--ds-gray-1000)}
2570
+ .fx-footer-note{font-size:12px;color:var(--ds-gray-600);font-family:var(--geist-mono)}
2571
+ .fx-footer-text{font-size:13px;color:var(--ds-gray-700)}
2572
+ @media(max-width:640px){.fx-footer{padding:24px}.fx-footer-inner{flex-direction:column;align-items:flex-start;gap:12px}}
2627
2573
  `
2628
2574
 
2629
2575
  // ════════════════════════════════════════════════════════════════
2630
- // TEMASCSS custom properties por tema
2576
+ // GEIST COLOR TOKENS Semantic scale, light + dark
2577
+ // Based on vercel.com/geist/colors
2578
+ // Backgrounds → Surfaces → Borders → Text
2631
2579
  // ════════════════════════════════════════════════════════════════
2632
2580
  const T = {
2633
2581
  dark: `
2634
- :root{
2635
- --aip-bg:#030712;
2636
- --aip-bg-rgb:3,7,18;
2637
- --aip-surface:#0d1117;
2638
- --aip-surface-hover:#111827;
2639
- --aip-border:rgba(255,255,255,.07);
2640
- --aip-border-strong:rgba(255,255,255,.12);
2641
- --aip-text:#f0f4ff;
2642
- --aip-text-muted:#8b9ab5;
2643
- --aip-text-dim:#3d4f68;
2644
- --aip-accent:#ff5722;
2645
- --aip-accent-rgb:255,87,34;
2646
- --aip-accent-light:#ff8a50;
2647
- --aip-grid-line:rgba(255,255,255,.03);
2582
+ :root {
2583
+ /* Backgrounds */
2584
+ --ds-background-100:#000000;
2585
+ --ds-background-100-rgb:0,0,0;
2586
+ --ds-background-200:#0a0a0a;
2587
+
2588
+ /* Gray scale (Geist) */
2589
+ --ds-gray-100:#0a0a0a;
2590
+ --ds-gray-200:#111111;
2591
+ --ds-gray-300:#1a1a1a;
2592
+ --ds-gray-400:#222222;
2593
+ --ds-gray-500:#2a2a2a;
2594
+ --ds-gray-600:#666666;
2595
+ --ds-gray-700:#888888;
2596
+ --ds-gray-800:#999999;
2597
+ --ds-gray-900:#aaaaaa;
2598
+ --ds-gray-1000:#ededed;
2599
+
2600
+ /* Gray alpha */
2601
+ --ds-gray-alpha-100:rgba(255,255,255,.04);
2602
+ --ds-gray-alpha-200:rgba(255,255,255,.07);
2603
+ --ds-gray-alpha-400:rgba(255,255,255,.12);
2604
+ --ds-gray-alpha-700:rgba(255,255,255,.24);
2605
+
2606
+ /* Accent colors */
2607
+ --ds-blue-100:rgba(0,112,243,.08);
2608
+ --ds-blue-200:rgba(0,112,243,.15);
2609
+ --ds-blue-700:#0070f3;
2610
+ --ds-blue-rgb:0,112,243;
2611
+ --ds-red-100:rgba(255,0,0,.08);
2612
+ --ds-red-200:rgba(255,0,0,.15);
2613
+ --ds-red-700:#ff0000;
2614
+ --ds-green-100:rgba(0,188,112,.08);
2615
+ --ds-green-700:#00bc70;
2648
2616
  }`,
2649
2617
  light: `
2650
- :root{
2651
- --aip-bg:#ffffff;
2652
- --aip-bg-rgb:255,255,255;
2653
- --aip-surface:#f8fafc;
2654
- --aip-surface-hover:#f1f5f9;
2655
- --aip-border:rgba(0,0,0,.07);
2656
- --aip-border-strong:rgba(0,0,0,.12);
2657
- --aip-text:#0f172a;
2658
- --aip-text-muted:#475569;
2659
- --aip-text-dim:#94a3b8;
2660
- --aip-accent:#ff5722;
2661
- --aip-accent-rgb:255,87,34;
2662
- --aip-accent-light:#ff8a50;
2663
- --aip-grid-line:rgba(0,0,0,.04);
2618
+ :root {
2619
+ --ds-background-100:#ffffff;
2620
+ --ds-background-100-rgb:255,255,255;
2621
+ --ds-background-200:#fafafa;
2622
+
2623
+ --ds-gray-100:#fafafa;
2624
+ --ds-gray-200:#f5f5f5;
2625
+ --ds-gray-300:#ebebeb;
2626
+ --ds-gray-400:#e6e6e6;
2627
+ --ds-gray-500:#e0e0e0;
2628
+ --ds-gray-600:#888888;
2629
+ --ds-gray-700:#666666;
2630
+ --ds-gray-800:#444444;
2631
+ --ds-gray-900:#333333;
2632
+ --ds-gray-1000:#111111;
2633
+
2634
+ --ds-gray-alpha-100:rgba(0,0,0,.04);
2635
+ --ds-gray-alpha-200:rgba(0,0,0,.07);
2636
+ --ds-gray-alpha-400:rgba(0,0,0,.12);
2637
+ --ds-gray-alpha-700:rgba(0,0,0,.24);
2638
+
2639
+ --ds-blue-100:rgba(0,112,243,.06);
2640
+ --ds-blue-200:rgba(0,112,243,.12);
2641
+ --ds-blue-700:#0070f3;
2642
+ --ds-blue-rgb:0,112,243;
2643
+ --ds-red-100:rgba(255,0,0,.06);
2644
+ --ds-red-200:rgba(255,0,0,.12);
2645
+ --ds-red-700:#c00;
2646
+ --ds-green-100:rgba(0,188,112,.06);
2647
+ --ds-green-700:#007a45;
2664
2648
  }`,
2665
2649
  }
2666
2650
  return base + (T[theme] || T.dark)
2667
2651
  }
2668
2652
 
2653
+