@xetwa/design-system 1.0.50 → 1.0.51

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.
@@ -0,0 +1 @@
1
+ @import "https://fonts.googleapis.com/css2?family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap";@layer components;@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:var(--black);--color-white:var(--white);--radius-xs:6px;--radius-sm:10px;--radius-md:12px;--radius-lg:16px;--radius-xl:20px;--radius-2xl:24px;--shadow-xs:0 1px 3px #51332d14;--shadow-sm:0 2px 8px #51332d1a;--shadow-md:0 4px 14px #51332d21;--shadow-lg:0 8px 26px #51332d2e;--shadow-xl:0 18px 40px #51332d47;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-title:"Fredoka", sans-serif;--color-primary:var(--primary);--color-primary-dark:var(--primary-dark);--color-primary-light:var(--primary-light);--color-brown-900:var(--brown-900);--color-brown-800:var(--brown-800);--color-brown-700:var(--brown-700);--color-brown-600:var(--brown-600);--color-brown-500:var(--brown-500);--color-brown-400:var(--brown-400);--color-brown-300:var(--brown-300);--color-brown-100:var(--brown-100);--color-brown-50:var(--brown-50);--color-cream:var(--cream);--color-canvas:var(--canvas);--color-success:var(--success);--color-error:var(--error);--color-info:var(--info);--radius-screen:34px;--radius-phone:42px;--shadow-btn-primary:0 4px 0 #cf7a30;--shadow-btn-secondary:0 4px 0 #efe2d6;--shadow-btn-dark:0 4px 0 #3a241f;--shadow-focus:0 0 0 3px #f2974b38;--ease-bounce:cubic-bezier(.34, 1.56, .64, 1);--ease-smooth:cubic-bezier(.4, 0, .2, 1);--duration-fast:.12s;--duration-base:.2s;--duration-medium:.3s;--duration-slow:.5s;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.container{width:100%}@media (width>=0){.container{max-width:0}}@media (width>=375px){.container{max-width:375px}}@media (width>=430px){.container{max-width:430px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1440px){.container{max-width:1440px}}@media (width>=96rem){.container{max-width:96rem}}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-wrap{flex-wrap:wrap}.border{border-style:var(--tw-border-style);border-width:1px}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-bounce{--tw-ease:var(--ease-bounce);transition-timing-function:var(--ease-bounce)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.ease-smooth{--tw-ease:var(--ease-smooth);transition-timing-function:var(--ease-smooth)}}:root{--primary:#f2974b;--primary-dark:#cf7a30;--primary-light:#fef6ee;--brown-900:#15100d;--brown-800:#51332d;--brown-700:#3f2620;--brown-600:#6e5a4f;--brown-500:#9a8478;--brown-400:#b9a392;--brown-300:#c3b1a4;--brown-100:#efe2d6;--brown-50:#fdf3ea;--cream:#fbf6f0;--canvas:#e7e5df;--success:#16915a;--error:#cf5b48;--info:#2a6fc2;--black:#000;--white:#fff;--bg-app:#fbf6f0;--bg-surface:#fff;--bg-surface-hover:#fdf3ea;--border-color:#efe2d6;--text-primary:#51332d;--text-secondary:#9a8478}.dark-theme{--bg-app:#15100d;--bg-surface:#51332d;--bg-surface-hover:#3f2620;--border-color:#3f2620;--text-primary:#efe2d6;--text-secondary:#b9a392;--primary-light:#f2974b26}body{background-color:var(--bg-app);color:var(--text-primary);font-family:var(--font-sans);transition:background-color .25s,color .25s}.text-display-1{font-family:var(--font-title);font-size:28px;font-weight:700;line-height:1.08}@media (width>=1024px){.text-display-1{font-size:42px}}.text-display-2{font-family:var(--font-title);font-size:24px;font-weight:700;line-height:1.12}@media (width>=1024px){.text-display-2{font-size:34px}}.text-h1{font-family:var(--font-title);font-size:22px;font-weight:700;line-height:1.15}@media (width>=1024px){.text-h1{font-size:28px}}.text-h2{font-family:var(--font-title);font-size:18px;font-weight:600;line-height:1.2}@media (width>=1024px){.text-h2{font-size:22px}}.text-h3{font-family:var(--font-title);font-size:16px;font-weight:600;line-height:1.25}@media (width>=1024px){.text-h3{font-size:19px}}.text-label{font-family:var(--font-sans);letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:800;line-height:1}@media (width>=1024px){.text-label{font-size:11px}}.text-body-lg{font-family:var(--font-sans);font-size:15px;font-weight:600;line-height:1.55}@media (width>=1024px){.text-body-lg{font-size:17px}}.text-body-md{font-family:var(--font-sans);font-size:13.5px;font-weight:600;line-height:1.5}@media (width>=1024px){.text-body-md{font-size:15px}}.text-body-sm{font-family:var(--font-sans);font-size:12px;font-weight:700;line-height:1.45}@media (width>=1024px){.text-body-sm{font-size:13px}}.text-caption{font-family:var(--font-sans);font-size:10px;font-weight:700;line-height:1.4}@media (width>=1024px){.text-caption{font-size:11px}}.text-btn-lg{font-family:var(--font-sans);letter-spacing:.04em;font-size:16px;font-weight:800;line-height:1}@media (width>=1024px){.text-btn-lg{font-size:17px}}.text-btn-md{font-family:var(--font-sans);letter-spacing:.04em;font-size:14px;font-weight:800;line-height:1}@media (width>=1024px){.text-btn-md{font-size:15px}}.text-btn-sm{font-family:var(--font-sans);letter-spacing:.04em;font-size:12px;font-weight:800;line-height:1}@media (width>=1024px){.text-btn-sm{font-size:12px}}@keyframes xtBob{0%{transform:translateY(0)}50%{transform:translateY(-7px)}to{transform:translateY(0)}}@keyframes xtPop{0%{transform:translateY(0)}50%{transform:translateY(-5px)}to{transform:translateY(0)}}@keyframes xtFlame{0%,to{transform:scale(1)rotate(0)}50%{transform:scale(1.15)rotate(5deg)}}@keyframes xtRing{0%{box-shadow:0 0 #f2974b8c}to{box-shadow:0 0 0 16px #f2974b00}}.animate-bob{animation:2.9s ease-in-out infinite xtBob}.animate-pop{animation:1.6s ease-in-out infinite xtPop}.animate-flame{animation:1.8s ease-in-out infinite xtFlame}.animate-ring{animation:1.8s cubic-bezier(0,0,.2,1) infinite xtRing}@keyframes xtShadow{0%,to{opacity:.2;transform:scale(1)}50%{opacity:.08;transform:scale(.6)}}.animate-contact-shadow{animation:2.9s ease-in-out infinite xtShadow}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}.counter{color:var(--accent);background:var(--accent-bg);border:2px solid #0000;border-radius:5px;margin-bottom:24px;padding:5px 10px;font-size:16px;transition:border-color .3s}.counter:hover{border-color:var(--accent-border)}.counter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hero{position:relative}.hero .base,.hero .framework,.hero .vite{margin:0 auto;inset-inline:0}.hero .base{z-index:0;width:170px;position:relative}.hero .framework,.hero .vite{position:absolute}.hero .framework{z-index:1;height:28px;top:34px;transform:perspective(2000px)rotate(300deg)rotateX(44deg)rotateY(39deg)scale(1.4)}.hero .vite{z-index:0;width:auto;height:26px;top:107px;transform:perspective(2000px)rotate(300deg)rotateX(40deg)rotateY(39deg)scale(.8)}#center{flex-direction:column;flex-grow:1;place-content:center;place-items:center;gap:25px;display:flex}@media (width<=1024px){#center{gap:18px;padding:32px 20px 24px}}#next-steps{border-top:1px solid var(--border);text-align:left;display:flex}#next-steps>div{flex:1 1 0;padding:32px}@media (width<=1024px){#next-steps>div{padding:24px 20px}}#next-steps .icon{width:22px;height:22px;margin-bottom:16px}@media (width<=1024px){#next-steps{text-align:center;flex-direction:column}}#docs{border-right:1px solid var(--border)}@media (width<=1024px){#docs{border-right:none;border-bottom:1px solid var(--border)}}#next-steps ul{gap:8px;margin:32px 0 0;padding:0;list-style:none;display:flex}#next-steps ul .logo{height:18px}#next-steps ul a{color:var(--text-h);background:var(--social-bg);border-radius:6px;align-items:center;gap:8px;padding:6px 12px;font-size:16px;text-decoration:none;transition:box-shadow .3s;display:flex}#next-steps ul a:hover{box-shadow:var(--shadow)}#next-steps ul a .button-icon{width:18px;height:18px}@media (width<=1024px){#next-steps ul{flex-wrap:wrap;justify-content:center;margin-top:20px}#next-steps ul li{flex:calc(50% - 8px)}#next-steps ul a{box-sizing:border-box;justify-content:center;width:100%}}#spacer{border-top:1px solid var(--border);height:88px}@media (width<=1024px){#spacer{height:48px}}.ticks{width:100%;position:relative}.ticks:before,.ticks:after{content:"";border:5px solid #0000;position:absolute;top:-4.5px}.ticks:before{border-left-color:var(--border);left:0}.ticks:after{border-right-color:var(--border);right:0}
package/dist/index.html CHANGED
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>design-system</title>
8
- <script type="module" crossorigin src="/assets/index-DsSiuRvH.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-DGJGCwsd.css">
8
+ <script type="module" crossorigin src="/assets/index-DK8EExZ4.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-r3VUzEKX.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xetwa/design-system",
3
- "version": "1.0.50",
3
+ "version": "1.0.51",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -27,6 +27,8 @@ export interface BaseButtonProps {
27
27
  bgColor?: string;
28
28
  /** Cor da sombra customizada (sobrepõe a cor da variante) */
29
29
  shadowColor?: string;
30
+ /** Altura/Tamanho da sombra customizada */
31
+ shadowHeight?: number;
30
32
  /** Cor de fundo no hover (opcional) */
31
33
  hoverColor?: string;
32
34
  style?: ViewStyle | ViewStyle[];
@@ -45,6 +47,7 @@ export const BaseButton = React.forwardRef<React.ElementRef<typeof Pressable>, B
45
47
  onPress,
46
48
  bgColor,
47
49
  shadowColor,
50
+ shadowHeight,
48
51
  hoverColor,
49
52
  ...props
50
53
  },
@@ -80,19 +83,21 @@ export const BaseButton = React.forwardRef<React.ElementRef<typeof Pressable>, B
80
83
  return {};
81
84
  }
82
85
 
86
+ const activeShadowHeight = shadowHeight !== undefined ? shadowHeight : 4;
87
+
83
88
  if (Platform.OS === 'web') {
84
89
  const resolvedShadowColor = shadowColor || (variant === 'primary' ? theme.colors.primaryDark : theme.colors.brown[100]);
85
90
  return {
86
- boxShadow: `0px ${scale(4)}px 0px ${resolvedShadowColor}`
91
+ boxShadow: `0px ${scale(activeShadowHeight)}px 0px ${resolvedShadowColor}`
87
92
  };
88
93
  } else {
89
- if (shadowColor) {
94
+ if (shadowColor || shadowHeight !== undefined) {
90
95
  return {
91
- shadowColor,
92
- shadowOffset: { width: 0, height: scale(4) },
96
+ shadowColor: shadowColor || (variant === 'primary' ? theme.shadows.btnPrimary.shadowColor : theme.shadows.btnSecondary.shadowColor),
97
+ shadowOffset: { width: 0, height: scale(activeShadowHeight) },
93
98
  shadowOpacity: 1,
94
99
  shadowRadius: 0,
95
- elevation: 4,
100
+ elevation: activeShadowHeight,
96
101
  };
97
102
  }
98
103
  return variant === 'primary' ? theme.shadows.btnPrimary : theme.shadows.btnSecondary;
@@ -139,8 +144,9 @@ export const BaseButton = React.forwardRef<React.ElementRef<typeof Pressable>, B
139
144
  if (variant === 'ghost') {
140
145
  stateStyles.push({ opacity: 0.7 });
141
146
  } else {
147
+ const activeShadowHeight = shadowHeight !== undefined ? shadowHeight : 4;
142
148
  stateStyles.push({
143
- transform: [{ translateY: scale(4) }],
149
+ transform: [{ translateY: scale(activeShadowHeight) }],
144
150
  });
145
151
  if (Platform.OS === 'web') {
146
152
  stateStyles.push({ boxShadow: 'none' });
@@ -83,6 +83,8 @@ export interface RouteHeaderProps {
83
83
  onNotificationPress?: () => void;
84
84
  /** Callback ao clicar no mapa/globo. Requer variant="minimal" */
85
85
  onGlobePress?: () => void;
86
+ /** Indica se está na visão global, para trocar o ícone do globo pelo pino de mapa */
87
+ isGlobalView?: boolean;
86
88
  /**
87
89
  * Estilos adicionais para o contentor exterior (ex: zIndex, position absolute).
88
90
  */
@@ -116,6 +118,7 @@ export const RouteHeader = ({
116
118
  notificationCount = 0,
117
119
  onNotificationPress,
118
120
  onGlobePress,
121
+ isGlobalView = false,
119
122
  safeAreaTop = 0,
120
123
  style,
121
124
  }: RouteHeaderProps) => {
@@ -188,7 +191,7 @@ export const RouteHeader = ({
188
191
  )}
189
192
  </View>
190
193
  <IconButton
191
- iconName="Globe"
194
+ iconName={isGlobalView ? "MapPin" : "Globe"}
192
195
  variant="secondary"
193
196
  size="sm"
194
197
  iconColor={theme.colors.brown[800]}
@@ -0,0 +1,139 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import { View, StyleSheet, Pressable, Animated, LayoutChangeEvent } from 'react-native';
3
+ import type { ViewStyle } from 'react-native';
4
+ import { theme } from '../../../styles/theme';
5
+ import { Typography } from '../../Typography/Typography';
6
+ import { useResponsive } from '../../../hooks/useResponsive';
7
+
8
+ export interface TopTabItem {
9
+ id: string;
10
+ label: string;
11
+ activeColor: string; // The color to use for the text and underline when active
12
+ }
13
+
14
+ export interface TopTabBarProps {
15
+ tabs: TopTabItem[];
16
+ activeTabId: string;
17
+ onTabPress: (id: string) => void;
18
+ style?: ViewStyle | ViewStyle[];
19
+ }
20
+
21
+ export const TopTabBar = ({ tabs, activeTabId, onTabPress, style }: TopTabBarProps) => {
22
+ const { scale } = useResponsive();
23
+ const [containerWidth, setContainerWidth] = useState(0);
24
+
25
+ const activeIndex = tabs.findIndex((t) => t.id === activeTabId) !== -1 ? tabs.findIndex((t) => t.id === activeTabId) : 0;
26
+
27
+ const animatedIndex = useRef(new Animated.Value(activeIndex)).current;
28
+
29
+ useEffect(() => {
30
+ Animated.spring(animatedIndex, {
31
+ toValue: activeIndex,
32
+ useNativeDriver: false, // Color interpolation requires useNativeDriver: false
33
+ tension: 60,
34
+ friction: 8,
35
+ }).start();
36
+ }, [activeIndex, animatedIndex]);
37
+
38
+ const handleLayout = (event: LayoutChangeEvent) => {
39
+ setContainerWidth(event.nativeEvent.layout.width);
40
+ };
41
+
42
+ const tabWidth = containerWidth > 0 ? containerWidth / tabs.length : 0;
43
+
44
+ // Animate indicator position
45
+ const translateX = animatedIndex.interpolate({
46
+ inputRange: tabs.map((_, i) => i),
47
+ outputRange: tabs.map((_, i) => i * tabWidth),
48
+ });
49
+
50
+ // Animate indicator color
51
+ const indicatorColor = tabs.length > 1 ? animatedIndex.interpolate({
52
+ inputRange: tabs.map((_, i) => i),
53
+ outputRange: tabs.map((t) => t.activeColor),
54
+ }) : tabs[0]?.activeColor || theme.colors.primary;
55
+
56
+ return (
57
+ <View style={[styles.container, style]} onLayout={handleLayout}>
58
+ <View style={styles.tabsRow}>
59
+ {tabs.map((tab, index) => {
60
+ const isActive = index === activeIndex;
61
+ // When active, use the bold font variant and active color
62
+ // When inactive, use regular font and brown color
63
+ return (
64
+ <Pressable
65
+ key={tab.id}
66
+ style={[styles.tabButton, { paddingVertical: scale(16) }]}
67
+ onPress={() => onTabPress(tab.id)}
68
+ >
69
+ <Typography
70
+ variant={isActive ? 'bodyMdHeavy' : 'bodyMd'}
71
+ style={[
72
+ styles.tabLabel,
73
+ { color: isActive ? tab.activeColor : theme.colors.brown[300] }
74
+ ]}
75
+ >
76
+ {tab.label}
77
+ </Typography>
78
+ </Pressable>
79
+ );
80
+ })}
81
+ </View>
82
+
83
+ {/* Animated Indicator */}
84
+ {containerWidth > 0 && (
85
+ <Animated.View
86
+ style={[
87
+ styles.indicatorContainer,
88
+ {
89
+ width: tabWidth,
90
+ transform: [{ translateX }],
91
+ },
92
+ ]}
93
+ >
94
+ <Animated.View
95
+ style={[
96
+ styles.indicator,
97
+ { backgroundColor: indicatorColor }
98
+ ]}
99
+ />
100
+ </Animated.View>
101
+ )}
102
+ </View>
103
+ );
104
+ };
105
+
106
+ const styles = StyleSheet.create({
107
+ container: {
108
+ width: '100%',
109
+ backgroundColor: theme.colors.white,
110
+ borderBottomWidth: 1,
111
+ borderBottomColor: theme.colors.brown[50],
112
+ position: 'relative',
113
+ },
114
+ tabsRow: {
115
+ flexDirection: 'row',
116
+ width: '100%',
117
+ },
118
+ tabButton: {
119
+ flex: 1,
120
+ alignItems: 'center',
121
+ justifyContent: 'center',
122
+ },
123
+ tabLabel: {
124
+ textAlign: 'center',
125
+ },
126
+ indicatorContainer: {
127
+ position: 'absolute',
128
+ bottom: 0,
129
+ left: 0,
130
+ alignItems: 'center',
131
+ justifyContent: 'center',
132
+ },
133
+ indicator: {
134
+ width: '60%', // Make the underline a bit shorter than the full tab width for aesthetics
135
+ height: 4,
136
+ borderTopLeftRadius: 4,
137
+ borderTopRightRadius: 4,
138
+ },
139
+ });
package/src/index.ts CHANGED
@@ -53,6 +53,7 @@ export * from './components/Navigation/BottomTabBar/BottomTabBar';
53
53
  export * from './components/Navigation/TabBar/TabBar';
54
54
  export * from './components/Navigation/PaginationDots/PaginationDots';
55
55
  export * from './components/Navigation/ProgressMap/ProgressMap';
56
+ export * from './components/Navigation/TopTabBar/TopTabBar';
56
57
  export * from './components/Navigation/WorldProgressMap/WorldProgressMap';
57
58
  export * from './components/Typography/Typography';
58
59
  export * from './hooks/useResponsive';
@@ -1,11 +1,11 @@
1
- import { Play, Volume2, Volume1, ArrowRight, X, Check, ChevronRight, ChevronLeft, Info, AlertTriangle, Book, Mic, Home, Compass, GraduationCap, FolderOpen, User, ShoppingCart, FileText, Wallet, Bell, Globe, Shield, Settings, CheckCheck, Users, ShieldAlert, Plus, Lock, MapPin, Clock, Smartphone } from 'lucide-react-native';
1
+ import { Play, Volume2, Volume1, ArrowRight, X, Check, ChevronRight, ChevronLeft, Info, AlertTriangle, Book, Mic, Home, Compass, GraduationCap, FolderOpen, User, ShoppingCart, FileText, Wallet, Bell, Globe, Shield, Settings, CheckCheck, Users, ShieldAlert, Plus, Lock, MapPin, Clock, Smartphone, LocateFixed } from 'lucide-react-native';
2
2
 
3
3
  /**
4
4
  * Para evitar que o Vite e o Metro (React Native) tentem empacotar os 1400+ ícones
5
5
  * da biblioteca (o que causa crash de memória e aumenta muito o tamanho final da app),
6
6
  * mapeamos aqui explicitamente os ícones que usamos.
7
7
  *
8
- * Se precisar de um novo ícone da \`lucide-react-native\`, basta importá-lo acima
8
+ * Se precisar de um novo ícone da `lucide-react-native`, basta importá-lo acima
9
9
  * e adicioná-lo a este objeto.
10
10
  */
11
11
  export const IconMap: Record<string, any> = {
@@ -41,4 +41,5 @@ export const IconMap: Record<string, any> = {
41
41
  MapPin,
42
42
  Clock,
43
43
  Smartphone,
44
+ LocateFixed,
44
45
  };
@@ -1 +0,0 @@
1
- @import "https://fonts.googleapis.com/css2?family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap";@layer components;@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:var(--black);--color-white:var(--white);--radius-xs:6px;--radius-sm:10px;--radius-md:12px;--radius-lg:16px;--radius-xl:20px;--radius-2xl:24px;--shadow-xs:0 1px 3px #51332d14;--shadow-sm:0 2px 8px #51332d1a;--shadow-md:0 4px 14px #51332d21;--shadow-lg:0 8px 26px #51332d2e;--shadow-xl:0 18px 40px #51332d47;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-title:"Fredoka", sans-serif;--color-primary:var(--primary);--color-primary-dark:var(--primary-dark);--color-primary-light:var(--primary-light);--color-brown-900:var(--brown-900);--color-brown-800:var(--brown-800);--color-brown-700:var(--brown-700);--color-brown-600:var(--brown-600);--color-brown-500:var(--brown-500);--color-brown-400:var(--brown-400);--color-brown-300:var(--brown-300);--color-brown-100:var(--brown-100);--color-brown-50:var(--brown-50);--color-cream:var(--cream);--color-canvas:var(--canvas);--color-success:var(--success);--color-error:var(--error);--color-info:var(--info);--radius-screen:34px;--radius-phone:42px;--shadow-btn-primary:0 4px 0 #cf7a30;--shadow-btn-secondary:0 4px 0 #efe2d6;--shadow-btn-dark:0 4px 0 #3a241f;--shadow-focus:0 0 0 3px #f2974b38;--ease-bounce:cubic-bezier(.34, 1.56, .64, 1);--ease-smooth:cubic-bezier(.4, 0, .2, 1);--duration-fast:.12s;--duration-base:.2s;--duration-medium:.3s;--duration-slow:.5s;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.container{width:100%}@media (width>=0){.container{max-width:0}}@media (width>=375px){.container{max-width:375px}}@media (width>=430px){.container{max-width:430px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1440px){.container{max-width:1440px}}@media (width>=96rem){.container{max-width:96rem}}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-wrap{flex-wrap:wrap}.border{border-style:var(--tw-border-style);border-width:1px}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-bounce{--tw-ease:var(--ease-bounce);transition-timing-function:var(--ease-bounce)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.ease-smooth{--tw-ease:var(--ease-smooth);transition-timing-function:var(--ease-smooth)}}:root{--primary:#f2974b;--primary-dark:#cf7a30;--primary-light:#fef6ee;--brown-900:#15100d;--brown-800:#51332d;--brown-700:#3f2620;--brown-600:#6e5a4f;--brown-500:#9a8478;--brown-400:#b9a392;--brown-300:#c3b1a4;--brown-100:#efe2d6;--brown-50:#fdf3ea;--cream:#fbf6f0;--canvas:#e7e5df;--success:#16915a;--error:#cf5b48;--info:#2a6fc2;--black:#000;--white:#fff;--bg-app:#fbf6f0;--bg-surface:#fff;--bg-surface-hover:#fdf3ea;--border-color:#efe2d6;--text-primary:#51332d;--text-secondary:#9a8478}.dark-theme{--bg-app:#15100d;--bg-surface:#51332d;--bg-surface-hover:#3f2620;--border-color:#3f2620;--text-primary:#efe2d6;--text-secondary:#b9a392;--primary-light:#f2974b26}body{background-color:var(--bg-app);color:var(--text-primary);font-family:var(--font-sans);transition:background-color .25s,color .25s}.text-display-1{font-family:var(--font-title);font-size:28px;font-weight:700;line-height:1.08}@media (width>=1024px){.text-display-1{font-size:42px}}.text-display-2{font-family:var(--font-title);font-size:24px;font-weight:700;line-height:1.12}@media (width>=1024px){.text-display-2{font-size:34px}}.text-h1{font-family:var(--font-title);font-size:22px;font-weight:700;line-height:1.15}@media (width>=1024px){.text-h1{font-size:28px}}.text-h2{font-family:var(--font-title);font-size:18px;font-weight:600;line-height:1.2}@media (width>=1024px){.text-h2{font-size:22px}}.text-h3{font-family:var(--font-title);font-size:16px;font-weight:600;line-height:1.25}@media (width>=1024px){.text-h3{font-size:19px}}.text-label{font-family:var(--font-sans);letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:800;line-height:1}@media (width>=1024px){.text-label{font-size:11px}}.text-body-lg{font-family:var(--font-sans);font-size:15px;font-weight:600;line-height:1.55}@media (width>=1024px){.text-body-lg{font-size:17px}}.text-body-md{font-family:var(--font-sans);font-size:13.5px;font-weight:600;line-height:1.5}@media (width>=1024px){.text-body-md{font-size:15px}}.text-body-sm{font-family:var(--font-sans);font-size:12px;font-weight:700;line-height:1.45}@media (width>=1024px){.text-body-sm{font-size:13px}}.text-caption{font-family:var(--font-sans);font-size:10px;font-weight:700;line-height:1.4}@media (width>=1024px){.text-caption{font-size:11px}}.text-btn-lg{font-family:var(--font-sans);letter-spacing:.04em;font-size:16px;font-weight:800;line-height:1}@media (width>=1024px){.text-btn-lg{font-size:17px}}.text-btn-md{font-family:var(--font-sans);letter-spacing:.04em;font-size:14px;font-weight:800;line-height:1}@media (width>=1024px){.text-btn-md{font-size:15px}}.text-btn-sm{font-family:var(--font-sans);letter-spacing:.04em;font-size:12px;font-weight:800;line-height:1}@media (width>=1024px){.text-btn-sm{font-size:12px}}@keyframes xtBob{0%{transform:translateY(0)}50%{transform:translateY(-7px)}to{transform:translateY(0)}}@keyframes xtPop{0%{transform:translateY(0)}50%{transform:translateY(-5px)}to{transform:translateY(0)}}@keyframes xtFlame{0%,to{transform:scale(1)rotate(0)}50%{transform:scale(1.15)rotate(5deg)}}@keyframes xtRing{0%{box-shadow:0 0 #f2974b8c}to{box-shadow:0 0 0 16px #f2974b00}}.animate-bob{animation:2.9s ease-in-out infinite xtBob}.animate-pop{animation:1.6s ease-in-out infinite xtPop}.animate-flame{animation:1.8s ease-in-out infinite xtFlame}.animate-ring{animation:1.8s cubic-bezier(0,0,.2,1) infinite xtRing}@keyframes xtShadow{0%,to{opacity:.2;transform:scale(1)}50%{opacity:.08;transform:scale(.6)}}.animate-contact-shadow{animation:2.9s ease-in-out infinite xtShadow}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}.counter{color:var(--accent);background:var(--accent-bg);border:2px solid #0000;border-radius:5px;margin-bottom:24px;padding:5px 10px;font-size:16px;transition:border-color .3s}.counter:hover{border-color:var(--accent-border)}.counter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hero{position:relative}.hero .base,.hero .framework,.hero .vite{margin:0 auto;inset-inline:0}.hero .base{z-index:0;width:170px;position:relative}.hero .framework,.hero .vite{position:absolute}.hero .framework{z-index:1;height:28px;top:34px;transform:perspective(2000px)rotate(300deg)rotateX(44deg)rotateY(39deg)scale(1.4)}.hero .vite{z-index:0;width:auto;height:26px;top:107px;transform:perspective(2000px)rotate(300deg)rotateX(40deg)rotateY(39deg)scale(.8)}#center{flex-direction:column;flex-grow:1;place-content:center;place-items:center;gap:25px;display:flex}@media (width<=1024px){#center{gap:18px;padding:32px 20px 24px}}#next-steps{border-top:1px solid var(--border);text-align:left;display:flex}#next-steps>div{flex:1 1 0;padding:32px}@media (width<=1024px){#next-steps>div{padding:24px 20px}}#next-steps .icon{width:22px;height:22px;margin-bottom:16px}@media (width<=1024px){#next-steps{text-align:center;flex-direction:column}}#docs{border-right:1px solid var(--border)}@media (width<=1024px){#docs{border-right:none;border-bottom:1px solid var(--border)}}#next-steps ul{gap:8px;margin:32px 0 0;padding:0;list-style:none;display:flex}#next-steps ul .logo{height:18px}#next-steps ul a{color:var(--text-h);background:var(--social-bg);border-radius:6px;align-items:center;gap:8px;padding:6px 12px;font-size:16px;text-decoration:none;transition:box-shadow .3s;display:flex}#next-steps ul a:hover{box-shadow:var(--shadow)}#next-steps ul a .button-icon{width:18px;height:18px}@media (width<=1024px){#next-steps ul{flex-wrap:wrap;justify-content:center;margin-top:20px}#next-steps ul li{flex:calc(50% - 8px)}#next-steps ul a{box-sizing:border-box;justify-content:center;width:100%}}#spacer{border-top:1px solid var(--border);height:88px}@media (width<=1024px){#spacer{height:48px}}.ticks{width:100%;position:relative}.ticks:before,.ticks:after{content:"";border:5px solid #0000;position:absolute;top:-4.5px}.ticks:before{border-left-color:var(--border);left:0}.ticks:after{border-right-color:var(--border);right:0}