@fracui/styleguide 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -49,15 +49,25 @@ export default {
49
49
  };
50
50
  ```
51
51
 
52
- **2. Importe o CSS** uma única vez, na raiz do app:
52
+ **2. Importe as variáveis de tema** uma única vez, na raiz do app:
53
53
 
54
54
  ```ts
55
- import "@fracui/styleguide/styles.css";
55
+ import "@fracui/styleguide/tokens.css";
56
56
  ```
57
57
 
58
- Ele declara as variáveis CSS que o preset referencia. O preset sozinho
59
- gera classes como `bg-primary`, mas elas apontam para `hsl(var(--primary))`
60
- — sem o CSS, a variável não existe.
58
+ Ele declara as variáveis CSS que o preset referencia, e só elas. O preset
59
+ sozinho gera classes como `bg-primary`, mas elas apontam para
60
+ `hsl(var(--primary))` — sem o CSS, a variável não existe.
61
+
62
+ `styles.css` não é o que um app com Tailwind próprio quer. Ele é gerado no
63
+ `yarn build` (a partir de `src/styles/globals.css`, não existe no
64
+ repositório) e traz, além das variáveis, o **preflight** do Tailwind — um
65
+ reset global de `body`, `h1`–`h6`, botões e campos — e as classes dos
66
+ componentes já compiladas, que o Tailwind do app gera de novo pelo
67
+ `content`. Use `styles.css` só em app sem Tailwind.
68
+
69
+ Como os apps single-spa ficam montados na mesma página, basta um
70
+ `tokens.css` carregado: as variáveis são globais em `:root` e `.dark`.
61
71
 
62
72
  **3. Importe as fontes** (opcional):
63
73
 
@@ -73,7 +83,7 @@ segunda cópia.
73
83
  | --------------- | ---------------------------------------------------- |
74
84
  | Preset | `bg-primary` e afins não existem |
75
85
  | `content` | Componentes renderizam sem estilo nenhum |
76
- | `styles.css` | Componentes renderizam sem cor (variáveis indefinidas) |
86
+ | `tokens.css` | Componentes renderizam sem cor (variáveis indefinidas) |
77
87
  | `fonts.css` | Tipografia cai para a fonte do sistema |
78
88
 
79
89
  ## Uso
@@ -105,7 +115,8 @@ export function Filtro() {
105
115
  | `@fracui/styleguide/icons` | Só os 195 ícones |
106
116
  | `@fracui/styleguide/tokens` | Tokens em TypeScript (cores, tipografia, elevação, malha) |
107
117
  | `@fracui/styleguide/tailwind-preset` | Preset do Tailwind |
108
- | `@fracui/styleguide/styles.css` | Variáveis CSS dos temas |
118
+ | `@fracui/styleguide/tokens.css` | Só as variáveis CSS dos temas (para app com Tailwind) |
119
+ | `@fracui/styleguide/styles.css` | Variáveis + preflight + classes compiladas (para app sem Tailwind) |
109
120
  | `@fracui/styleguide/fonts.css` | Roboto e Rubik auto-hospedadas |
110
121
 
111
122
  ## Tokens
package/dist/styles.css CHANGED
@@ -1 +1,3 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Roboto,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:0 0% 12.5%;--card:0 0% 100%;--card-foreground:0 0% 12.5%;--popover:0 0% 100%;--popover-foreground:0 0% 12.5%;--primary:216.1 58.4% 52%;--primary-foreground:0 0% 100%;--secondary:0 0% 96.1%;--secondary-foreground:0 0% 20%;--muted:0 0% 96.1%;--muted-foreground:0 0% 45.1%;--accent:214.6 100% 94.9%;--accent-foreground:216 60% 19.6%;--destructive:349.9 58.4% 52%;--destructive-foreground:0 0% 100%;--border:0 0% 89.8%;--input:0 0% 89.8%;--ring:216.1 58.4% 52%;--radius:0.5rem;--brand-primary:216 60% 19.6%;--brand-primary-medium:216.1 59.3% 35.7%;--brand-primary-light:216.1 58.4% 52%;--brand-secondary:88 69.9% 30%;--brand-secondary-medium:88 59.8% 40%;--brand-secondary-light:87.9 50.6% 50%;--error-text:349.7 82.3% 22.2%;--error-icon:349.9 58.4% 52%;--error-bg:350.5 100% 92.5%;--alert-text:20.6 82.3% 22.2%;--alert-icon:20.1 58.4% 52%;--alert-bg:20.5 100% 92.5%;--warning-text:40 82.3% 22.2%;--warning-icon:39.9 58.4% 52%;--warning-bg:39.5 100% 92.5%;--success-text:120 48.2% 27.3%;--success-icon:120 47.4% 62%;--success-bg:120 100% 92.5%;--info-text:220 82.3% 22.2%;--info-icon:219.9 58.4% 52%;--info-bg:219.5 100% 92.5%;--disabled-foreground:0 0% 74.9%;--disabled-bg:0 0% 96.1%}.dark{--background:225 66.7% 4.7%;--foreground:0 0% 100%;--card:226.7 50% 7.1%;--card-foreground:0 0% 100%;--popover:221.5 54.2% 9.4%;--popover-foreground:0 0% 100%;--primary:216.1 58.4% 52%;--primary-foreground:0 0% 100%;--secondary:221.5 54.2% 9.4%;--secondary-foreground:0 0% 89.8%;--muted:221.5 54.2% 9.4%;--muted-foreground:0 0% 74.9%;--accent:216 60% 19.6%;--accent-foreground:214.6 100% 94.9%;--destructive:349.9 58.4% 52%;--destructive-foreground:0 0% 100%;--border:216 60% 19.6%;--input:216 60% 19.6%;--ring:216.4 78% 24.9%;--brand-primary:216.1 58.4% 52%;--brand-primary-medium:215.9 72.5% 62.9%;--brand-primary-light:215.9 98.4% 74.7%;--brand-secondary:87.9 50.6% 50%;--brand-secondary-medium:87.8 50.3% 62.2%;--brand-secondary-light:87.9 50.3% 71.6%;--error-text:350.5 100% 92.5%;--error-icon:349.9 58.4% 52%;--error-bg:349.7 82.3% 22.2%;--alert-text:20.5 100% 92.5%;--alert-icon:20.1 58.4% 52%;--alert-bg:20.6 82.3% 22.2%;--warning-text:39.5 100% 92.5%;--warning-icon:39.9 58.4% 52%;--warning-bg:40 82.3% 22.2%;--success-text:120 100% 92.5%;--success-icon:120 47.4% 62%;--success-bg:120 48.2% 27.3%;--info-text:219.5 100% 92.5%;--info-icon:219.9 58.4% 52%;--info-bg:220 82.3% 22.2%;--disabled-foreground:0 0% 45.1%;--disabled-bg:221.5 54.2% 9.4%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:16px;padding-left:16px}@media (min-width:1440px){.container{max-width:1440px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.left-2{left:.5rem}.left-3\.5{left:.875rem}.left-5{left:1.25rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-8{right:2rem}.top-0{top:0}.top-1\/2{top:50%}.top-8{top:2rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-50{z-index:50}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-mb-px{margin-bottom:-1px}.-ml-3{margin-left:-.75rem}.-mr-0\.5{margin-right:-.125rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.size-10{width:2.5rem;height:2.5rem}.size-12{width:3rem;height:3rem}.size-14{width:3.5rem;height:3.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-\[18px\]{width:18px;height:18px}.size-full{width:100%;height:100%}.h-1{height:.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-18{height:72px}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[30px\]{height:30px}.h-\[58px\]{height:58px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-96{max-height:24rem}.min-h-0{min-height:0}.min-h-4{min-height:1rem}.min-h-\[88px\]{min-height:88px}.min-h-svh{min-height:100svh}.w-11{width:2.75rem}.w-2\.5{width:.625rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-7{width:1.75rem}.w-72{width:18rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[240px\]{width:240px}.w-\[38px\]{width:38px}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-\[560px\]{max-width:560px}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-y-2{--tw-border-spacing-y:0.5rem;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.translate-x-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-x-px{--tw-translate-x:1px}.translate-x-px,.translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y:-50%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-y{resize:vertical}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.whitespace-nowrap{white-space:nowrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-pill{border-radius:9999px}.rounded-xl{border-radius:12px}.rounded-xs{border-radius:4px}.rounded-b-xl{border-bottom-right-radius:12px}.rounded-b-xl,.rounded-l-xl{border-bottom-left-radius:12px}.rounded-l-xl{border-top-left-radius:12px}.rounded-r-xl{border-top-right-radius:12px;border-bottom-right-radius:12px}.rounded-t-xl{border-top-left-radius:12px;border-top-right-radius:12px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-blue-1{--tw-border-opacity:1;border-color:rgb(229 240 255/var(--tw-border-opacity,1))}.border-blue-2{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.border-blue-3{--tw-border-opacity:1;border-color:rgb(165 200 254/var(--tw-border-opacity,1))}.border-blue-4{--tw-border-opacity:1;border-color:rgb(127 178 254/var(--tw-border-opacity,1))}.border-border{border-color:hsl(var(--border))}.border-disabled-foreground{border-color:hsl(var(--disabled-foreground))}.border-gray-light-medium{--tw-border-opacity:1;border-color:rgb(191 191 191/var(--tw-border-opacity,1))}.border-gray-medium{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity,1))}.border-gray-medium-dark{--tw-border-opacity:1;border-color:rgb(51 51 51/var(--tw-border-opacity,1))}.border-info-icon{border-color:hsl(var(--info-icon))}.border-info-text{border-color:hsl(var(--info-text))}.border-primary{border-color:hsl(var(--primary))}.border-red-1{--tw-border-opacity:1;border-color:rgb(249 234 234/var(--tw-border-opacity,1))}.border-red-2{--tw-border-opacity:1;border-color:rgb(248 206 206/var(--tw-border-opacity,1))}.border-red-3{--tw-border-opacity:1;border-color:rgb(234 164 164/var(--tw-border-opacity,1))}.border-red-4{--tw-border-opacity:1;border-color:rgb(225 130 130/var(--tw-border-opacity,1))}.border-secondary{border-color:hsl(var(--secondary))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#3A2A8C\]{--tw-bg-opacity:1;background-color:rgb(58 42 140/var(--tw-bg-opacity,1))}.bg-accent{background-color:hsl(var(--accent))}.bg-alpha-40{background-color:rgba(0,0,0,.4)}.bg-background{background-color:hsl(var(--background))}.bg-blue-3{--tw-bg-opacity:1;background-color:rgb(165 200 254/var(--tw-bg-opacity,1))}.bg-border{background-color:hsl(var(--border))}.bg-brand{background-color:hsl(var(--brand-primary))}.bg-brand-medium{background-color:hsl(var(--brand-primary-medium))}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-destructive{background-color:hsl(var(--destructive))}.bg-disabled{background-color:hsl(var(--disabled-bg))}.bg-error-bg{background-color:hsl(var(--error-bg))}.bg-error-icon{background-color:hsl(var(--error-icon))}.bg-error-text{background-color:hsl(var(--error-text))}.bg-gray{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity,1))}.bg-gray-medium{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity,1))}.bg-info-bg{background-color:hsl(var(--info-bg))}.bg-info-icon{background-color:hsl(var(--info-icon))}.bg-info-text{background-color:hsl(var(--info-text))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-subtitle-light-blue-light{--tw-bg-opacity:1;background-color:rgb(153 204 255/var(--tw-bg-opacity,1))}.bg-subtitle-orange{--tw-bg-opacity:1;background-color:rgb(217 130 43/var(--tw-bg-opacity,1))}.bg-subtitle-red{--tw-bg-opacity:1;background-color:rgb(218 60 54/var(--tw-bg-opacity,1))}.bg-subtitle-yellow{--tw-bg-opacity:1;background-color:rgb(242 242 24/var(--tw-bg-opacity,1))}.bg-success-bg{background-color:hsl(var(--success-bg))}.bg-success-icon{background-color:hsl(var(--success-icon))}.bg-success-text{background-color:hsl(var(--success-text))}.bg-transparent{background-color:transparent}.bg-warning-bg{background-color:hsl(var(--warning-bg))}.bg-warning-icon{background-color:hsl(var(--warning-icon))}.bg-warning-text{background-color:hsl(var(--warning-text))}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-11{padding-left:2.75rem}.pl-14{padding-left:3.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-20{padding-right:5rem}.pr-3{padding-right:.75rem}.pr-3\.5{padding-right:.875rem}.pr-5{padding-right:1.25rem}.pr-9{padding-right:2.25rem}.pt-1{padding-top:.25rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.text-body-1{font-size:16px;line-height:20px;letter-spacing:.48px}.text-body-2{font-size:14px;line-height:19.6px;letter-spacing:.28px}.text-button{font-size:14px;line-height:16.1px;letter-spacing:1.4px}.text-caption{font-size:12px;line-height:14.4px;letter-spacing:.48px}.text-h4{font-size:20px;line-height:27px;letter-spacing:.2px}.text-h5{font-size:18px;line-height:24.3px;letter-spacing:.18px}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-subtitle-1{font-size:16px;line-height:20px;letter-spacing:.32px}.font-medium{font-weight:500}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.tracking-normal{letter-spacing:0}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-alpha-60{color:rgba(0,0,0,.6)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-disabled-foreground{color:hsl(var(--disabled-foreground))}.text-error-text{color:hsl(var(--error-text))}.text-foreground{color:hsl(var(--foreground))}.text-gray{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.text-gray-light-medium{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.text-gray-medium{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.text-gray-medium-dark{--tw-text-opacity:1;color:rgb(51 51 51/var(--tw-text-opacity,1))}.text-gray-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-info-text{color:hsl(var(--info-text))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-success-text{color:hsl(var(--success-text))}.text-warning-text{color:hsl(var(--warning-text))}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.shadow-\[0_0_0_1px_hsl\(var\(--border\)\)\]{--tw-shadow:0 0 0 1px hsl(var(--border));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.shadow-\[0_0_0_1px_hsl\(var\(--border\)\)\],.shadow-blue-center-2{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-blue-center-2{--tw-shadow:2px 2px 4.5px rgba(20,44,80,.08),-2px -2px 4.5px rgba(20,44,80,.08);--tw-shadow-colored:2px 2px 4.5px var(--tw-shadow-color),-2px -2px 4.5px var(--tw-shadow-color)}.shadow-down-4{--tw-shadow:0px 2px 5px rgba(0,0,0,.16),0px 12px 20px rgba(0,0,0,.1),0px 32px 58px rgba(0,0,0,.07);--tw-shadow-colored:0px 2px 5px var(--tw-shadow-color),0px 12px 20px var(--tw-shadow-color),0px 32px 58px var(--tw-shadow-color)}.shadow-down-4,.shadow-down-8{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-down-8{--tw-shadow:0px 4px 6px rgba(0,0,0,.2),0px 18px 22px rgba(0,0,0,.12),0px 48px 70px rgba(0,0,0,.08);--tw-shadow-colored:0px 4px 6px var(--tw-shadow-color),0px 18px 22px var(--tw-shadow-color),0px 48px 70px var(--tw-shadow-color)}.shadow-left-4{--tw-shadow:-2px 0px 5px rgba(0,0,0,.16),-12px 0px 20px rgba(0,0,0,.1),-32px 0px 58px rgba(0,0,0,.07);--tw-shadow-colored:-2px 0px 5px var(--tw-shadow-color),-12px 0px 20px var(--tw-shadow-color),-32px 0px 58px var(--tw-shadow-color)}.shadow-left-4,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-outline{--tw-shadow:0px 0px 2px rgba(36,36,36,.1);--tw-shadow-colored:0px 0px 2px var(--tw-shadow-color)}.shadow-outline,.shadow-right-4{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-right-4{--tw-shadow:2px 0px 5px rgba(0,0,0,.16),12px 0px 20px rgba(0,0,0,.1),32px 0px 58px rgba(0,0,0,.07);--tw-shadow-colored:2px 0px 5px var(--tw-shadow-color),12px 0px 20px var(--tw-shadow-color),32px 0px 58px var(--tw-shadow-color)}.shadow-up-8{--tw-shadow:0px -4px 6px rgba(0,0,0,.2),0px -18px 22px rgba(0,0,0,.12),0px -48px 70px rgba(0,0,0,.08);--tw-shadow-colored:0px -4px 6px var(--tw-shadow-color),0px -18px 22px var(--tw-shadow-color),0px -48px 70px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-ring{--tw-ring-color:hsl(var(--ring))}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\2c right\2c width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\2c opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\2c height\2c padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.fade-in-0{--tw-enter-opacity:0}.fade-in-80{--tw-enter-opacity:0.8}.zoom-in-95{--tw-enter-scale:.95}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-body-2::file-selector-button{font-size:14px;line-height:19.6px;letter-spacing:.28px}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-gray-light-medium::-moz-placeholder{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.placeholder\:text-gray-light-medium::placeholder{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.first\:rounded-l-xl:first-child{border-top-left-radius:12px;border-bottom-left-radius:12px}.first\:pl-6:first-child{padding-left:1.5rem}.last\:rounded-r-xl:last-child{border-top-right-radius:12px;border-bottom-right-radius:12px}.last\:pr-6:last-child{padding-right:1.5rem}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.hover\:border-accent:hover{border-color:hsl(var(--accent))}.hover\:border-info-icon:hover{border-color:hsl(var(--info-icon))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-1:hover{--tw-bg-opacity:1;background-color:rgb(229 240 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-2:hover{--tw-bg-opacity:1;background-color:rgb(203 224 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-3:hover{--tw-bg-opacity:1;background-color:rgb(165 200 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-4:hover{--tw-bg-opacity:1;background-color:rgb(127 178 254/var(--tw-bg-opacity,1))}.hover\:bg-brand:hover{background-color:hsl(var(--brand-primary))}.hover\:bg-brand-medium:hover{background-color:hsl(var(--brand-primary-medium))}.hover\:bg-error-bg:hover{background-color:hsl(var(--error-bg))}.hover\:bg-error-text:hover{background-color:hsl(var(--error-text))}.hover\:bg-gray-light:hover{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity,1))}.hover\:bg-info-bg:hover{background-color:hsl(var(--info-bg))}.hover\:bg-red-1:hover{--tw-bg-opacity:1;background-color:rgb(249 234 234/var(--tw-bg-opacity,1))}.hover\:bg-red-2:hover{--tw-bg-opacity:1;background-color:rgb(248 206 206/var(--tw-bg-opacity,1))}.hover\:bg-red-3:hover{--tw-bg-opacity:1;background-color:rgb(234 164 164/var(--tw-bg-opacity,1))}.hover\:bg-red-4:hover{--tw-bg-opacity:1;background-color:rgb(225 130 130/var(--tw-bg-opacity,1))}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-brand-medium:hover{color:hsl(var(--brand-primary-medium))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--accent\)\)\]:hover{--tw-shadow:0 0 0 1px hsl(var(--accent));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-4:hover,.hover\:ring-\[3px\]:hover{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.hover\:ring-\[3px\]:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-secondary:hover{--tw-ring-color:hsl(var(--secondary))}.focus\:bg-brand:focus{background-color:hsl(var(--brand-primary))}.focus\:bg-error-bg:focus{background-color:hsl(var(--error-bg))}.focus\:bg-secondary:focus{background-color:hsl(var(--secondary))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus-visible\:border-2:focus-visible{border-width:2px}.focus-visible\:border-accent:focus-visible{border-color:hsl(var(--accent))}.focus-visible\:border-blue-2:focus-visible{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.focus-visible\:border-blue-3:focus-visible{--tw-border-opacity:1;border-color:rgb(165 200 254/var(--tw-border-opacity,1))}.focus-visible\:border-primary:focus-visible{border-color:hsl(var(--primary))}.focus-visible\:bg-brand:focus-visible{background-color:hsl(var(--brand-primary))}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-border:focus-visible{--tw-ring-color:hsl(var(--border))}.focus-visible\:ring-destructive:focus-visible{--tw-ring-color:hsl(var(--destructive))}.focus-visible\:ring-error-icon:focus-visible{--tw-ring-color:hsl(var(--error-icon))}.focus-visible\:ring-primary:focus-visible{--tw-ring-color:hsl(var(--primary))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.active\:bg-secondary:active{background-color:hsl(var(--secondary))}.active\:text-brand-medium:active{color:hsl(var(--brand-primary-medium))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-border:disabled{border-color:hsl(var(--border))}.disabled\:border-disabled-foreground:disabled{border-color:hsl(var(--disabled-foreground))}.disabled\:bg-disabled:disabled{background-color:hsl(var(--disabled-bg))}.disabled\:bg-secondary:disabled{background-color:hsl(var(--secondary))}.disabled\:text-disabled-foreground:disabled{color:hsl(var(--disabled-foreground))}.disabled\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.disabled\:hover\:ring-0:hover:disabled{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group\/row:hover .group-hover\/row\:bg-accent{background-color:hsl(var(--accent))}.group.toast .group-\[\.toast\]\:rounded-xl{border-radius:12px}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toast .group-\[\.toast\]\:bg-secondary{background-color:hsl(var(--secondary))}.group.toast .group-\[\.toast\]\:text-body-2{font-size:14px;line-height:19.6px;letter-spacing:.28px}.group.toast .group-\[\.toast\]\:text-button{font-size:14px;line-height:16.1px;letter-spacing:1.4px}.group.toast .group-\[\.toast\]\:uppercase{text-transform:uppercase}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toast .group-\[\.toast\]\:text-secondary-foreground{color:hsl(var(--secondary-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:text-disabled-foreground{color:hsl(var(--disabled-foreground))}.has-\[\>svg\]\:grid-cols-\[auto_1fr\]:has(>svg){grid-template-columns:auto 1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\[data-variant\=inset\]\]\:bg-muted:has([data-variant=inset]){background-color:hsl(var(--muted))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:text-disabled-foreground[aria-disabled=true]{color:hsl(var(--disabled-foreground))}.aria-selected\:text-gray[aria-selected=true]{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.aria-\[invalid\=true\]\:border-error-icon[aria-invalid=true]{border-color:hsl(var(--error-icon))}.aria-\[invalid\=true\]\:bg-error-bg[aria-invalid=true]{background-color:hsl(var(--error-bg))}.aria-\[invalid\=true\]\:text-error-text[aria-invalid=true]{color:hsl(var(--error-text))}.aria-\[invalid\=true\]\:placeholder\:text-error-text[aria-invalid=true]::-moz-placeholder{color:hsl(var(--error-text))}.aria-\[invalid\=true\]\:placeholder\:text-error-text[aria-invalid=true]::placeholder{color:hsl(var(--error-text))}.peer[aria-invalid=true]~.peer-aria-\[invalid\=true\]\:text-error-icon{color:hsl(var(--error-icon))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked],.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{--tw-translate-x:0.125rem}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[state\=active\]\:border-primary[data-state=active],.data-\[state\=checked\]\:border-primary[data-state=checked],.data-\[state\=indeterminate\]\:border-primary[data-state=indeterminate]{border-color:hsl(var(--primary))}.data-\[state\=open\]\:border-blue-2[data-state=open]{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.data-\[active\=true\]\:bg-secondary[data-active=true],.data-\[disabled\]\:bg-secondary[data-disabled]{background-color:hsl(var(--secondary))}.data-\[state\=checked\]\:bg-gray-white[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\[state\=checked\]\:bg-primary[data-state=checked],.data-\[state\=indeterminate\]\:bg-primary[data-state=indeterminate],.data-\[state\=on\]\:bg-primary[data-state=on]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[active\=true\]\:font-medium[data-active=true],.data-\[state\=active\]\:font-medium[data-state=active],.data-\[state\=checked\]\:font-medium[data-state=checked]{font-weight:500}.data-\[active\=true\]\:text-brand-medium[data-active=true]{color:hsl(var(--brand-primary-medium))}.data-\[disabled\]\:text-disabled-foreground[data-disabled]{color:hsl(var(--disabled-foreground))}.data-\[placeholder\]\:text-gray-light-medium[data-placeholder]{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.data-\[state\=active\]\:text-primary[data-state=active],.data-\[state\=checked\]\:text-primary[data-state=checked]{color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked],.data-\[state\=indeterminate\]\:text-primary-foreground[data-state=indeterminate],.data-\[state\=on\]\:text-primary-foreground[data-state=on]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=checked\]\:hover\:ring-accent:hover[data-state=checked],.data-\[state\=indeterminate\]\:hover\:ring-accent:hover[data-state=indeterminate]{--tw-ring-color:hsl(var(--accent))}.data-\[state\=checked\]\:disabled\:border-blue-2:disabled[data-state=checked]{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.data-\[state\=checked\]\:disabled\:bg-blue-2:disabled[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(203 224 254/var(--tw-bg-opacity,1))}.data-\[state\=checked\]\:disabled\:text-blue-2:disabled[data-state=checked]{--tw-text-opacity:1;color:rgb(203 224 254/var(--tw-text-opacity,1))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width)*-1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width)*-1)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-9{width:2.25rem!important;height:2.25rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-border{border-color:hsl(var(--border))}.group\/row[data-state=selected] .group-data-\[state\=selected\]\/row\:bg-accent{background-color:hsl(var(--accent))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.peer[data-variant=inset]~.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]{min-height:calc(100svh - 1rem)}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}.dark\:text-disabled-foreground:is(.dark *){color:hsl(var(--disabled-foreground))}.dark\:text-gray:is(.dark *){--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.dark\:text-gray-light:is(.dark *){--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity,1))}.dark\:text-gray-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:text-primary:is(.dark *){color:hsl(var(--primary))}@media (min-width:640px){.sm\:mt-0{margin-top:0}.sm\:max-w-md{max-width:28rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}}@media (min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:p-12{padding:3rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:12px}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}@media (min-width:1024px){.lg\:gap-6{gap:1.5rem}}.\[\&\:\:-webkit-search-cancel-button\]\:appearance-none::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.\[\&\:has\(\[data-slot\=alert-description\]\)\]\:text-foreground:has([data-slot=alert-description]){color:hsl(var(--foreground))}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>a\:hover\]\:text-primary\/80>a:hover{color:hsl(var(--primary)/.8)}.\[\&\>a\]\:text-primary>a{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\:has\(\~\[data-slot\=alert-description\]\)\]\:row-span-2>svg:has(~[data-slot=alert-description]){grid-row:span 2/span 2}.\[\&\>svg\:has\(\~\[data-slot\=alert-description\]\)\]\:translate-y-0>svg:has(~[data-slot=alert-description]){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\:has\(\~\[data-slot\=alert-description\]\)\]\:self-center>svg:has(~[data-slot=alert-description]){align-self:center}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:size-5>svg{width:1.25rem;height:1.25rem}.\[\&\>svg\]\:size-6>svg{width:1.5rem;height:1.5rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-error-icon>svg{color:hsl(var(--error-icon))}.\[\&\>svg\]\:text-gray-medium>svg{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.\[\&\>svg\]\:text-info-icon>svg{color:hsl(var(--info-icon))}.\[\&\>svg\]\:text-success-icon>svg{color:hsl(var(--success-icon))}.\[\&\>svg\]\:text-warning-icon>svg{color:hsl(var(--warning-icon))}.\[\&\>tr\]\:bg-secondary>tr{background-color:hsl(var(--secondary))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[data-icon\]\]\:text-error-icon [data-icon]{color:hsl(var(--error-icon))}.\[\&_\[data-icon\]\]\:text-info-icon [data-icon]{color:hsl(var(--info-icon))}.\[\&_\[data-icon\]\]\:text-success-icon [data-icon]{color:hsl(var(--success-icon))}.\[\&_\[data-icon\]\]\:text-warning-icon [data-icon]{color:hsl(var(--warning-icon))}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:.75rem;height:.75rem}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:size-5 svg{width:1.25rem;height:1.25rem}.\[\&_svg\]\:size-6 svg{width:1.5rem;height:1.5rem}.\[\&_svg\]\:size-7 svg{width:1.75rem;height:1.75rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-error-icon svg{color:hsl(var(--error-icon))}
1
+ :root{--background:0 0% 100%;--foreground:0 0% 12.5%;--card:0 0% 100%;--card-foreground:0 0% 12.5%;--popover:0 0% 100%;--popover-foreground:0 0% 12.5%;--primary:216.1 58.4% 52%;--primary-foreground:0 0% 100%;--secondary:0 0% 96.1%;--secondary-foreground:0 0% 20%;--muted:0 0% 96.1%;--muted-foreground:0 0% 45.1%;--accent:214.6 100% 94.9%;--accent-foreground:216 60% 19.6%;--destructive:349.9 58.4% 52%;--destructive-foreground:0 0% 100%;--border:0 0% 89.8%;--input:0 0% 89.8%;--ring:216.1 58.4% 52%;--radius:0.5rem;--brand-primary:216 60% 19.6%;--brand-primary-medium:216.1 59.3% 35.7%;--brand-primary-light:216.1 58.4% 52%;--brand-secondary:88 69.9% 30%;--brand-secondary-medium:88 59.8% 40%;--brand-secondary-light:87.9 50.6% 50%;--error-text:349.7 82.3% 22.2%;--error-icon:349.9 58.4% 52%;--error-bg:350.5 100% 92.5%;--alert-text:20.6 82.3% 22.2%;--alert-icon:20.1 58.4% 52%;--alert-bg:20.5 100% 92.5%;--warning-text:40 82.3% 22.2%;--warning-icon:39.9 58.4% 52%;--warning-bg:39.5 100% 92.5%;--success-text:120 48.2% 27.3%;--success-icon:120 47.4% 62%;--success-bg:120 100% 92.5%;--info-text:220 82.3% 22.2%;--info-icon:219.9 58.4% 52%;--info-bg:219.5 100% 92.5%;--disabled-foreground:0 0% 74.9%;--disabled-bg:0 0% 96.1%}.dark{--background:225 66.7% 4.7%;--foreground:0 0% 100%;--card:226.7 50% 7.1%;--card-foreground:0 0% 100%;--popover:221.5 54.2% 9.4%;--popover-foreground:0 0% 100%;--primary:216.1 58.4% 52%;--primary-foreground:0 0% 100%;--secondary:221.5 54.2% 9.4%;--secondary-foreground:0 0% 89.8%;--muted:221.5 54.2% 9.4%;--muted-foreground:0 0% 74.9%;--accent:216 60% 19.6%;--accent-foreground:214.6 100% 94.9%;--destructive:349.9 58.4% 52%;--destructive-foreground:0 0% 100%;--border:216 60% 19.6%;--input:216 60% 19.6%;--ring:216.4 78% 24.9%;--brand-primary:216.1 58.4% 52%;--brand-primary-medium:215.9 72.5% 62.9%;--brand-primary-light:215.9 98.4% 74.7%;--brand-secondary:87.9 50.6% 50%;--brand-secondary-medium:87.8 50.3% 62.2%;--brand-secondary-light:87.9 50.3% 71.6%;--error-text:350.5 100% 92.5%;--error-icon:349.9 58.4% 52%;--error-bg:349.7 82.3% 22.2%;--alert-text:20.5 100% 92.5%;--alert-icon:20.1 58.4% 52%;--alert-bg:20.6 82.3% 22.2%;--warning-text:39.5 100% 92.5%;--warning-icon:39.9 58.4% 52%;--warning-bg:40 82.3% 22.2%;--success-text:120 100% 92.5%;--success-icon:120 47.4% 62%;--success-bg:120 48.2% 27.3%;--info-text:219.5 100% 92.5%;--info-icon:219.9 58.4% 52%;--info-bg:220 82.3% 22.2%;--disabled-foreground:0 0% 45.1%;--disabled-bg:221.5 54.2% 9.4%}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
2
+
3
+ /*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Roboto,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:16px;padding-left:16px}@media (min-width:1440px){.container{max-width:1440px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.left-2{left:.5rem}.left-3\.5{left:.875rem}.left-5{left:1.25rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-8{right:2rem}.top-0{top:0}.top-1\/2{top:50%}.top-8{top:2rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-50{z-index:50}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-mb-px{margin-bottom:-1px}.-ml-3{margin-left:-.75rem}.-mr-0\.5{margin-right:-.125rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.size-10{width:2.5rem;height:2.5rem}.size-12{width:3rem;height:3rem}.size-14{width:3.5rem;height:3.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-\[18px\]{width:18px;height:18px}.size-full{width:100%;height:100%}.h-1{height:.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-18{height:72px}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3\.5{height:.875rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[30px\]{height:30px}.h-\[58px\]{height:58px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-96{max-height:24rem}.min-h-0{min-height:0}.min-h-4{min-height:1rem}.min-h-\[88px\]{min-height:88px}.min-h-svh{min-height:100svh}.w-11{width:2.75rem}.w-2\.5{width:.625rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-7{width:1.75rem}.w-72{width:18rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[240px\]{width:240px}.w-\[38px\]{width:38px}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-\[560px\]{max-width:560px}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-y-2{--tw-border-spacing-y:0.5rem;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.translate-x-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-x-px{--tw-translate-x:1px}.translate-x-px,.translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y:-50%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-y{resize:vertical}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-start{justify-items:start}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.whitespace-nowrap{white-space:nowrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-pill{border-radius:9999px}.rounded-xl{border-radius:12px}.rounded-xs{border-radius:4px}.rounded-b-xl{border-bottom-right-radius:12px}.rounded-b-xl,.rounded-l-xl{border-bottom-left-radius:12px}.rounded-l-xl{border-top-left-radius:12px}.rounded-r-xl{border-top-right-radius:12px;border-bottom-right-radius:12px}.rounded-t-xl{border-top-left-radius:12px;border-top-right-radius:12px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-blue-1{--tw-border-opacity:1;border-color:rgb(229 240 255/var(--tw-border-opacity,1))}.border-blue-2{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.border-blue-3{--tw-border-opacity:1;border-color:rgb(165 200 254/var(--tw-border-opacity,1))}.border-blue-4{--tw-border-opacity:1;border-color:rgb(127 178 254/var(--tw-border-opacity,1))}.border-border{border-color:hsl(var(--border))}.border-disabled-foreground{border-color:hsl(var(--disabled-foreground))}.border-gray-light-medium{--tw-border-opacity:1;border-color:rgb(191 191 191/var(--tw-border-opacity,1))}.border-gray-medium{--tw-border-opacity:1;border-color:rgb(115 115 115/var(--tw-border-opacity,1))}.border-gray-medium-dark{--tw-border-opacity:1;border-color:rgb(51 51 51/var(--tw-border-opacity,1))}.border-info-icon{border-color:hsl(var(--info-icon))}.border-info-text{border-color:hsl(var(--info-text))}.border-primary{border-color:hsl(var(--primary))}.border-red-1{--tw-border-opacity:1;border-color:rgb(249 234 234/var(--tw-border-opacity,1))}.border-red-2{--tw-border-opacity:1;border-color:rgb(248 206 206/var(--tw-border-opacity,1))}.border-red-3{--tw-border-opacity:1;border-color:rgb(234 164 164/var(--tw-border-opacity,1))}.border-red-4{--tw-border-opacity:1;border-color:rgb(225 130 130/var(--tw-border-opacity,1))}.border-secondary{border-color:hsl(var(--secondary))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#3A2A8C\]{--tw-bg-opacity:1;background-color:rgb(58 42 140/var(--tw-bg-opacity,1))}.bg-accent{background-color:hsl(var(--accent))}.bg-alpha-40{background-color:rgba(0,0,0,.4)}.bg-background{background-color:hsl(var(--background))}.bg-blue-3{--tw-bg-opacity:1;background-color:rgb(165 200 254/var(--tw-bg-opacity,1))}.bg-border{background-color:hsl(var(--border))}.bg-brand{background-color:hsl(var(--brand-primary))}.bg-brand-medium{background-color:hsl(var(--brand-primary-medium))}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-destructive{background-color:hsl(var(--destructive))}.bg-disabled{background-color:hsl(var(--disabled-bg))}.bg-error-bg{background-color:hsl(var(--error-bg))}.bg-error-icon{background-color:hsl(var(--error-icon))}.bg-error-text{background-color:hsl(var(--error-text))}.bg-gray{--tw-bg-opacity:1;background-color:rgb(153 153 153/var(--tw-bg-opacity,1))}.bg-gray-medium{--tw-bg-opacity:1;background-color:rgb(115 115 115/var(--tw-bg-opacity,1))}.bg-info-bg{background-color:hsl(var(--info-bg))}.bg-info-icon{background-color:hsl(var(--info-icon))}.bg-info-text{background-color:hsl(var(--info-text))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-subtitle-light-blue-light{--tw-bg-opacity:1;background-color:rgb(153 204 255/var(--tw-bg-opacity,1))}.bg-subtitle-orange{--tw-bg-opacity:1;background-color:rgb(217 130 43/var(--tw-bg-opacity,1))}.bg-subtitle-red{--tw-bg-opacity:1;background-color:rgb(218 60 54/var(--tw-bg-opacity,1))}.bg-subtitle-yellow{--tw-bg-opacity:1;background-color:rgb(242 242 24/var(--tw-bg-opacity,1))}.bg-success-bg{background-color:hsl(var(--success-bg))}.bg-success-icon{background-color:hsl(var(--success-icon))}.bg-success-text{background-color:hsl(var(--success-text))}.bg-transparent{background-color:transparent}.bg-warning-bg{background-color:hsl(var(--warning-bg))}.bg-warning-icon{background-color:hsl(var(--warning-icon))}.bg-warning-text{background-color:hsl(var(--warning-text))}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-11{padding-left:2.75rem}.pl-14{padding-left:3.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-20{padding-right:5rem}.pr-3{padding-right:.75rem}.pr-3\.5{padding-right:.875rem}.pr-5{padding-right:1.25rem}.pr-9{padding-right:2.25rem}.pt-1{padding-top:.25rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.text-body-1{font-size:16px;line-height:20px;letter-spacing:.48px}.text-body-2{font-size:14px;line-height:19.6px;letter-spacing:.28px}.text-button{font-size:14px;line-height:16.1px;letter-spacing:1.4px}.text-caption{font-size:12px;line-height:14.4px;letter-spacing:.48px}.text-h4{font-size:20px;line-height:27px;letter-spacing:.2px}.text-h5{font-size:18px;line-height:24.3px;letter-spacing:.18px}.text-sm\/relaxed{font-size:.875rem;line-height:1.625}.text-subtitle-1{font-size:16px;line-height:20px;letter-spacing:.32px}.font-medium{font-weight:500}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.tracking-normal{letter-spacing:0}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-alpha-60{color:rgba(0,0,0,.6)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-disabled-foreground{color:hsl(var(--disabled-foreground))}.text-error-text{color:hsl(var(--error-text))}.text-foreground{color:hsl(var(--foreground))}.text-gray{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.text-gray-light-medium{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.text-gray-medium{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.text-gray-medium-dark{--tw-text-opacity:1;color:rgb(51 51 51/var(--tw-text-opacity,1))}.text-gray-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-info-text{color:hsl(var(--info-text))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-success-text{color:hsl(var(--success-text))}.text-warning-text{color:hsl(var(--warning-text))}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.shadow-\[0_0_0_1px_hsl\(var\(--border\)\)\]{--tw-shadow:0 0 0 1px hsl(var(--border));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.shadow-\[0_0_0_1px_hsl\(var\(--border\)\)\],.shadow-blue-center-2{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-blue-center-2{--tw-shadow:2px 2px 4.5px rgba(20,44,80,.08),-2px -2px 4.5px rgba(20,44,80,.08);--tw-shadow-colored:2px 2px 4.5px var(--tw-shadow-color),-2px -2px 4.5px var(--tw-shadow-color)}.shadow-down-4{--tw-shadow:0px 2px 5px rgba(0,0,0,.16),0px 12px 20px rgba(0,0,0,.1),0px 32px 58px rgba(0,0,0,.07);--tw-shadow-colored:0px 2px 5px var(--tw-shadow-color),0px 12px 20px var(--tw-shadow-color),0px 32px 58px var(--tw-shadow-color)}.shadow-down-4,.shadow-down-8{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-down-8{--tw-shadow:0px 4px 6px rgba(0,0,0,.2),0px 18px 22px rgba(0,0,0,.12),0px 48px 70px rgba(0,0,0,.08);--tw-shadow-colored:0px 4px 6px var(--tw-shadow-color),0px 18px 22px var(--tw-shadow-color),0px 48px 70px var(--tw-shadow-color)}.shadow-left-4{--tw-shadow:-2px 0px 5px rgba(0,0,0,.16),-12px 0px 20px rgba(0,0,0,.1),-32px 0px 58px rgba(0,0,0,.07);--tw-shadow-colored:-2px 0px 5px var(--tw-shadow-color),-12px 0px 20px var(--tw-shadow-color),-32px 0px 58px var(--tw-shadow-color)}.shadow-left-4,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-outline{--tw-shadow:0px 0px 2px rgba(36,36,36,.1);--tw-shadow-colored:0px 0px 2px var(--tw-shadow-color)}.shadow-outline,.shadow-right-4{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-right-4{--tw-shadow:2px 0px 5px rgba(0,0,0,.16),12px 0px 20px rgba(0,0,0,.1),32px 0px 58px rgba(0,0,0,.07);--tw-shadow-colored:2px 0px 5px var(--tw-shadow-color),12px 0px 20px var(--tw-shadow-color),32px 0px 58px var(--tw-shadow-color)}.shadow-up-8{--tw-shadow:0px -4px 6px rgba(0,0,0,.2),0px -18px 22px rgba(0,0,0,.12),0px -48px 70px rgba(0,0,0,.08);--tw-shadow-colored:0px -4px 6px var(--tw-shadow-color),0px -18px 22px var(--tw-shadow-color),0px -48px 70px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-ring{--tw-ring-color:hsl(var(--ring))}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\2c right\2c width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\2c opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\2c height\2c padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.fade-in-0{--tw-enter-opacity:0}.fade-in-80{--tw-enter-opacity:0.8}.zoom-in-95{--tw-enter-scale:.95}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-body-2::file-selector-button{font-size:14px;line-height:19.6px;letter-spacing:.28px}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-gray-light-medium::-moz-placeholder{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.placeholder\:text-gray-light-medium::placeholder{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.first\:rounded-l-xl:first-child{border-top-left-radius:12px;border-bottom-left-radius:12px}.first\:pl-6:first-child{padding-left:1.5rem}.last\:rounded-r-xl:last-child{border-top-right-radius:12px;border-bottom-right-radius:12px}.last\:pr-6:last-child{padding-right:1.5rem}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.hover\:border-accent:hover{border-color:hsl(var(--accent))}.hover\:border-info-icon:hover{border-color:hsl(var(--info-icon))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-1:hover{--tw-bg-opacity:1;background-color:rgb(229 240 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-2:hover{--tw-bg-opacity:1;background-color:rgb(203 224 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-3:hover{--tw-bg-opacity:1;background-color:rgb(165 200 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-4:hover{--tw-bg-opacity:1;background-color:rgb(127 178 254/var(--tw-bg-opacity,1))}.hover\:bg-brand:hover{background-color:hsl(var(--brand-primary))}.hover\:bg-brand-medium:hover{background-color:hsl(var(--brand-primary-medium))}.hover\:bg-error-bg:hover{background-color:hsl(var(--error-bg))}.hover\:bg-error-text:hover{background-color:hsl(var(--error-text))}.hover\:bg-gray-light:hover{--tw-bg-opacity:1;background-color:rgb(229 229 229/var(--tw-bg-opacity,1))}.hover\:bg-info-bg:hover{background-color:hsl(var(--info-bg))}.hover\:bg-red-1:hover{--tw-bg-opacity:1;background-color:rgb(249 234 234/var(--tw-bg-opacity,1))}.hover\:bg-red-2:hover{--tw-bg-opacity:1;background-color:rgb(248 206 206/var(--tw-bg-opacity,1))}.hover\:bg-red-3:hover{--tw-bg-opacity:1;background-color:rgb(234 164 164/var(--tw-bg-opacity,1))}.hover\:bg-red-4:hover{--tw-bg-opacity:1;background-color:rgb(225 130 130/var(--tw-bg-opacity,1))}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-brand-medium:hover{color:hsl(var(--brand-primary-medium))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--accent\)\)\]:hover{--tw-shadow:0 0 0 1px hsl(var(--accent));--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-4:hover,.hover\:ring-\[3px\]:hover{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.hover\:ring-\[3px\]:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-secondary:hover{--tw-ring-color:hsl(var(--secondary))}.focus\:bg-brand:focus{background-color:hsl(var(--brand-primary))}.focus\:bg-error-bg:focus{background-color:hsl(var(--error-bg))}.focus\:bg-secondary:focus{background-color:hsl(var(--secondary))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus-visible\:border-2:focus-visible{border-width:2px}.focus-visible\:border-accent:focus-visible{border-color:hsl(var(--accent))}.focus-visible\:border-blue-2:focus-visible{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.focus-visible\:border-blue-3:focus-visible{--tw-border-opacity:1;border-color:rgb(165 200 254/var(--tw-border-opacity,1))}.focus-visible\:border-primary:focus-visible{border-color:hsl(var(--primary))}.focus-visible\:bg-brand:focus-visible{background-color:hsl(var(--brand-primary))}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.focus-visible\:ring-border:focus-visible{--tw-ring-color:hsl(var(--border))}.focus-visible\:ring-destructive:focus-visible{--tw-ring-color:hsl(var(--destructive))}.focus-visible\:ring-error-icon:focus-visible{--tw-ring-color:hsl(var(--error-icon))}.focus-visible\:ring-primary:focus-visible{--tw-ring-color:hsl(var(--primary))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.active\:bg-secondary:active{background-color:hsl(var(--secondary))}.active\:text-brand-medium:active{color:hsl(var(--brand-primary-medium))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-border:disabled{border-color:hsl(var(--border))}.disabled\:border-disabled-foreground:disabled{border-color:hsl(var(--disabled-foreground))}.disabled\:bg-disabled:disabled{background-color:hsl(var(--disabled-bg))}.disabled\:bg-secondary:disabled{background-color:hsl(var(--secondary))}.disabled\:text-disabled-foreground:disabled{color:hsl(var(--disabled-foreground))}.disabled\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.disabled\:hover\:ring-0:hover:disabled{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group\/row:hover .group-hover\/row\:bg-accent{background-color:hsl(var(--accent))}.group.toast .group-\[\.toast\]\:rounded-xl{border-radius:12px}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toast .group-\[\.toast\]\:bg-secondary{background-color:hsl(var(--secondary))}.group.toast .group-\[\.toast\]\:text-body-2{font-size:14px;line-height:19.6px;letter-spacing:.28px}.group.toast .group-\[\.toast\]\:text-button{font-size:14px;line-height:16.1px;letter-spacing:1.4px}.group.toast .group-\[\.toast\]\:uppercase{text-transform:uppercase}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toast .group-\[\.toast\]\:text-secondary-foreground{color:hsl(var(--secondary-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:text-disabled-foreground{color:hsl(var(--disabled-foreground))}.has-\[\>svg\]\:grid-cols-\[auto_1fr\]:has(>svg){grid-template-columns:auto 1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){-moz-column-gap:.75rem;column-gap:.75rem}.has-\[\[data-variant\=inset\]\]\:bg-muted:has([data-variant=inset]){background-color:hsl(var(--muted))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:text-disabled-foreground[aria-disabled=true]{color:hsl(var(--disabled-foreground))}.aria-selected\:text-gray[aria-selected=true]{--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.aria-\[invalid\=true\]\:border-error-icon[aria-invalid=true]{border-color:hsl(var(--error-icon))}.aria-\[invalid\=true\]\:bg-error-bg[aria-invalid=true]{background-color:hsl(var(--error-bg))}.aria-\[invalid\=true\]\:text-error-text[aria-invalid=true]{color:hsl(var(--error-text))}.aria-\[invalid\=true\]\:placeholder\:text-error-text[aria-invalid=true]::-moz-placeholder{color:hsl(var(--error-text))}.aria-\[invalid\=true\]\:placeholder\:text-error-text[aria-invalid=true]::placeholder{color:hsl(var(--error-text))}.peer[aria-invalid=true]~.peer-aria-\[invalid\=true\]\:text-error-icon{color:hsl(var(--error-icon))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-5[data-state=checked],.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{--tw-translate-x:0.125rem}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[state\=active\]\:border-primary[data-state=active],.data-\[state\=checked\]\:border-primary[data-state=checked],.data-\[state\=indeterminate\]\:border-primary[data-state=indeterminate]{border-color:hsl(var(--primary))}.data-\[state\=open\]\:border-blue-2[data-state=open]{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.data-\[active\=true\]\:bg-secondary[data-active=true],.data-\[disabled\]\:bg-secondary[data-disabled]{background-color:hsl(var(--secondary))}.data-\[state\=checked\]\:bg-gray-white[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\[state\=checked\]\:bg-primary[data-state=checked],.data-\[state\=indeterminate\]\:bg-primary[data-state=indeterminate],.data-\[state\=on\]\:bg-primary[data-state=on]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[active\=true\]\:font-medium[data-active=true],.data-\[state\=active\]\:font-medium[data-state=active],.data-\[state\=checked\]\:font-medium[data-state=checked]{font-weight:500}.data-\[active\=true\]\:text-brand-medium[data-active=true]{color:hsl(var(--brand-primary-medium))}.data-\[disabled\]\:text-disabled-foreground[data-disabled]{color:hsl(var(--disabled-foreground))}.data-\[placeholder\]\:text-gray-light-medium[data-placeholder]{--tw-text-opacity:1;color:rgb(191 191 191/var(--tw-text-opacity,1))}.data-\[state\=active\]\:text-primary[data-state=active],.data-\[state\=checked\]\:text-primary[data-state=checked]{color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked],.data-\[state\=indeterminate\]\:text-primary-foreground[data-state=indeterminate],.data-\[state\=on\]\:text-primary-foreground[data-state=on]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=checked\]\:hover\:ring-accent:hover[data-state=checked],.data-\[state\=indeterminate\]\:hover\:ring-accent:hover[data-state=indeterminate]{--tw-ring-color:hsl(var(--accent))}.data-\[state\=checked\]\:disabled\:border-blue-2:disabled[data-state=checked]{--tw-border-opacity:1;border-color:rgb(203 224 254/var(--tw-border-opacity,1))}.data-\[state\=checked\]\:disabled\:bg-blue-2:disabled[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(203 224 254/var(--tw-bg-opacity,1))}.data-\[state\=checked\]\:disabled\:text-blue-2:disabled[data-state=checked]{--tw-text-opacity:1;color:rgb(203 224 254/var(--tw-text-opacity,1))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width)*-1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width)*-1)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-9{width:2.25rem!important;height:2.25rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-border{border-color:hsl(var(--border))}.group\/row[data-state=selected] .group-data-\[state\=selected\]\/row\:bg-accent{background-color:hsl(var(--accent))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.peer[data-variant=inset]~.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]{min-height:calc(100svh - 1rem)}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}.dark\:text-disabled-foreground:is(.dark *){color:hsl(var(--disabled-foreground))}.dark\:text-gray:is(.dark *){--tw-text-opacity:1;color:rgb(153 153 153/var(--tw-text-opacity,1))}.dark\:text-gray-light:is(.dark *){--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity,1))}.dark\:text-gray-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:text-primary:is(.dark *){color:hsl(var(--primary))}@media (min-width:640px){.sm\:mt-0{margin-top:0}.sm\:max-w-md{max-width:28rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}}@media (min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:p-12{padding:3rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:12px}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}@media (min-width:1024px){.lg\:gap-6{gap:1.5rem}}.\[\&\:\:-webkit-search-cancel-button\]\:appearance-none::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.\[\&\:has\(\[data-slot\=alert-description\]\)\]\:text-foreground:has([data-slot=alert-description]){color:hsl(var(--foreground))}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>a\:hover\]\:text-primary\/80>a:hover{color:hsl(var(--primary)/.8)}.\[\&\>a\]\:text-primary>a{color:hsl(var(--primary))}.\[\&\>a\]\:underline>a{text-decoration-line:underline}.\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\:has\(\~\[data-slot\=alert-description\]\)\]\:row-span-2>svg:has(~[data-slot=alert-description]){grid-row:span 2/span 2}.\[\&\>svg\:has\(\~\[data-slot\=alert-description\]\)\]\:translate-y-0>svg:has(~[data-slot=alert-description]){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\:has\(\~\[data-slot\=alert-description\]\)\]\:self-center>svg:has(~[data-slot=alert-description]){align-self:center}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:size-5>svg{width:1.25rem;height:1.25rem}.\[\&\>svg\]\:size-6>svg{width:1.5rem;height:1.5rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:text-error-icon>svg{color:hsl(var(--error-icon))}.\[\&\>svg\]\:text-gray-medium>svg{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.\[\&\>svg\]\:text-info-icon>svg{color:hsl(var(--info-icon))}.\[\&\>svg\]\:text-success-icon>svg{color:hsl(var(--success-icon))}.\[\&\>svg\]\:text-warning-icon>svg{color:hsl(var(--warning-icon))}.\[\&\>tr\]\:bg-secondary>tr{background-color:hsl(var(--secondary))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\[data-icon\]\]\:text-error-icon [data-icon]{color:hsl(var(--error-icon))}.\[\&_\[data-icon\]\]\:text-info-icon [data-icon]{color:hsl(var(--info-icon))}.\[\&_\[data-icon\]\]\:text-success-icon [data-icon]{color:hsl(var(--success-icon))}.\[\&_\[data-icon\]\]\:text-warning-icon [data-icon]{color:hsl(var(--warning-icon))}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-6 svg:not([class*=size-]){width:1.5rem;height:1.5rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:.75rem;height:.75rem}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:size-5 svg{width:1.25rem;height:1.25rem}.\[\&_svg\]\:size-6 svg{width:1.5rem;height:1.5rem}.\[\&_svg\]\:size-7 svg{width:1.75rem;height:1.75rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-error-icon svg{color:hsl(var(--error-icon))}
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-preset.cjs","sources":["../node_modules/tailwindcss-animate/index.js","../src/tailwind-preset.ts"],"sourcesContent":["const plugin = require(\"tailwindcss/plugin\")\n\nfunction filterDefault(values) {\n\treturn Object.fromEntries(\n\t\tObject.entries(values).filter(([key]) => key !== \"DEFAULT\"),\n\t)\n}\n\nmodule.exports = plugin(\n\t({ addUtilities, matchUtilities, theme }) => {\n\t\taddUtilities({\n\t\t\t\"@keyframes enter\": theme(\"keyframes.enter\"),\n\t\t\t\"@keyframes exit\": theme(\"keyframes.exit\"),\n\t\t\t\".animate-in\": {\n\t\t\t\tanimationName: \"enter\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-enter-opacity\": \"initial\",\n\t\t\t\t\"--tw-enter-scale\": \"initial\",\n\t\t\t\t\"--tw-enter-rotate\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-x\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-y\": \"initial\",\n\t\t\t},\n\t\t\t\".animate-out\": {\n\t\t\t\tanimationName: \"exit\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-exit-opacity\": \"initial\",\n\t\t\t\t\"--tw-exit-scale\": \"initial\",\n\t\t\t\t\"--tw-exit-rotate\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-x\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-y\": \"initial\",\n\t\t\t},\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"fade-in\": (value) => ({ \"--tw-enter-opacity\": value }),\n\t\t\t\t\"fade-out\": (value) => ({ \"--tw-exit-opacity\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationOpacity\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"zoom-in\": (value) => ({ \"--tw-enter-scale\": value }),\n\t\t\t\t\"zoom-out\": (value) => ({ \"--tw-exit-scale\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationScale\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"spin-in\": (value) => ({ \"--tw-enter-rotate\": value }),\n\t\t\t\t\"spin-out\": (value) => ({ \"--tw-exit-rotate\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationRotate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"slide-in-from-top\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-left\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-right\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-top\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-left\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-right\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": value,\n\t\t\t\t}),\n\t\t\t},\n\t\t\t{ values: theme(\"animationTranslate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ duration: (value) => ({ animationDuration: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationDuration\")) },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ delay: (value) => ({ animationDelay: value }) },\n\t\t\t{ values: theme(\"animationDelay\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ ease: (value) => ({ animationTimingFunction: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationTimingFunction\")) },\n\t\t)\n\n\t\taddUtilities({\n\t\t\t\".running\": { animationPlayState: \"running\" },\n\t\t\t\".paused\": { animationPlayState: \"paused\" },\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{ \"fill-mode\": (value) => ({ animationFillMode: value }) },\n\t\t\t{ values: theme(\"animationFillMode\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ direction: (value) => ({ animationDirection: value }) },\n\t\t\t{ values: theme(\"animationDirection\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ repeat: (value) => ({ animationIterationCount: value }) },\n\t\t\t{ values: theme(\"animationRepeat\") },\n\t\t)\n\t},\n\t{\n\t\ttheme: {\n\t\t\textend: {\n\t\t\t\tanimationDelay: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionDelay\"),\n\t\t\t\t}),\n\t\t\t\tanimationDuration: ({ theme }) => ({\n\t\t\t\t\t0: \"0ms\",\n\t\t\t\t\t...theme(\"transitionDuration\"),\n\t\t\t\t}),\n\t\t\t\tanimationTimingFunction: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionTimingFunction\"),\n\t\t\t\t}),\n\t\t\t\tanimationFillMode: {\n\t\t\t\t\tnone: \"none\",\n\t\t\t\t\tforwards: \"forwards\",\n\t\t\t\t\tbackwards: \"backwards\",\n\t\t\t\t\tboth: \"both\",\n\t\t\t\t},\n\t\t\t\tanimationDirection: {\n\t\t\t\t\tnormal: \"normal\",\n\t\t\t\t\treverse: \"reverse\",\n\t\t\t\t\talternate: \"alternate\",\n\t\t\t\t\t\"alternate-reverse\": \"alternate-reverse\",\n\t\t\t\t},\n\t\t\t\tanimationOpacity: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"opacity\"),\n\t\t\t\t}),\n\t\t\t\tanimationTranslate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"100%\",\n\t\t\t\t\t...theme(\"translate\"),\n\t\t\t\t}),\n\t\t\t\tanimationScale: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"scale\"),\n\t\t\t\t}),\n\t\t\t\tanimationRotate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"30deg\",\n\t\t\t\t\t...theme(\"rotate\"),\n\t\t\t\t}),\n\t\t\t\tanimationRepeat: {\n\t\t\t\t\t0: \"0\",\n\t\t\t\t\t1: \"1\",\n\t\t\t\t\tinfinite: \"infinite\",\n\t\t\t\t},\n\t\t\t\tkeyframes: {\n\t\t\t\t\tenter: {\n\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\topacity: \"var(--tw-enter-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\texit: {\n\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\topacity: \"var(--tw-exit-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n)\n","import type { Config } from \"tailwindcss\";\nimport tailwindcssAnimate from \"tailwindcss-animate\";\nimport {\n blue,\n green,\n red,\n gray,\n subtitle,\n subtitleLight,\n alpha,\n} from \"./tokens/colors\";\nimport { radii } from \"./tokens/theme\";\nimport { fontFamily, typeScale } from \"./tokens/typography\";\nimport { boxShadow, backdropBlur } from \"./tokens/elevation\";\nimport { screens, container } from \"./tokens/grid\";\n\n/**\n * Preset do Tailwind da FracUI.\n *\n * Repositórios consumidores (inclusive apps single-spa) devem importar\n * este preset no próprio `tailwind.config.js`/`.ts` para herdar cores\n * semânticas, paleta de marca, tipografia, raio de borda, elevação e\n * animações consistentes:\n *\n * ```ts\n * import fracuiPreset from \"@fracui/styleguide/tailwind-preset\";\n *\n * export default {\n * presets: [fracuiPreset],\n * content: [\n * \"./index.html\",\n * \"./src/**\\/*.{ts,tsx}\",\n * \"./node_modules/@fracui/styleguide/dist/**\\/*.js\",\n * ],\n * };\n * ```\n *\n * Este preset NÃO define `content` — cada repositório declara o próprio\n * `content`, mas deve incluir o pacote publicado (`dist/**\\/*.js`) para\n * que as classes usadas dentro dos componentes não sejam removidas\n * (purgadas) pelo Tailwind.\n *\n * O preset também NÃO declara as variáveis CSS que ele referencia. O app\n * consumidor precisa importar `@fracui/styleguide/styles.css` uma única\n * vez na raiz, ou declarar as variáveis de `src/styles/globals.css` por\n * conta própria.\n */\n\n/**\n * Converte as chaves camelCase dos tokens para kebab-case, que é a\n * convenção de nomes de classe do Tailwind.\n *\n * `gray.iceMedium` (bom em TypeScript) vira `bg-gray-ice-medium`\n * (bom em HTML), sem duplicar a definição das cores.\n *\n * `DEFAULT` é preservado: o Tailwind usa essa chave exata para gerar a\n * classe sem sufixo (`bg-gray`).\n */\nfunction kebabKeys<T extends Record<string, unknown>>(scale: T) {\n return Object.fromEntries(\n Object.entries(scale).map(([key, value]) => [\n key === \"DEFAULT\"\n ? key\n : key.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase(),\n value,\n ])\n );\n}\n\nconst fracuiPreset: Omit<Config, \"content\"> = {\n darkMode: [\"class\"],\n theme: {\n container,\n extend: {\n screens,\n colors: {\n // Tokens semânticos (contrato shadcn/ui).\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Cores de marca, sensíveis ao tema (trocam no `.dark`).\n brand: {\n DEFAULT: \"hsl(var(--brand-primary))\",\n medium: \"hsl(var(--brand-primary-medium))\",\n light: \"hsl(var(--brand-primary-light))\",\n },\n \"brand-secondary\": {\n DEFAULT: \"hsl(var(--brand-secondary))\",\n medium: \"hsl(var(--brand-secondary-medium))\",\n light: \"hsl(var(--brand-secondary-light))\",\n },\n\n // Estados de feedback: trio texto/ícone/fundo por estado.\n // Ex: `bg-error-bg text-error-text` + `text-error-icon` no ícone.\n error: {\n text: \"hsl(var(--error-text))\",\n icon: \"hsl(var(--error-icon))\",\n bg: \"hsl(var(--error-bg))\",\n },\n alert: {\n text: \"hsl(var(--alert-text))\",\n icon: \"hsl(var(--alert-icon))\",\n bg: \"hsl(var(--alert-bg))\",\n },\n warning: {\n text: \"hsl(var(--warning-text))\",\n icon: \"hsl(var(--warning-icon))\",\n bg: \"hsl(var(--warning-bg))\",\n },\n success: {\n text: \"hsl(var(--success-text))\",\n icon: \"hsl(var(--success-icon))\",\n bg: \"hsl(var(--success-bg))\",\n },\n info: {\n text: \"hsl(var(--info-text))\",\n icon: \"hsl(var(--info-icon))\",\n bg: \"hsl(var(--info-bg))\",\n },\n\n // Estado desabilitado, sensível ao tema.\n disabled: {\n DEFAULT: \"hsl(var(--disabled-bg))\",\n foreground: \"hsl(var(--disabled-foreground))\",\n },\n\n // Escalas primitivas, fixas (não mudam com o tema).\n // Disponíveis como bg-blue-3, text-gray-medium, bg-green-dark...\n blue,\n green,\n red,\n gray: kebabKeys(gray),\n subtitle: kebabKeys(subtitle),\n \"subtitle-light\": kebabKeys(subtitleLight),\n alpha,\n },\n spacing: {\n // 72px: altura da Navbar e do Player no Figma. O Tailwind pula de\n // 68px (17) para 80px (20), então o valor precisa ser declarado.\n 18: \"72px\",\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n ...radii,\n },\n fontFamily,\n fontSize: Object.fromEntries(\n Object.entries(typeScale).map(([name, style]) => [\n name,\n [\n style.fontSize,\n {\n lineHeight: style.lineHeight,\n letterSpacing: style.letterSpacing,\n },\n ],\n ])\n ),\n boxShadow,\n backdropBlur,\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [tailwindcssAnimate],\n};\n\nexport default fracuiPreset;\n"],"names":["plugin","require$$0","filterDefault","values","key","tailwindcssAnimate","addUtilities","matchUtilities","theme","value","kebabKeys","scale","fracuiPreset","container","screens","blue","green","red","gray","subtitle","subtitleLight","alpha","radii","fontFamily","typeScale","name","style","boxShadow","backdropBlur"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"tailwind-preset.cjs","sources":["../node_modules/tailwindcss-animate/index.js","../src/tailwind-preset.ts"],"sourcesContent":["const plugin = require(\"tailwindcss/plugin\")\n\nfunction filterDefault(values) {\n\treturn Object.fromEntries(\n\t\tObject.entries(values).filter(([key]) => key !== \"DEFAULT\"),\n\t)\n}\n\nmodule.exports = plugin(\n\t({ addUtilities, matchUtilities, theme }) => {\n\t\taddUtilities({\n\t\t\t\"@keyframes enter\": theme(\"keyframes.enter\"),\n\t\t\t\"@keyframes exit\": theme(\"keyframes.exit\"),\n\t\t\t\".animate-in\": {\n\t\t\t\tanimationName: \"enter\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-enter-opacity\": \"initial\",\n\t\t\t\t\"--tw-enter-scale\": \"initial\",\n\t\t\t\t\"--tw-enter-rotate\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-x\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-y\": \"initial\",\n\t\t\t},\n\t\t\t\".animate-out\": {\n\t\t\t\tanimationName: \"exit\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-exit-opacity\": \"initial\",\n\t\t\t\t\"--tw-exit-scale\": \"initial\",\n\t\t\t\t\"--tw-exit-rotate\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-x\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-y\": \"initial\",\n\t\t\t},\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"fade-in\": (value) => ({ \"--tw-enter-opacity\": value }),\n\t\t\t\t\"fade-out\": (value) => ({ \"--tw-exit-opacity\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationOpacity\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"zoom-in\": (value) => ({ \"--tw-enter-scale\": value }),\n\t\t\t\t\"zoom-out\": (value) => ({ \"--tw-exit-scale\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationScale\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"spin-in\": (value) => ({ \"--tw-enter-rotate\": value }),\n\t\t\t\t\"spin-out\": (value) => ({ \"--tw-exit-rotate\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationRotate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"slide-in-from-top\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-left\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-right\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-top\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-left\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-right\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": value,\n\t\t\t\t}),\n\t\t\t},\n\t\t\t{ values: theme(\"animationTranslate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ duration: (value) => ({ animationDuration: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationDuration\")) },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ delay: (value) => ({ animationDelay: value }) },\n\t\t\t{ values: theme(\"animationDelay\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ ease: (value) => ({ animationTimingFunction: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationTimingFunction\")) },\n\t\t)\n\n\t\taddUtilities({\n\t\t\t\".running\": { animationPlayState: \"running\" },\n\t\t\t\".paused\": { animationPlayState: \"paused\" },\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{ \"fill-mode\": (value) => ({ animationFillMode: value }) },\n\t\t\t{ values: theme(\"animationFillMode\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ direction: (value) => ({ animationDirection: value }) },\n\t\t\t{ values: theme(\"animationDirection\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ repeat: (value) => ({ animationIterationCount: value }) },\n\t\t\t{ values: theme(\"animationRepeat\") },\n\t\t)\n\t},\n\t{\n\t\ttheme: {\n\t\t\textend: {\n\t\t\t\tanimationDelay: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionDelay\"),\n\t\t\t\t}),\n\t\t\t\tanimationDuration: ({ theme }) => ({\n\t\t\t\t\t0: \"0ms\",\n\t\t\t\t\t...theme(\"transitionDuration\"),\n\t\t\t\t}),\n\t\t\t\tanimationTimingFunction: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionTimingFunction\"),\n\t\t\t\t}),\n\t\t\t\tanimationFillMode: {\n\t\t\t\t\tnone: \"none\",\n\t\t\t\t\tforwards: \"forwards\",\n\t\t\t\t\tbackwards: \"backwards\",\n\t\t\t\t\tboth: \"both\",\n\t\t\t\t},\n\t\t\t\tanimationDirection: {\n\t\t\t\t\tnormal: \"normal\",\n\t\t\t\t\treverse: \"reverse\",\n\t\t\t\t\talternate: \"alternate\",\n\t\t\t\t\t\"alternate-reverse\": \"alternate-reverse\",\n\t\t\t\t},\n\t\t\t\tanimationOpacity: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"opacity\"),\n\t\t\t\t}),\n\t\t\t\tanimationTranslate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"100%\",\n\t\t\t\t\t...theme(\"translate\"),\n\t\t\t\t}),\n\t\t\t\tanimationScale: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"scale\"),\n\t\t\t\t}),\n\t\t\t\tanimationRotate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"30deg\",\n\t\t\t\t\t...theme(\"rotate\"),\n\t\t\t\t}),\n\t\t\t\tanimationRepeat: {\n\t\t\t\t\t0: \"0\",\n\t\t\t\t\t1: \"1\",\n\t\t\t\t\tinfinite: \"infinite\",\n\t\t\t\t},\n\t\t\t\tkeyframes: {\n\t\t\t\t\tenter: {\n\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\topacity: \"var(--tw-enter-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\texit: {\n\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\topacity: \"var(--tw-exit-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n)\n","import type { Config } from \"tailwindcss\";\nimport tailwindcssAnimate from \"tailwindcss-animate\";\nimport {\n blue,\n green,\n red,\n gray,\n subtitle,\n subtitleLight,\n alpha,\n} from \"./tokens/colors\";\nimport { radii } from \"./tokens/theme\";\nimport { fontFamily, typeScale } from \"./tokens/typography\";\nimport { boxShadow, backdropBlur } from \"./tokens/elevation\";\nimport { screens, container } from \"./tokens/grid\";\n\n/**\n * Preset do Tailwind da FracUI.\n *\n * Repositórios consumidores (inclusive apps single-spa) devem importar\n * este preset no próprio `tailwind.config.js`/`.ts` para herdar cores\n * semânticas, paleta de marca, tipografia, raio de borda, elevação e\n * animações consistentes:\n *\n * ```ts\n * import fracuiPreset from \"@fracui/styleguide/tailwind-preset\";\n *\n * export default {\n * presets: [fracuiPreset],\n * content: [\n * \"./index.html\",\n * \"./src/**\\/*.{ts,tsx}\",\n * \"./node_modules/@fracui/styleguide/dist/**\\/*.js\",\n * ],\n * };\n * ```\n *\n * Este preset NÃO define `content` — cada repositório declara o próprio\n * `content`, mas deve incluir o pacote publicado (`dist/**\\/*.js`) para\n * que as classes usadas dentro dos componentes não sejam removidas\n * (purgadas) pelo Tailwind.\n *\n * O preset também NÃO declara as variáveis CSS que ele referencia. O app\n * consumidor com Tailwind próprio precisa importar\n * `@fracui/styleguide/tokens.css` (só as variáveis) uma única vez na\n * raiz. `styles.css` também as traz, mas junto de preflight e das classes\n * já compiladas dos componentes — é para quem não usa Tailwind.\n */\n\n/**\n * Converte as chaves camelCase dos tokens para kebab-case, que é a\n * convenção de nomes de classe do Tailwind.\n *\n * `gray.iceMedium` (bom em TypeScript) vira `bg-gray-ice-medium`\n * (bom em HTML), sem duplicar a definição das cores.\n *\n * `DEFAULT` é preservado: o Tailwind usa essa chave exata para gerar a\n * classe sem sufixo (`bg-gray`).\n */\nfunction kebabKeys<T extends Record<string, unknown>>(scale: T) {\n return Object.fromEntries(\n Object.entries(scale).map(([key, value]) => [\n key === \"DEFAULT\"\n ? key\n : key.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase(),\n value,\n ])\n );\n}\n\nconst fracuiPreset: Omit<Config, \"content\"> = {\n darkMode: [\"class\"],\n theme: {\n container,\n extend: {\n screens,\n colors: {\n // Tokens semânticos (contrato shadcn/ui).\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Cores de marca, sensíveis ao tema (trocam no `.dark`).\n brand: {\n DEFAULT: \"hsl(var(--brand-primary))\",\n medium: \"hsl(var(--brand-primary-medium))\",\n light: \"hsl(var(--brand-primary-light))\",\n },\n \"brand-secondary\": {\n DEFAULT: \"hsl(var(--brand-secondary))\",\n medium: \"hsl(var(--brand-secondary-medium))\",\n light: \"hsl(var(--brand-secondary-light))\",\n },\n\n // Estados de feedback: trio texto/ícone/fundo por estado.\n // Ex: `bg-error-bg text-error-text` + `text-error-icon` no ícone.\n error: {\n text: \"hsl(var(--error-text))\",\n icon: \"hsl(var(--error-icon))\",\n bg: \"hsl(var(--error-bg))\",\n },\n alert: {\n text: \"hsl(var(--alert-text))\",\n icon: \"hsl(var(--alert-icon))\",\n bg: \"hsl(var(--alert-bg))\",\n },\n warning: {\n text: \"hsl(var(--warning-text))\",\n icon: \"hsl(var(--warning-icon))\",\n bg: \"hsl(var(--warning-bg))\",\n },\n success: {\n text: \"hsl(var(--success-text))\",\n icon: \"hsl(var(--success-icon))\",\n bg: \"hsl(var(--success-bg))\",\n },\n info: {\n text: \"hsl(var(--info-text))\",\n icon: \"hsl(var(--info-icon))\",\n bg: \"hsl(var(--info-bg))\",\n },\n\n // Estado desabilitado, sensível ao tema.\n disabled: {\n DEFAULT: \"hsl(var(--disabled-bg))\",\n foreground: \"hsl(var(--disabled-foreground))\",\n },\n\n // Escalas primitivas, fixas (não mudam com o tema).\n // Disponíveis como bg-blue-3, text-gray-medium, bg-green-dark...\n blue,\n green,\n red,\n gray: kebabKeys(gray),\n subtitle: kebabKeys(subtitle),\n \"subtitle-light\": kebabKeys(subtitleLight),\n alpha,\n },\n spacing: {\n // 72px: altura da Navbar e do Player no Figma. O Tailwind pula de\n // 68px (17) para 80px (20), então o valor precisa ser declarado.\n 18: \"72px\",\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n ...radii,\n },\n fontFamily,\n fontSize: Object.fromEntries(\n Object.entries(typeScale).map(([name, style]) => [\n name,\n [\n style.fontSize,\n {\n lineHeight: style.lineHeight,\n letterSpacing: style.letterSpacing,\n },\n ],\n ])\n ),\n boxShadow,\n backdropBlur,\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [tailwindcssAnimate],\n};\n\nexport default fracuiPreset;\n"],"names":["plugin","require$$0","filterDefault","values","key","tailwindcssAnimate","addUtilities","matchUtilities","theme","value","kebabKeys","scale","fracuiPreset","container","screens","blue","green","red","gray","subtitle","subtitleLight","alpha","radii","fontFamily","typeScale","name","style","boxShadow","backdropBlur"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-preset.js","sources":["../node_modules/tailwindcss-animate/index.js","../src/tailwind-preset.ts"],"sourcesContent":["const plugin = require(\"tailwindcss/plugin\")\n\nfunction filterDefault(values) {\n\treturn Object.fromEntries(\n\t\tObject.entries(values).filter(([key]) => key !== \"DEFAULT\"),\n\t)\n}\n\nmodule.exports = plugin(\n\t({ addUtilities, matchUtilities, theme }) => {\n\t\taddUtilities({\n\t\t\t\"@keyframes enter\": theme(\"keyframes.enter\"),\n\t\t\t\"@keyframes exit\": theme(\"keyframes.exit\"),\n\t\t\t\".animate-in\": {\n\t\t\t\tanimationName: \"enter\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-enter-opacity\": \"initial\",\n\t\t\t\t\"--tw-enter-scale\": \"initial\",\n\t\t\t\t\"--tw-enter-rotate\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-x\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-y\": \"initial\",\n\t\t\t},\n\t\t\t\".animate-out\": {\n\t\t\t\tanimationName: \"exit\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-exit-opacity\": \"initial\",\n\t\t\t\t\"--tw-exit-scale\": \"initial\",\n\t\t\t\t\"--tw-exit-rotate\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-x\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-y\": \"initial\",\n\t\t\t},\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"fade-in\": (value) => ({ \"--tw-enter-opacity\": value }),\n\t\t\t\t\"fade-out\": (value) => ({ \"--tw-exit-opacity\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationOpacity\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"zoom-in\": (value) => ({ \"--tw-enter-scale\": value }),\n\t\t\t\t\"zoom-out\": (value) => ({ \"--tw-exit-scale\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationScale\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"spin-in\": (value) => ({ \"--tw-enter-rotate\": value }),\n\t\t\t\t\"spin-out\": (value) => ({ \"--tw-exit-rotate\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationRotate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"slide-in-from-top\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-left\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-right\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-top\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-left\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-right\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": value,\n\t\t\t\t}),\n\t\t\t},\n\t\t\t{ values: theme(\"animationTranslate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ duration: (value) => ({ animationDuration: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationDuration\")) },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ delay: (value) => ({ animationDelay: value }) },\n\t\t\t{ values: theme(\"animationDelay\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ ease: (value) => ({ animationTimingFunction: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationTimingFunction\")) },\n\t\t)\n\n\t\taddUtilities({\n\t\t\t\".running\": { animationPlayState: \"running\" },\n\t\t\t\".paused\": { animationPlayState: \"paused\" },\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{ \"fill-mode\": (value) => ({ animationFillMode: value }) },\n\t\t\t{ values: theme(\"animationFillMode\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ direction: (value) => ({ animationDirection: value }) },\n\t\t\t{ values: theme(\"animationDirection\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ repeat: (value) => ({ animationIterationCount: value }) },\n\t\t\t{ values: theme(\"animationRepeat\") },\n\t\t)\n\t},\n\t{\n\t\ttheme: {\n\t\t\textend: {\n\t\t\t\tanimationDelay: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionDelay\"),\n\t\t\t\t}),\n\t\t\t\tanimationDuration: ({ theme }) => ({\n\t\t\t\t\t0: \"0ms\",\n\t\t\t\t\t...theme(\"transitionDuration\"),\n\t\t\t\t}),\n\t\t\t\tanimationTimingFunction: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionTimingFunction\"),\n\t\t\t\t}),\n\t\t\t\tanimationFillMode: {\n\t\t\t\t\tnone: \"none\",\n\t\t\t\t\tforwards: \"forwards\",\n\t\t\t\t\tbackwards: \"backwards\",\n\t\t\t\t\tboth: \"both\",\n\t\t\t\t},\n\t\t\t\tanimationDirection: {\n\t\t\t\t\tnormal: \"normal\",\n\t\t\t\t\treverse: \"reverse\",\n\t\t\t\t\talternate: \"alternate\",\n\t\t\t\t\t\"alternate-reverse\": \"alternate-reverse\",\n\t\t\t\t},\n\t\t\t\tanimationOpacity: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"opacity\"),\n\t\t\t\t}),\n\t\t\t\tanimationTranslate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"100%\",\n\t\t\t\t\t...theme(\"translate\"),\n\t\t\t\t}),\n\t\t\t\tanimationScale: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"scale\"),\n\t\t\t\t}),\n\t\t\t\tanimationRotate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"30deg\",\n\t\t\t\t\t...theme(\"rotate\"),\n\t\t\t\t}),\n\t\t\t\tanimationRepeat: {\n\t\t\t\t\t0: \"0\",\n\t\t\t\t\t1: \"1\",\n\t\t\t\t\tinfinite: \"infinite\",\n\t\t\t\t},\n\t\t\t\tkeyframes: {\n\t\t\t\t\tenter: {\n\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\topacity: \"var(--tw-enter-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\texit: {\n\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\topacity: \"var(--tw-exit-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n)\n","import type { Config } from \"tailwindcss\";\nimport tailwindcssAnimate from \"tailwindcss-animate\";\nimport {\n blue,\n green,\n red,\n gray,\n subtitle,\n subtitleLight,\n alpha,\n} from \"./tokens/colors\";\nimport { radii } from \"./tokens/theme\";\nimport { fontFamily, typeScale } from \"./tokens/typography\";\nimport { boxShadow, backdropBlur } from \"./tokens/elevation\";\nimport { screens, container } from \"./tokens/grid\";\n\n/**\n * Preset do Tailwind da FracUI.\n *\n * Repositórios consumidores (inclusive apps single-spa) devem importar\n * este preset no próprio `tailwind.config.js`/`.ts` para herdar cores\n * semânticas, paleta de marca, tipografia, raio de borda, elevação e\n * animações consistentes:\n *\n * ```ts\n * import fracuiPreset from \"@fracui/styleguide/tailwind-preset\";\n *\n * export default {\n * presets: [fracuiPreset],\n * content: [\n * \"./index.html\",\n * \"./src/**\\/*.{ts,tsx}\",\n * \"./node_modules/@fracui/styleguide/dist/**\\/*.js\",\n * ],\n * };\n * ```\n *\n * Este preset NÃO define `content` — cada repositório declara o próprio\n * `content`, mas deve incluir o pacote publicado (`dist/**\\/*.js`) para\n * que as classes usadas dentro dos componentes não sejam removidas\n * (purgadas) pelo Tailwind.\n *\n * O preset também NÃO declara as variáveis CSS que ele referencia. O app\n * consumidor precisa importar `@fracui/styleguide/styles.css` uma única\n * vez na raiz, ou declarar as variáveis de `src/styles/globals.css` por\n * conta própria.\n */\n\n/**\n * Converte as chaves camelCase dos tokens para kebab-case, que é a\n * convenção de nomes de classe do Tailwind.\n *\n * `gray.iceMedium` (bom em TypeScript) vira `bg-gray-ice-medium`\n * (bom em HTML), sem duplicar a definição das cores.\n *\n * `DEFAULT` é preservado: o Tailwind usa essa chave exata para gerar a\n * classe sem sufixo (`bg-gray`).\n */\nfunction kebabKeys<T extends Record<string, unknown>>(scale: T) {\n return Object.fromEntries(\n Object.entries(scale).map(([key, value]) => [\n key === \"DEFAULT\"\n ? key\n : key.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase(),\n value,\n ])\n );\n}\n\nconst fracuiPreset: Omit<Config, \"content\"> = {\n darkMode: [\"class\"],\n theme: {\n container,\n extend: {\n screens,\n colors: {\n // Tokens semânticos (contrato shadcn/ui).\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Cores de marca, sensíveis ao tema (trocam no `.dark`).\n brand: {\n DEFAULT: \"hsl(var(--brand-primary))\",\n medium: \"hsl(var(--brand-primary-medium))\",\n light: \"hsl(var(--brand-primary-light))\",\n },\n \"brand-secondary\": {\n DEFAULT: \"hsl(var(--brand-secondary))\",\n medium: \"hsl(var(--brand-secondary-medium))\",\n light: \"hsl(var(--brand-secondary-light))\",\n },\n\n // Estados de feedback: trio texto/ícone/fundo por estado.\n // Ex: `bg-error-bg text-error-text` + `text-error-icon` no ícone.\n error: {\n text: \"hsl(var(--error-text))\",\n icon: \"hsl(var(--error-icon))\",\n bg: \"hsl(var(--error-bg))\",\n },\n alert: {\n text: \"hsl(var(--alert-text))\",\n icon: \"hsl(var(--alert-icon))\",\n bg: \"hsl(var(--alert-bg))\",\n },\n warning: {\n text: \"hsl(var(--warning-text))\",\n icon: \"hsl(var(--warning-icon))\",\n bg: \"hsl(var(--warning-bg))\",\n },\n success: {\n text: \"hsl(var(--success-text))\",\n icon: \"hsl(var(--success-icon))\",\n bg: \"hsl(var(--success-bg))\",\n },\n info: {\n text: \"hsl(var(--info-text))\",\n icon: \"hsl(var(--info-icon))\",\n bg: \"hsl(var(--info-bg))\",\n },\n\n // Estado desabilitado, sensível ao tema.\n disabled: {\n DEFAULT: \"hsl(var(--disabled-bg))\",\n foreground: \"hsl(var(--disabled-foreground))\",\n },\n\n // Escalas primitivas, fixas (não mudam com o tema).\n // Disponíveis como bg-blue-3, text-gray-medium, bg-green-dark...\n blue,\n green,\n red,\n gray: kebabKeys(gray),\n subtitle: kebabKeys(subtitle),\n \"subtitle-light\": kebabKeys(subtitleLight),\n alpha,\n },\n spacing: {\n // 72px: altura da Navbar e do Player no Figma. O Tailwind pula de\n // 68px (17) para 80px (20), então o valor precisa ser declarado.\n 18: \"72px\",\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n ...radii,\n },\n fontFamily,\n fontSize: Object.fromEntries(\n Object.entries(typeScale).map(([name, style]) => [\n name,\n [\n style.fontSize,\n {\n lineHeight: style.lineHeight,\n letterSpacing: style.letterSpacing,\n },\n ],\n ])\n ),\n boxShadow,\n backdropBlur,\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [tailwindcssAnimate],\n};\n\nexport default fracuiPreset;\n"],"names":["plugin","require$$0","filterDefault","values","key","tailwindcssAnimate","addUtilities","matchUtilities","theme","value","kebabKeys","scale","fracuiPreset","container","screens","blue","green","red","gray","subtitle","subtitleLight","alpha","radii","fontFamily","typeScale","name","style","boxShadow","backdropBlur"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"tailwind-preset.js","sources":["../node_modules/tailwindcss-animate/index.js","../src/tailwind-preset.ts"],"sourcesContent":["const plugin = require(\"tailwindcss/plugin\")\n\nfunction filterDefault(values) {\n\treturn Object.fromEntries(\n\t\tObject.entries(values).filter(([key]) => key !== \"DEFAULT\"),\n\t)\n}\n\nmodule.exports = plugin(\n\t({ addUtilities, matchUtilities, theme }) => {\n\t\taddUtilities({\n\t\t\t\"@keyframes enter\": theme(\"keyframes.enter\"),\n\t\t\t\"@keyframes exit\": theme(\"keyframes.exit\"),\n\t\t\t\".animate-in\": {\n\t\t\t\tanimationName: \"enter\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-enter-opacity\": \"initial\",\n\t\t\t\t\"--tw-enter-scale\": \"initial\",\n\t\t\t\t\"--tw-enter-rotate\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-x\": \"initial\",\n\t\t\t\t\"--tw-enter-translate-y\": \"initial\",\n\t\t\t},\n\t\t\t\".animate-out\": {\n\t\t\t\tanimationName: \"exit\",\n\t\t\t\tanimationDuration: theme(\"animationDuration.DEFAULT\"),\n\t\t\t\t\"--tw-exit-opacity\": \"initial\",\n\t\t\t\t\"--tw-exit-scale\": \"initial\",\n\t\t\t\t\"--tw-exit-rotate\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-x\": \"initial\",\n\t\t\t\t\"--tw-exit-translate-y\": \"initial\",\n\t\t\t},\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"fade-in\": (value) => ({ \"--tw-enter-opacity\": value }),\n\t\t\t\t\"fade-out\": (value) => ({ \"--tw-exit-opacity\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationOpacity\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"zoom-in\": (value) => ({ \"--tw-enter-scale\": value }),\n\t\t\t\t\"zoom-out\": (value) => ({ \"--tw-exit-scale\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationScale\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"spin-in\": (value) => ({ \"--tw-enter-rotate\": value }),\n\t\t\t\t\"spin-out\": (value) => ({ \"--tw-exit-rotate\": value }),\n\t\t\t},\n\t\t\t{ values: theme(\"animationRotate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{\n\t\t\t\t\"slide-in-from-top\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-left\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-in-from-right\": (value) => ({\n\t\t\t\t\t\"--tw-enter-translate-x\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-top\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-bottom\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-y\": value,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-left\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": `-${value}`,\n\t\t\t\t}),\n\t\t\t\t\"slide-out-to-right\": (value) => ({\n\t\t\t\t\t\"--tw-exit-translate-x\": value,\n\t\t\t\t}),\n\t\t\t},\n\t\t\t{ values: theme(\"animationTranslate\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ duration: (value) => ({ animationDuration: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationDuration\")) },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ delay: (value) => ({ animationDelay: value }) },\n\t\t\t{ values: theme(\"animationDelay\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ ease: (value) => ({ animationTimingFunction: value }) },\n\t\t\t{ values: filterDefault(theme(\"animationTimingFunction\")) },\n\t\t)\n\n\t\taddUtilities({\n\t\t\t\".running\": { animationPlayState: \"running\" },\n\t\t\t\".paused\": { animationPlayState: \"paused\" },\n\t\t})\n\n\t\tmatchUtilities(\n\t\t\t{ \"fill-mode\": (value) => ({ animationFillMode: value }) },\n\t\t\t{ values: theme(\"animationFillMode\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ direction: (value) => ({ animationDirection: value }) },\n\t\t\t{ values: theme(\"animationDirection\") },\n\t\t)\n\n\t\tmatchUtilities(\n\t\t\t{ repeat: (value) => ({ animationIterationCount: value }) },\n\t\t\t{ values: theme(\"animationRepeat\") },\n\t\t)\n\t},\n\t{\n\t\ttheme: {\n\t\t\textend: {\n\t\t\t\tanimationDelay: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionDelay\"),\n\t\t\t\t}),\n\t\t\t\tanimationDuration: ({ theme }) => ({\n\t\t\t\t\t0: \"0ms\",\n\t\t\t\t\t...theme(\"transitionDuration\"),\n\t\t\t\t}),\n\t\t\t\tanimationTimingFunction: ({ theme }) => ({\n\t\t\t\t\t...theme(\"transitionTimingFunction\"),\n\t\t\t\t}),\n\t\t\t\tanimationFillMode: {\n\t\t\t\t\tnone: \"none\",\n\t\t\t\t\tforwards: \"forwards\",\n\t\t\t\t\tbackwards: \"backwards\",\n\t\t\t\t\tboth: \"both\",\n\t\t\t\t},\n\t\t\t\tanimationDirection: {\n\t\t\t\t\tnormal: \"normal\",\n\t\t\t\t\treverse: \"reverse\",\n\t\t\t\t\talternate: \"alternate\",\n\t\t\t\t\t\"alternate-reverse\": \"alternate-reverse\",\n\t\t\t\t},\n\t\t\t\tanimationOpacity: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"opacity\"),\n\t\t\t\t}),\n\t\t\t\tanimationTranslate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"100%\",\n\t\t\t\t\t...theme(\"translate\"),\n\t\t\t\t}),\n\t\t\t\tanimationScale: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: 0,\n\t\t\t\t\t...theme(\"scale\"),\n\t\t\t\t}),\n\t\t\t\tanimationRotate: ({ theme }) => ({\n\t\t\t\t\tDEFAULT: \"30deg\",\n\t\t\t\t\t...theme(\"rotate\"),\n\t\t\t\t}),\n\t\t\t\tanimationRepeat: {\n\t\t\t\t\t0: \"0\",\n\t\t\t\t\t1: \"1\",\n\t\t\t\t\tinfinite: \"infinite\",\n\t\t\t\t},\n\t\t\t\tkeyframes: {\n\t\t\t\t\tenter: {\n\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\topacity: \"var(--tw-enter-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\texit: {\n\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\topacity: \"var(--tw-exit-opacity, 1)\",\n\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\"translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n)\n","import type { Config } from \"tailwindcss\";\nimport tailwindcssAnimate from \"tailwindcss-animate\";\nimport {\n blue,\n green,\n red,\n gray,\n subtitle,\n subtitleLight,\n alpha,\n} from \"./tokens/colors\";\nimport { radii } from \"./tokens/theme\";\nimport { fontFamily, typeScale } from \"./tokens/typography\";\nimport { boxShadow, backdropBlur } from \"./tokens/elevation\";\nimport { screens, container } from \"./tokens/grid\";\n\n/**\n * Preset do Tailwind da FracUI.\n *\n * Repositórios consumidores (inclusive apps single-spa) devem importar\n * este preset no próprio `tailwind.config.js`/`.ts` para herdar cores\n * semânticas, paleta de marca, tipografia, raio de borda, elevação e\n * animações consistentes:\n *\n * ```ts\n * import fracuiPreset from \"@fracui/styleguide/tailwind-preset\";\n *\n * export default {\n * presets: [fracuiPreset],\n * content: [\n * \"./index.html\",\n * \"./src/**\\/*.{ts,tsx}\",\n * \"./node_modules/@fracui/styleguide/dist/**\\/*.js\",\n * ],\n * };\n * ```\n *\n * Este preset NÃO define `content` — cada repositório declara o próprio\n * `content`, mas deve incluir o pacote publicado (`dist/**\\/*.js`) para\n * que as classes usadas dentro dos componentes não sejam removidas\n * (purgadas) pelo Tailwind.\n *\n * O preset também NÃO declara as variáveis CSS que ele referencia. O app\n * consumidor com Tailwind próprio precisa importar\n * `@fracui/styleguide/tokens.css` (só as variáveis) uma única vez na\n * raiz. `styles.css` também as traz, mas junto de preflight e das classes\n * já compiladas dos componentes — é para quem não usa Tailwind.\n */\n\n/**\n * Converte as chaves camelCase dos tokens para kebab-case, que é a\n * convenção de nomes de classe do Tailwind.\n *\n * `gray.iceMedium` (bom em TypeScript) vira `bg-gray-ice-medium`\n * (bom em HTML), sem duplicar a definição das cores.\n *\n * `DEFAULT` é preservado: o Tailwind usa essa chave exata para gerar a\n * classe sem sufixo (`bg-gray`).\n */\nfunction kebabKeys<T extends Record<string, unknown>>(scale: T) {\n return Object.fromEntries(\n Object.entries(scale).map(([key, value]) => [\n key === \"DEFAULT\"\n ? key\n : key.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase(),\n value,\n ])\n );\n}\n\nconst fracuiPreset: Omit<Config, \"content\"> = {\n darkMode: [\"class\"],\n theme: {\n container,\n extend: {\n screens,\n colors: {\n // Tokens semânticos (contrato shadcn/ui).\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Cores de marca, sensíveis ao tema (trocam no `.dark`).\n brand: {\n DEFAULT: \"hsl(var(--brand-primary))\",\n medium: \"hsl(var(--brand-primary-medium))\",\n light: \"hsl(var(--brand-primary-light))\",\n },\n \"brand-secondary\": {\n DEFAULT: \"hsl(var(--brand-secondary))\",\n medium: \"hsl(var(--brand-secondary-medium))\",\n light: \"hsl(var(--brand-secondary-light))\",\n },\n\n // Estados de feedback: trio texto/ícone/fundo por estado.\n // Ex: `bg-error-bg text-error-text` + `text-error-icon` no ícone.\n error: {\n text: \"hsl(var(--error-text))\",\n icon: \"hsl(var(--error-icon))\",\n bg: \"hsl(var(--error-bg))\",\n },\n alert: {\n text: \"hsl(var(--alert-text))\",\n icon: \"hsl(var(--alert-icon))\",\n bg: \"hsl(var(--alert-bg))\",\n },\n warning: {\n text: \"hsl(var(--warning-text))\",\n icon: \"hsl(var(--warning-icon))\",\n bg: \"hsl(var(--warning-bg))\",\n },\n success: {\n text: \"hsl(var(--success-text))\",\n icon: \"hsl(var(--success-icon))\",\n bg: \"hsl(var(--success-bg))\",\n },\n info: {\n text: \"hsl(var(--info-text))\",\n icon: \"hsl(var(--info-icon))\",\n bg: \"hsl(var(--info-bg))\",\n },\n\n // Estado desabilitado, sensível ao tema.\n disabled: {\n DEFAULT: \"hsl(var(--disabled-bg))\",\n foreground: \"hsl(var(--disabled-foreground))\",\n },\n\n // Escalas primitivas, fixas (não mudam com o tema).\n // Disponíveis como bg-blue-3, text-gray-medium, bg-green-dark...\n blue,\n green,\n red,\n gray: kebabKeys(gray),\n subtitle: kebabKeys(subtitle),\n \"subtitle-light\": kebabKeys(subtitleLight),\n alpha,\n },\n spacing: {\n // 72px: altura da Navbar e do Player no Figma. O Tailwind pula de\n // 68px (17) para 80px (20), então o valor precisa ser declarado.\n 18: \"72px\",\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n ...radii,\n },\n fontFamily,\n fontSize: Object.fromEntries(\n Object.entries(typeScale).map(([name, style]) => [\n name,\n [\n style.fontSize,\n {\n lineHeight: style.lineHeight,\n letterSpacing: style.letterSpacing,\n },\n ],\n ])\n ),\n boxShadow,\n backdropBlur,\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [tailwindcssAnimate],\n};\n\nexport default fracuiPreset;\n"],"names":["plugin","require$$0","filterDefault","values","key","tailwindcssAnimate","addUtilities","matchUtilities","theme","value","kebabKeys","scale","fracuiPreset","container","screens","blue","green","red","gray","subtitle","subtitleLight","alpha","radii","fontFamily","typeScale","name","style","boxShadow","backdropBlur"],"mappings":"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","x_google_ignoreList":[0]}
@@ -7,7 +7,7 @@
7
7
  * trocando as variáveis, sem trocar classes.
8
8
  *
9
9
  * IMPORTANTE: estes valores precisam ficar em sincronia com
10
- * `src/styles/globals.css`. Se alterar um valor aqui, atualize o CSS
10
+ * `src/styles/tokens.css`. Se alterar um valor aqui, atualize o CSS
11
11
  * correspondente (e vice-versa).
12
12
  *
13
13
  * Os nomes seguem o contrato do shadcn/ui (`background`, `primary`,
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.cjs","sources":["../src/tokens/colors.ts","../src/tokens/theme.ts","../src/tokens/typography.ts","../src/tokens/elevation.ts","../src/tokens/grid.ts"],"sourcesContent":["/**\n * Paleta primitiva de cores da FracUI.\n *\n * Extraída do Figma \"Design System - 2026\"\n * (file key `J15QTL7SaxlobMRnPtOimR`, página \"↳ Cores\").\n *\n * Estas são as cores \"cruas\" (hex) que alimentam os tokens semânticos em\n * `theme.ts`. Use estas escalas diretamente apenas quando não houver um\n * token semântico equivalente (ex: gráficos, ilustrações, e-mails).\n *\n * Para UI de produto, prefira sempre os tokens semânticos\n * (`primary`, `background`, `destructive`, etc.) expostos via classes do\n * Tailwind (`bg-primary`, `text-muted-foreground`...).\n */\n\n/** Escala de 5 tons claros (`Shades/` no Figma), do mais claro ao mais escuro. */\nexport type ShadeScale = {\n 1: string;\n 2: string;\n 3: string;\n 4: string;\n 5: string;\n};\n\n/** Trio de cores de um estado de feedback, conforme modelado no Figma. */\nexport type FeedbackTone = {\n /** Cor do texto sobre o fundo `bg`. */\n text: string;\n /** Cor de ícones e bordas de destaque. */\n icon: string;\n /** Cor de fundo da superfície do alerta. */\n bg: string;\n};\n\n/**\n * Azul institucional — `Primary/` + `Shades/Blue` no Figma.\n *\n * `dark` é a cor de marca principal (usada em `--primary` no tema claro);\n * `light` é a variação usada sobre fundos escuros.\n */\nexport const blue = {\n 1: \"#E5F0FF\",\n 2: \"#CBE0FE\",\n 3: \"#A5C8FE\",\n 4: \"#7FB2FE\",\n 5: \"#5C93E5\",\n light: \"#3D76CC\",\n medium: \"#255091\",\n dark: \"#142C50\",\n} as const;\n\n/**\n * Verde institucional — `Secondary/` + `Shades/Green` no Figma.\n *\n * É a cor de apoio da marca, NÃO o estado de sucesso: para \"deu certo\",\n * use `feedback.success`.\n */\nexport const green = {\n 1: \"#F4F9ED\",\n 2: \"#E2F0D1\",\n 3: \"#D1E7B7\",\n 4: \"#B9DB92\",\n 5: \"#A2CF6E\",\n light: \"#84C03F\",\n medium: \"#6AA329\",\n dark: \"#508217\",\n} as const;\n\n/**\n * Escala vermelha de intensidade — conjunto `Tags` no Figma.\n *\n * Usada apenas para graduar a força do El Niño, do mais fraco ao mais\n * forte. Não está na página de cores do arquivo: existe só dentro do\n * conjunto `Tags`, e por isso não tem os cinco passos das outras escalas.\n *\n * A contraparte da La Niña são os quatro primeiros passos de `blue`, que\n * já existiam na paleta — só o lado vermelho precisava ser nomeado.\n */\nexport const red = {\n 1: \"#F9EAEA\",\n 2: \"#F8CECE\",\n 3: \"#EAA4A4\",\n 4: \"#E18282\",\n} as const;\n\n/**\n * Neutros — `Basics/` no Figma.\n *\n * Rampa contínua do branco puro ao quase-preto. `white`/`ice`/`iceMedium`\n * são superfícies; `light`/`lightMedium` são bordas e divisores;\n * `DEFAULT`/`medium`/`mediumDark`/`dark` são níveis de texto.\n */\nexport const gray = {\n white: \"#FFFFFF\",\n ice: \"#FAFAFA\",\n iceMedium: \"#F5F5F5\",\n light: \"#E5E5E5\",\n lightMedium: \"#BFBFBF\",\n DEFAULT: \"#999999\",\n medium: \"#737373\",\n mediumDark: \"#333333\",\n dark: \"#202020\",\n} as const;\n\n/**\n * Estados de feedback — `Feedback/` no Figma.\n *\n * Cada família é um matiz em três passos fixos de saturação/luminosidade:\n *\n * | slot | S | L |\n * | ------ | ------ | ------ |\n * | `text` | 82.3% | 22.2% |\n * | `icon` | 58.4% | 52.0% |\n * | `bg` | 100% | 92.5% |\n *\n * `success` é a exceção deliberada: seus tons foram dessaturados à mão no\n * Figma (S≈48%) para não brigar com o verde de marca. Mantido como está.\n *\n * Ver `FIGMA_OVERRIDES` para as divergências resolvidas na extração.\n */\nexport const feedback = {\n error: {\n text: \"#670A1A\",\n icon: \"#CC3D55\",\n bg: \"#FFD9DF\",\n },\n alert: {\n text: \"#672A0A\",\n icon: \"#CC6D3D\",\n bg: \"#FFE6D9\",\n },\n warning: {\n text: \"#67480A\",\n icon: \"#CC9C3D\",\n bg: \"#FFF2D9\",\n },\n success: {\n text: \"#246724\",\n icon: \"#70CC70\",\n bg: \"#D9FFD9\",\n },\n info: {\n text: \"#0A2967\",\n icon: \"#3D6DCC\",\n bg: \"#D9E6FF\",\n },\n} as const satisfies Record<string, FeedbackTone>;\n\n/**\n * Superfícies do tema escuro — página \"↳ Light e Dark Mode\" no Figma.\n *\n * Não são neutros cinzas: são azuis muito escuros, para casar com o azul\n * de marca. `outline` é a cor de borda/foco sobre esses fundos.\n */\nexport const dark = {\n bg: \"#040814\",\n surface: \"#090D1B\",\n elevated: \"#0B1325\",\n outline: \"#0E3571\",\n} as const;\n\n/**\n * Cores de legenda de mapa — `Subtitle/` no Figma.\n *\n * Paleta categórica para séries e marcadores geoespaciais. Cada cor tem\n * uma variação `light` para estados desabilitados/hover.\n */\nexport const subtitle = {\n red: \"#DA3C36\",\n orange: \"#D9822B\",\n yellow: \"#F2F218\",\n green: \"#4D9966\",\n blueLight: \"#51CFE3\",\n blueMedium: \"#2554B2\",\n purple: \"#634CD9\",\n} as const;\n\n/** Variações claras das cores de legenda — `Subtitle/Light/` no Figma. */\nexport const subtitleLight = {\n red: \"#F27F7A\",\n orange: \"#FFBF7F\",\n yellow: \"#FEFF80\",\n green: \"#98D9AD\",\n blueLight: \"#99CCFF\",\n blueMedium: \"#8CB2FF\",\n purple: \"#9985FF\",\n} as const;\n\n/**\n * Preto com transparência — `Transparency black/` no Figma.\n *\n * Usado em overlays de modal, headers com blur e estados de pressão.\n */\nexport const alpha = {\n 4: \"rgba(0, 0, 0, 0.04)\",\n 8: \"rgba(0, 0, 0, 0.08)\",\n 16: \"rgba(0, 0, 0, 0.16)\",\n 25: \"rgba(0, 0, 0, 0.25)\",\n 40: \"rgba(0, 0, 0, 0.4)\",\n 60: \"rgba(0, 0, 0, 0.6)\",\n 80: \"rgba(0, 0, 0, 0.8)\",\n} as const;\n\n/**\n * Divergências entre o rótulo e o preenchimento real de swatches no Figma,\n * e qual valor esta biblioteca adotou.\n *\n * Documentado aqui para que a próxima extração não \"corrija\" de volta para\n * o valor errado. Enquanto o Figma não for arrumado, ele e este arquivo\n * discordam nestes pontos — de propósito.\n */\nexport const FIGMA_OVERRIDES = [\n {\n swatch: \"Basics/Ice\",\n figmaFill: \"#E5E5E5\",\n figmaLabel: \"#FAFAFA\",\n adopted: \"#FAFAFA\",\n reason: \"o fill duplica Gray Light; o rótulo completa a rampa de neutros\",\n },\n {\n swatch: \"Feedback/Text Alert Orange\",\n figmaFill: \"#693014\",\n figmaLabel: \"#0A2967\",\n adopted: \"#672A0A\",\n reason:\n \"rótulo é cópia do Text Info Blue; fill está fora dos passos S/L da família. Derivado do matiz 20.3° nos passos canônicos\",\n },\n {\n swatch: \"Feedback/Icon Alert Orange\",\n figmaFill: \"#DD662B\",\n figmaLabel: \"#CC6D3D\",\n adopted: \"#CC6D3D\",\n reason: \"o rótulo bate exatamente com os passos S/L da família; o fill não\",\n },\n {\n swatch: \"Feedback/BG Alert Orange\",\n figmaFill: \"#FFD6C1\",\n figmaLabel: \"#D9E6FF\",\n adopted: \"#FFE6D9\",\n reason:\n \"rótulo é cópia do BG Info Blue; fill está em L87.8% em vez de L92.5%\",\n },\n {\n swatch: \"Subtitle/Blue Medium\",\n figmaFill: \"#E336B4\",\n figmaLabel: \"#2554B2\",\n adopted: \"#2554B2\",\n reason: \"o fill é magenta, incompatível com o nome da cor\",\n },\n {\n swatch: \"Subtitle/Blue Light\",\n figmaFill: \"#51CFE3\",\n figmaLabel: \"#5798D9\",\n adopted: \"#51CFE3\",\n reason:\n \"o fill é ciano e o rótulo é azul. Adotado o fill, que é o que renderiza hoje nas legendas de mapa e o que dá matiz distinto do Blue Medium — mas a divergência é grande o bastante para valer confirmação com o design\",\n },\n {\n swatch: \"Subtitle/Light/Blue Medium\",\n figmaFill: \"#8CB2FF\",\n figmaLabel: \"#8CA9FF\",\n adopted: \"#8CB2FF\",\n reason: \"diferença de um passo de matiz; adotado o fill, que é o que renderiza\",\n },\n {\n swatch: \"Subtitle/Light/Yellow\",\n figmaFill: \"#FEFF80\",\n figmaLabel: \"#E9E98E\",\n adopted: \"#FEFF80\",\n reason: \"adotado o fill; o rótulo é mais dessaturado e não acompanha o resto da família Light\",\n },\n] as const;\n\nexport const colors = {\n blue,\n green,\n red,\n gray,\n feedback,\n dark,\n subtitle,\n subtitleLight,\n alpha,\n} as const;\n","/**\n * Tokens semânticos (tema) da FracUI.\n *\n * Cada valor é um triplo HSL (\"H S% L%\", sem o wrapper hsl()) para poder\n * ser injetado em variáveis CSS e consumido pelo Tailwind como\n * `hsl(var(--nome))`. Isso permite alternar temas (claro/escuro) apenas\n * trocando as variáveis, sem trocar classes.\n *\n * IMPORTANTE: estes valores precisam ficar em sincronia com\n * `src/styles/globals.css`. Se alterar um valor aqui, atualize o CSS\n * correspondente (e vice-versa).\n *\n * Os nomes seguem o contrato do shadcn/ui (`background`, `primary`,\n * `muted`...) para que os componentes existentes continuem funcionando,\n * mas os VALORES vêm da paleta Fractal em `colors.ts`.\n *\n * `primary` é o azul INTERATIVO (`blue.light`, #3D76CC), não o azul\n * institucional. O Figma usa #3D76CC como fundo de repouso do botão\n * primário, do switch ligado, do FAB, da aba ativa e do link; #142C50\n * aparece como estado pressionado/focado e como fundo de tooltip. A cor\n * institucional continua disponível como `--brand-primary`.\n */\n\nexport type SemanticTheme = {\n background: string;\n foreground: string;\n card: string;\n cardForeground: string;\n popover: string;\n popoverForeground: string;\n primary: string;\n primaryForeground: string;\n secondary: string;\n secondaryForeground: string;\n muted: string;\n mutedForeground: string;\n accent: string;\n accentForeground: string;\n destructive: string;\n destructiveForeground: string;\n border: string;\n input: string;\n ring: string;\n};\n\n/**\n * Camada Fractal sobre o contrato do shadcn.\n *\n * `brand*` expõe o azul e o verde institucionais como tokens semânticos\n * (o `primary` do shadcn é consumido por dezenas de componentes e nem\n * sempre é o lugar certo para a cor de marca).\n *\n * `*Text`/`*Icon`/`*Bg` reproduzem o modelo de feedback do Figma, em que\n * cada estado tem três cores coordenadas em vez de uma só.\n */\nexport type BrandTheme = {\n brandPrimary: string;\n brandPrimaryMedium: string;\n brandPrimaryLight: string;\n brandSecondary: string;\n brandSecondaryMedium: string;\n brandSecondaryLight: string;\n\n errorText: string;\n errorIcon: string;\n errorBg: string;\n\n alertText: string;\n alertIcon: string;\n alertBg: string;\n\n warningText: string;\n warningIcon: string;\n warningBg: string;\n\n successText: string;\n successIcon: string;\n successBg: string;\n\n infoText: string;\n infoIcon: string;\n infoBg: string;\n\n disabledForeground: string;\n disabledBg: string;\n};\n\nexport const lightTheme: SemanticTheme = {\n background: \"0 0% 100%\", // gray.white #FFFFFF\n foreground: \"0 0% 12.5%\", // gray.dark #202020\n card: \"0 0% 100%\", // gray.white #FFFFFF\n cardForeground: \"0 0% 12.5%\", // gray.dark #202020\n popover: \"0 0% 100%\", // gray.white #FFFFFF\n popoverForeground: \"0 0% 12.5%\", // gray.dark #202020\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n secondaryForeground: \"0 0% 20%\", // gray.mediumDark #333333\n muted: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n mutedForeground: \"0 0% 45.1%\", // gray.medium #737373\n accent: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n accentForeground: \"216 60% 19.6%\", // blue.dark #142C50\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"0 0% 89.8%\", // gray.light #E5E5E5\n input: \"0 0% 89.8%\", // gray.light #E5E5E5\n ring: \"216.1 58.4% 52%\", // blue.light #3D76CC\n};\n\nexport const darkTheme: SemanticTheme = {\n background: \"225 66.7% 4.7%\", // dark.bg #040814\n foreground: \"0 0% 100%\", // gray.white #FFFFFF\n card: \"226.7 50% 7.1%\", // dark.surface #090D1B\n cardForeground: \"0 0% 100%\", // gray.white #FFFFFF\n popover: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n popoverForeground: \"0 0% 100%\", // gray.white #FFFFFF\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n secondaryForeground: \"0 0% 89.8%\", // gray.light #E5E5E5\n muted: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n mutedForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n accent: \"216 60% 19.6%\", // blue.dark #142C50\n accentForeground: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"216 60% 19.6%\", // blue.dark #142C50\n input: \"216 60% 19.6%\", // blue.dark #142C50\n ring: \"216.4 78% 24.9%\", // dark.outline #0E3571\n};\n\nexport const lightBrand: BrandTheme = {\n brandPrimary: \"216 60% 19.6%\", // blue.dark #142C50\n brandPrimaryMedium: \"216.1 59.3% 35.7%\", // blue.medium #255091\n brandPrimaryLight: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandSecondary: \"88 69.9% 30%\", // green.dark #508217\n brandSecondaryMedium: \"88 59.8% 40%\", // green.medium #6AA329\n brandSecondaryLight: \"87.9 50.6% 50%\", // green.light #84C03F\n\n errorText: \"349.7 82.3% 22.2%\", // #670A1A\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"350.5 100% 92.5%\", // #FFD9DF\n\n alertText: \"20.6 82.3% 22.2%\", // #672A0A\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.5 100% 92.5%\", // #FFE6D9\n\n warningText: \"40 82.3% 22.2%\", // #67480A\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"39.5 100% 92.5%\", // #FFF2D9\n\n successText: \"120 48.2% 27.3%\", // #246724\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 100% 92.5%\", // #D9FFD9\n\n infoText: \"220 82.3% 22.2%\", // #0A2967\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"219.5 100% 92.5%\", // #D9E6FF\n\n disabledForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n disabledBg: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n};\n\n/**\n * Feedback no tema escuro.\n *\n * ATENÇÃO: o Figma não especifica os estados de feedback sobre fundo\n * escuro. Estes valores são DERIVADOS, trocando os papéis de `text` e\n * `bg` (o tom escuro vira superfície, o tom claro vira texto) e mantendo\n * o `icon`, que já tem contraste suficiente nos dois temas.\n *\n * Substitua por valores especificados assim que a página de dark mode do\n * Figma cobrir feedback.\n */\nexport const darkBrand: BrandTheme = {\n brandPrimary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandPrimaryMedium: \"215.9 72.5% 62.9%\", // blue.5 #5C93E5\n brandPrimaryLight: \"215.9 98.4% 74.7%\", // blue.4 #7FB2FE\n brandSecondary: \"87.9 50.6% 50%\", // green.light #84C03F\n brandSecondaryMedium: \"87.8 50.3% 62.2%\", // green.5 #A2CF6E\n brandSecondaryLight: \"87.9 50.3% 71.6%\", // green.4 #B9DB92\n\n errorText: \"350.5 100% 92.5%\", // #FFD9DF\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"349.7 82.3% 22.2%\", // #670A1A\n\n alertText: \"20.5 100% 92.5%\", // #FFE6D9\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.6 82.3% 22.2%\", // #672A0A\n\n warningText: \"39.5 100% 92.5%\", // #FFF2D9\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"40 82.3% 22.2%\", // #67480A\n\n successText: \"120 100% 92.5%\", // #D9FFD9\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 48.2% 27.3%\", // #246724\n\n infoText: \"219.5 100% 92.5%\", // #D9E6FF\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"220 82.3% 22.2%\", // #0A2967\n\n /*\n * DERIVADO. O #BFBFBF que o Figma usa para desabilitado só funciona\n * sobre fundo claro: no escuro ele fica MAIS claro que o texto normal,\n * e o elemento desabilitado passa a chamar mais atenção que o ativo.\n * Aqui o desabilitado escurece, mantendo a relação de hierarquia.\n */\n disabledForeground: \"0 0% 45.1%\", // gray.medium #737373\n disabledBg: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n};\n\n/**\n * Raio de borda base, usado por `rounded-lg`/`rounded-md`/`rounded-sm`\n * via preset. 8px é o valor de canto mais usado em componentes no Figma.\n */\nexport const radius = \"0.5rem\";\n\n/**\n * Escala de raios do Figma, por frequência de uso no arquivo:\n * 4px (1047x), 12px (925x), 8px (787x), 16px (265x), 25px (215x),\n * 30px (124x), 40px (68x).\n *\n * `sm`/`md`/`lg` continuam derivados de `--radius` (contrato shadcn) e\n * por isso não aparecem aqui.\n */\nexport const radii = {\n xs: \"4px\",\n xl: \"12px\",\n \"2xl\": \"16px\",\n \"3xl\": \"30px\",\n \"4xl\": \"40px\",\n pill: \"9999px\",\n} as const;\n\nexport const theme = {\n light: lightTheme,\n dark: darkTheme,\n lightBrand,\n darkBrand,\n radius,\n radii,\n} as const;\n","/**\n * Tokens de tipografia da FracUI.\n *\n * Extraídos dos 28 estilos de texto publicados no Figma\n * \"Design System - 2026\" (página \"↳ Tipografia\").\n *\n * O peso é um eixo separado do tamanho: cada estilo abaixo existe em\n * `regular` (400) e `medium` (500) com as mesmas métricas, exceto onde\n * anotado. Por isso a escala expõe tamanho/entrelinha/tracking e deixa o\n * peso para as utilidades `font-normal` / `font-medium`.\n */\n\n/** Pilha padrão de fontes. Todo o design system usa Roboto. */\nexport const fontFamily = {\n sans: [\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"'Segoe UI'\",\n \"sans-serif\",\n ],\n /**\n * ATENÇÃO: no Figma, `h1` e `h2` no peso medium estão em Rubik, apesar\n * de os estilos se chamarem `roboto/medium/h1` e `roboto/medium/h2`.\n * Exposto aqui para reproduzir fielmente o design; confirme com o time\n * de design se é intencional antes de usar em produção.\n */\n display: [\n \"Rubik\",\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"sans-serif\",\n ],\n} as const;\n\nexport type TypeStyle = {\n /** `font-size` em px. */\n fontSize: string;\n /** `line-height` em px. */\n lineHeight: string;\n /** `letter-spacing` em px. */\n letterSpacing: string;\n /** Presente apenas nos estilos que o Figma marca como caixa alta. */\n textTransform?: \"uppercase\";\n};\n\n/**\n * Escala tipográfica.\n *\n * Consumida pelo preset como `theme.extend.fontSize`, o que gera as\n * classes `text-h1`, `text-body-1`, `text-caption`, etc.\n */\nexport const typeScale = {\n h1: {\n fontSize: \"36px\",\n lineHeight: \"37.8px\",\n letterSpacing: \"0px\",\n },\n h2: {\n fontSize: \"30px\",\n lineHeight: \"30px\",\n letterSpacing: \"0px\",\n },\n h3: {\n fontSize: \"24px\",\n lineHeight: \"24px\",\n letterSpacing: \"0.24px\",\n },\n h4: {\n fontSize: \"20px\",\n lineHeight: \"27px\",\n letterSpacing: \"0.2px\",\n },\n h5: {\n fontSize: \"18px\",\n lineHeight: \"24.3px\",\n letterSpacing: \"0.18px\",\n },\n \"subtitle-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.32px\",\n },\n \"subtitle-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n },\n \"body-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-allcaps\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n textTransform: \"uppercase\",\n },\n button: {\n fontSize: \"14px\",\n lineHeight: \"16.1px\",\n letterSpacing: \"1.4px\",\n textTransform: \"uppercase\",\n },\n caption: {\n fontSize: \"12px\",\n lineHeight: \"14.4px\",\n letterSpacing: \"0.48px\",\n },\n link: {\n fontSize: \"14px\",\n lineHeight: \"18.2px\",\n letterSpacing: \"0.56px\",\n },\n} as const satisfies Record<string, TypeStyle>;\n\n/**\n * Variação de tracking dos estilos `medium` que diferem do `regular`.\n *\n * Só `h1`, `h2`, `h3` e `caption` mudam de tracking ao trocar de peso; os\n * demais são idênticos. Aplique manualmente quando usar `font-medium`\n * nesses quatro estilos.\n */\nexport const mediumTracking = {\n h1: \"0.72px\",\n h2: \"1.12px\",\n h3: \"0.48px\",\n caption: \"0.36px\",\n} as const;\n\n/**\n * `h2` no peso medium também muda de tamanho e entrelinha (28px/39.2px,\n * contra 30px/30px do regular), além de trocar para a família `display`.\n */\nexport const h2Medium: TypeStyle = {\n fontSize: \"28px\",\n lineHeight: \"39.2px\",\n letterSpacing: \"1.12px\",\n};\n\nexport const typography = {\n fontFamily,\n typeScale,\n mediumTracking,\n h2Medium,\n} as const;\n","/**\n * Sistema de elevação da FracUI.\n *\n * Extraído dos 20 estilos de efeito do Figma \"Design System - 2026\"\n * (página \"↳ Sombras e Blur\").\n *\n * O sistema tem dois eixos:\n *\n * - **direção**: `down` / `up` / `left` / `right` — a sombra é projetada\n * para o lado indicado, e não apenas para baixo. Usado para destacar\n * sidebars (`right`), barras fixas de rodapé (`up`) e drawers (`left`).\n * - **intensidade**: `1` / `4` / `8` dp, seguindo a escala do Material.\n *\n * Cada nível é uma tripla de sombras (contato, difusa, ambiente) — não\n * simplifique para uma só: o degradê entre as três é o que dá a\n * profundidade.\n */\n\n/** Sombras neutras — `Grey/` no Figma. */\nexport const shadowGrey = {\n \"down-1\":\n \"0px 2px 4px rgba(0, 0, 0, 0.08), 0px 9px 15px rgba(0, 0, 0, 0.05), 0px 24px 46px rgba(0, 0, 0, 0.03)\",\n \"down-4\":\n \"0px 2px 5px rgba(0, 0, 0, 0.16), 0px 12px 20px rgba(0, 0, 0, 0.10), 0px 32px 58px rgba(0, 0, 0, 0.07)\",\n \"down-8\":\n \"0px 4px 6px rgba(0, 0, 0, 0.20), 0px 18px 22px rgba(0, 0, 0, 0.12), 0px 48px 70px rgba(0, 0, 0, 0.08)\",\n \"up-1\":\n \"0px -2px 4px rgba(0, 0, 0, 0.08), 0px -9px 15px rgba(0, 0, 0, 0.05), 0px -24px 46px rgba(0, 0, 0, 0.03)\",\n \"up-4\":\n \"0px -2px 5px rgba(0, 0, 0, 0.16), 0px -12px 20px rgba(0, 0, 0, 0.10), 0px -32px 58px rgba(0, 0, 0, 0.07)\",\n \"up-8\":\n \"0px -4px 6px rgba(0, 0, 0, 0.20), 0px -18px 22px rgba(0, 0, 0, 0.12), 0px -48px 70px rgba(0, 0, 0, 0.08)\",\n \"right-1\":\n \"2px 0px 4px rgba(0, 0, 0, 0.08), 9px 0px 15px rgba(0, 0, 0, 0.05), 24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(0, 0, 0, 0.16), 12px 0px 20px rgba(0, 0, 0, 0.10), 32px 0px 58px rgba(0, 0, 0, 0.07)\",\n \"left-1\":\n \"-2px 0px 4px rgba(0, 0, 0, 0.08), -9px 0px 15px rgba(0, 0, 0, 0.05), -24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"left-4\":\n \"-2px 0px 5px rgba(0, 0, 0, 0.16), -12px 0px 20px rgba(0, 0, 0, 0.10), -32px 0px 58px rgba(0, 0, 0, 0.07)\",\n} as const;\n\n/**\n * Sombras azuis — `azul/` no Figma.\n *\n * Tingidas com o azul de marca (`#3D76CC` nas laterais, `#142C50` nas\n * centralizadas). Usadas em superfícies que ficam sobre fundo azul, onde\n * a sombra neutra cinza parece suja.\n */\nexport const shadowBlue = {\n \"right-1\":\n \"2px 0px 4px rgba(61, 118, 204, 0.08), 4px 0px 10px rgba(61, 118, 204, 0.05), 24px 0px 46px rgba(61, 118, 204, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(61, 118, 204, 0.16), 12px 0px 20px rgba(61, 118, 204, 0.10), 32px 0px 58px rgba(61, 118, 204, 0.07)\",\n \"right-1-dark\":\n \"4px 0px 5px rgba(20, 44, 80, 0.12), 6px 0px 10px rgba(20, 44, 80, 0.05), 24px 0px 46px rgba(20, 44, 80, 0.03)\",\n \"center-1\": \"0px 1px 0.5px rgba(20, 44, 80, 0.02)\",\n \"center-2\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.08), -2px -2px 4.5px rgba(20, 44, 80, 0.08)\",\n \"center-2-dark\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.40), -2px -2px 4.5px rgba(20, 44, 80, 0.40)\",\n} as const;\n\n/** Sombra de contorno sutil — `Sombras/shadow-Elemento4` no Figma. */\nexport const shadowOutline = \"0px 0px 2px rgba(36, 36, 36, 0.10)\";\n\n/**\n * Desfoque de fundo dos headers e overlays \"glass\" — `Glass blur` no\n * Figma. Aplique junto de um fundo semitransparente (ver `colors.alpha`).\n */\nexport const backdropBlur = {\n glass: \"13.2px\",\n} as const;\n\n/**\n * Mapa achatado consumido pelo preset como `theme.extend.boxShadow`.\n *\n * Gera `shadow-down-1`, `shadow-blue-right-4`, `shadow-outline`, etc.\n */\nexport const boxShadow = {\n ...shadowGrey,\n ...Object.fromEntries(\n Object.entries(shadowBlue).map(([k, v]) => [`blue-${k}`, v])\n ),\n outline: shadowOutline,\n} as Record<string, string>;\n\nexport const elevation = {\n shadowGrey,\n shadowBlue,\n shadowOutline,\n backdropBlur,\n boxShadow,\n} as const;\n","/**\n * Malha e breakpoints da FracUI.\n *\n * Extraídos dos 6 estilos de grid do Figma \"Design System - 2026\"\n * (página \"↳ Grid\"), lidos dos `layoutGrids` dos frames de exemplo.\n *\n * O design define três larguras de referência — 360, 768 e 1280 — e três\n * malhas distintas para desktop, escolhidas pelo tipo de tela e não pelo\n * tamanho. Não são breakpoints alternativos: são layouts diferentes na\n * mesma largura.\n */\n\n/**\n * Breakpoints adicionados à escala padrão do Tailwind.\n *\n * As três larguras de referência do design já coincidem com breakpoints\n * padrão, então não há motivo para substituir a escala inteira:\n *\n * | Design | Largura | Tailwind |\n * | ----------------- | ------- | -------- |\n * | mobile | 360px | `xs` ⬅ adicionado |\n * | tablet | 768px | `md` (já é 768) |\n * | desktop | 1280px | `xl` (já é 1280) |\n *\n * Só `xs` é novo. Substituir a escala quebraria `sm:` e `lg:`, usados nos\n * componentes existentes, sem ganho de fidelidade — por isso este objeto\n * entra em `theme.extend.screens`, e não em `theme.screens`.\n */\nexport const screens = {\n xs: \"360px\",\n} as const;\n\nexport type LayoutGrid = {\n /** Largura do frame em que a malha foi especificada. */\n reference: string;\n columns: number;\n /** Espaço entre colunas. */\n gutter: string;\n /** Margem nas laterais do container. */\n margin: string;\n /** Largura de coluna fixa, quando o design não usa colunas fluidas. */\n columnWidth?: string;\n /** Passo da malha de linha de base. */\n baseline: string;\n};\n\n/**\n * As cinco malhas nomeadas do design.\n *\n * `deskRight` é a malha das telas com painel lateral à direita (colunas\n * ancoradas à direita); `deskCentered` é a malha de conteúdo corrido;\n * `deskMenu` é a faixa estreita do menu lateral.\n */\nexport const grids = {\n deskRight: {\n reference: \"1280px\",\n columns: 11,\n gutter: \"16px\",\n margin: \"18px\",\n columnWidth: \"75px\",\n baseline: \"8px\",\n },\n deskCentered: {\n reference: \"1280px\",\n columns: 14,\n gutter: \"27px\",\n margin: \"70px\",\n columnWidth: \"60px\",\n baseline: \"4px\",\n },\n deskMenu: {\n reference: \"1280px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n columnWidth: \"44px\",\n baseline: \"4px\",\n },\n tablet: {\n reference: \"768px\",\n columns: 8,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n mobile: {\n reference: \"360px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n} as const satisfies Record<string, LayoutGrid>;\n\n/**\n * Container padrão.\n *\n * A margem de 70px vem da malha `deskCentered`, que é a usada nas telas de\n * conteúdo. Abaixo de 1280px o design cai para a margem de 16px das malhas\n * de tablet e mobile.\n */\nexport const container = {\n center: true,\n padding: {\n DEFAULT: \"16px\",\n lg: \"70px\",\n },\n screens: {\n xl: \"1440px\",\n },\n} as const;\n\n/**\n * Escala de espaçamento derivada da malha de linha de base.\n *\n * O design usa duas bases: 4px na maioria das telas e 8px na malha\n * `deskRight`. Como 8 é múltiplo de 4, a escala de 4 cobre as duas.\n */\nexport const spacingBase = \"4px\";\n\nexport const grid = {\n screens,\n grids,\n container,\n spacingBase,\n} as const;\n"],"names":["blue","green","red","gray","feedback","dark","subtitle","subtitleLight","alpha","FIGMA_OVERRIDES","colors","lightTheme","darkTheme","lightBrand","darkBrand","radius","radii","theme","fontFamily","typeScale","mediumTracking","h2Medium","typography","shadowGrey","shadowBlue","shadowOutline","backdropBlur","boxShadow","v","elevation","screens","grids","container","spacingBase","grid"],"mappings":"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"}
1
+ {"version":3,"file":"tokens.cjs","sources":["../src/tokens/colors.ts","../src/tokens/theme.ts","../src/tokens/typography.ts","../src/tokens/elevation.ts","../src/tokens/grid.ts"],"sourcesContent":["/**\n * Paleta primitiva de cores da FracUI.\n *\n * Extraída do Figma \"Design System - 2026\"\n * (file key `J15QTL7SaxlobMRnPtOimR`, página \"↳ Cores\").\n *\n * Estas são as cores \"cruas\" (hex) que alimentam os tokens semânticos em\n * `theme.ts`. Use estas escalas diretamente apenas quando não houver um\n * token semântico equivalente (ex: gráficos, ilustrações, e-mails).\n *\n * Para UI de produto, prefira sempre os tokens semânticos\n * (`primary`, `background`, `destructive`, etc.) expostos via classes do\n * Tailwind (`bg-primary`, `text-muted-foreground`...).\n */\n\n/** Escala de 5 tons claros (`Shades/` no Figma), do mais claro ao mais escuro. */\nexport type ShadeScale = {\n 1: string;\n 2: string;\n 3: string;\n 4: string;\n 5: string;\n};\n\n/** Trio de cores de um estado de feedback, conforme modelado no Figma. */\nexport type FeedbackTone = {\n /** Cor do texto sobre o fundo `bg`. */\n text: string;\n /** Cor de ícones e bordas de destaque. */\n icon: string;\n /** Cor de fundo da superfície do alerta. */\n bg: string;\n};\n\n/**\n * Azul institucional — `Primary/` + `Shades/Blue` no Figma.\n *\n * `dark` é a cor de marca principal (usada em `--primary` no tema claro);\n * `light` é a variação usada sobre fundos escuros.\n */\nexport const blue = {\n 1: \"#E5F0FF\",\n 2: \"#CBE0FE\",\n 3: \"#A5C8FE\",\n 4: \"#7FB2FE\",\n 5: \"#5C93E5\",\n light: \"#3D76CC\",\n medium: \"#255091\",\n dark: \"#142C50\",\n} as const;\n\n/**\n * Verde institucional — `Secondary/` + `Shades/Green` no Figma.\n *\n * É a cor de apoio da marca, NÃO o estado de sucesso: para \"deu certo\",\n * use `feedback.success`.\n */\nexport const green = {\n 1: \"#F4F9ED\",\n 2: \"#E2F0D1\",\n 3: \"#D1E7B7\",\n 4: \"#B9DB92\",\n 5: \"#A2CF6E\",\n light: \"#84C03F\",\n medium: \"#6AA329\",\n dark: \"#508217\",\n} as const;\n\n/**\n * Escala vermelha de intensidade — conjunto `Tags` no Figma.\n *\n * Usada apenas para graduar a força do El Niño, do mais fraco ao mais\n * forte. Não está na página de cores do arquivo: existe só dentro do\n * conjunto `Tags`, e por isso não tem os cinco passos das outras escalas.\n *\n * A contraparte da La Niña são os quatro primeiros passos de `blue`, que\n * já existiam na paleta — só o lado vermelho precisava ser nomeado.\n */\nexport const red = {\n 1: \"#F9EAEA\",\n 2: \"#F8CECE\",\n 3: \"#EAA4A4\",\n 4: \"#E18282\",\n} as const;\n\n/**\n * Neutros — `Basics/` no Figma.\n *\n * Rampa contínua do branco puro ao quase-preto. `white`/`ice`/`iceMedium`\n * são superfícies; `light`/`lightMedium` são bordas e divisores;\n * `DEFAULT`/`medium`/`mediumDark`/`dark` são níveis de texto.\n */\nexport const gray = {\n white: \"#FFFFFF\",\n ice: \"#FAFAFA\",\n iceMedium: \"#F5F5F5\",\n light: \"#E5E5E5\",\n lightMedium: \"#BFBFBF\",\n DEFAULT: \"#999999\",\n medium: \"#737373\",\n mediumDark: \"#333333\",\n dark: \"#202020\",\n} as const;\n\n/**\n * Estados de feedback — `Feedback/` no Figma.\n *\n * Cada família é um matiz em três passos fixos de saturação/luminosidade:\n *\n * | slot | S | L |\n * | ------ | ------ | ------ |\n * | `text` | 82.3% | 22.2% |\n * | `icon` | 58.4% | 52.0% |\n * | `bg` | 100% | 92.5% |\n *\n * `success` é a exceção deliberada: seus tons foram dessaturados à mão no\n * Figma (S≈48%) para não brigar com o verde de marca. Mantido como está.\n *\n * Ver `FIGMA_OVERRIDES` para as divergências resolvidas na extração.\n */\nexport const feedback = {\n error: {\n text: \"#670A1A\",\n icon: \"#CC3D55\",\n bg: \"#FFD9DF\",\n },\n alert: {\n text: \"#672A0A\",\n icon: \"#CC6D3D\",\n bg: \"#FFE6D9\",\n },\n warning: {\n text: \"#67480A\",\n icon: \"#CC9C3D\",\n bg: \"#FFF2D9\",\n },\n success: {\n text: \"#246724\",\n icon: \"#70CC70\",\n bg: \"#D9FFD9\",\n },\n info: {\n text: \"#0A2967\",\n icon: \"#3D6DCC\",\n bg: \"#D9E6FF\",\n },\n} as const satisfies Record<string, FeedbackTone>;\n\n/**\n * Superfícies do tema escuro — página \"↳ Light e Dark Mode\" no Figma.\n *\n * Não são neutros cinzas: são azuis muito escuros, para casar com o azul\n * de marca. `outline` é a cor de borda/foco sobre esses fundos.\n */\nexport const dark = {\n bg: \"#040814\",\n surface: \"#090D1B\",\n elevated: \"#0B1325\",\n outline: \"#0E3571\",\n} as const;\n\n/**\n * Cores de legenda de mapa — `Subtitle/` no Figma.\n *\n * Paleta categórica para séries e marcadores geoespaciais. Cada cor tem\n * uma variação `light` para estados desabilitados/hover.\n */\nexport const subtitle = {\n red: \"#DA3C36\",\n orange: \"#D9822B\",\n yellow: \"#F2F218\",\n green: \"#4D9966\",\n blueLight: \"#51CFE3\",\n blueMedium: \"#2554B2\",\n purple: \"#634CD9\",\n} as const;\n\n/** Variações claras das cores de legenda — `Subtitle/Light/` no Figma. */\nexport const subtitleLight = {\n red: \"#F27F7A\",\n orange: \"#FFBF7F\",\n yellow: \"#FEFF80\",\n green: \"#98D9AD\",\n blueLight: \"#99CCFF\",\n blueMedium: \"#8CB2FF\",\n purple: \"#9985FF\",\n} as const;\n\n/**\n * Preto com transparência — `Transparency black/` no Figma.\n *\n * Usado em overlays de modal, headers com blur e estados de pressão.\n */\nexport const alpha = {\n 4: \"rgba(0, 0, 0, 0.04)\",\n 8: \"rgba(0, 0, 0, 0.08)\",\n 16: \"rgba(0, 0, 0, 0.16)\",\n 25: \"rgba(0, 0, 0, 0.25)\",\n 40: \"rgba(0, 0, 0, 0.4)\",\n 60: \"rgba(0, 0, 0, 0.6)\",\n 80: \"rgba(0, 0, 0, 0.8)\",\n} as const;\n\n/**\n * Divergências entre o rótulo e o preenchimento real de swatches no Figma,\n * e qual valor esta biblioteca adotou.\n *\n * Documentado aqui para que a próxima extração não \"corrija\" de volta para\n * o valor errado. Enquanto o Figma não for arrumado, ele e este arquivo\n * discordam nestes pontos — de propósito.\n */\nexport const FIGMA_OVERRIDES = [\n {\n swatch: \"Basics/Ice\",\n figmaFill: \"#E5E5E5\",\n figmaLabel: \"#FAFAFA\",\n adopted: \"#FAFAFA\",\n reason: \"o fill duplica Gray Light; o rótulo completa a rampa de neutros\",\n },\n {\n swatch: \"Feedback/Text Alert Orange\",\n figmaFill: \"#693014\",\n figmaLabel: \"#0A2967\",\n adopted: \"#672A0A\",\n reason:\n \"rótulo é cópia do Text Info Blue; fill está fora dos passos S/L da família. Derivado do matiz 20.3° nos passos canônicos\",\n },\n {\n swatch: \"Feedback/Icon Alert Orange\",\n figmaFill: \"#DD662B\",\n figmaLabel: \"#CC6D3D\",\n adopted: \"#CC6D3D\",\n reason: \"o rótulo bate exatamente com os passos S/L da família; o fill não\",\n },\n {\n swatch: \"Feedback/BG Alert Orange\",\n figmaFill: \"#FFD6C1\",\n figmaLabel: \"#D9E6FF\",\n adopted: \"#FFE6D9\",\n reason:\n \"rótulo é cópia do BG Info Blue; fill está em L87.8% em vez de L92.5%\",\n },\n {\n swatch: \"Subtitle/Blue Medium\",\n figmaFill: \"#E336B4\",\n figmaLabel: \"#2554B2\",\n adopted: \"#2554B2\",\n reason: \"o fill é magenta, incompatível com o nome da cor\",\n },\n {\n swatch: \"Subtitle/Blue Light\",\n figmaFill: \"#51CFE3\",\n figmaLabel: \"#5798D9\",\n adopted: \"#51CFE3\",\n reason:\n \"o fill é ciano e o rótulo é azul. Adotado o fill, que é o que renderiza hoje nas legendas de mapa e o que dá matiz distinto do Blue Medium — mas a divergência é grande o bastante para valer confirmação com o design\",\n },\n {\n swatch: \"Subtitle/Light/Blue Medium\",\n figmaFill: \"#8CB2FF\",\n figmaLabel: \"#8CA9FF\",\n adopted: \"#8CB2FF\",\n reason: \"diferença de um passo de matiz; adotado o fill, que é o que renderiza\",\n },\n {\n swatch: \"Subtitle/Light/Yellow\",\n figmaFill: \"#FEFF80\",\n figmaLabel: \"#E9E98E\",\n adopted: \"#FEFF80\",\n reason: \"adotado o fill; o rótulo é mais dessaturado e não acompanha o resto da família Light\",\n },\n] as const;\n\nexport const colors = {\n blue,\n green,\n red,\n gray,\n feedback,\n dark,\n subtitle,\n subtitleLight,\n alpha,\n} as const;\n","/**\n * Tokens semânticos (tema) da FracUI.\n *\n * Cada valor é um triplo HSL (\"H S% L%\", sem o wrapper hsl()) para poder\n * ser injetado em variáveis CSS e consumido pelo Tailwind como\n * `hsl(var(--nome))`. Isso permite alternar temas (claro/escuro) apenas\n * trocando as variáveis, sem trocar classes.\n *\n * IMPORTANTE: estes valores precisam ficar em sincronia com\n * `src/styles/tokens.css`. Se alterar um valor aqui, atualize o CSS\n * correspondente (e vice-versa).\n *\n * Os nomes seguem o contrato do shadcn/ui (`background`, `primary`,\n * `muted`...) para que os componentes existentes continuem funcionando,\n * mas os VALORES vêm da paleta Fractal em `colors.ts`.\n *\n * `primary` é o azul INTERATIVO (`blue.light`, #3D76CC), não o azul\n * institucional. O Figma usa #3D76CC como fundo de repouso do botão\n * primário, do switch ligado, do FAB, da aba ativa e do link; #142C50\n * aparece como estado pressionado/focado e como fundo de tooltip. A cor\n * institucional continua disponível como `--brand-primary`.\n */\n\nexport type SemanticTheme = {\n background: string;\n foreground: string;\n card: string;\n cardForeground: string;\n popover: string;\n popoverForeground: string;\n primary: string;\n primaryForeground: string;\n secondary: string;\n secondaryForeground: string;\n muted: string;\n mutedForeground: string;\n accent: string;\n accentForeground: string;\n destructive: string;\n destructiveForeground: string;\n border: string;\n input: string;\n ring: string;\n};\n\n/**\n * Camada Fractal sobre o contrato do shadcn.\n *\n * `brand*` expõe o azul e o verde institucionais como tokens semânticos\n * (o `primary` do shadcn é consumido por dezenas de componentes e nem\n * sempre é o lugar certo para a cor de marca).\n *\n * `*Text`/`*Icon`/`*Bg` reproduzem o modelo de feedback do Figma, em que\n * cada estado tem três cores coordenadas em vez de uma só.\n */\nexport type BrandTheme = {\n brandPrimary: string;\n brandPrimaryMedium: string;\n brandPrimaryLight: string;\n brandSecondary: string;\n brandSecondaryMedium: string;\n brandSecondaryLight: string;\n\n errorText: string;\n errorIcon: string;\n errorBg: string;\n\n alertText: string;\n alertIcon: string;\n alertBg: string;\n\n warningText: string;\n warningIcon: string;\n warningBg: string;\n\n successText: string;\n successIcon: string;\n successBg: string;\n\n infoText: string;\n infoIcon: string;\n infoBg: string;\n\n disabledForeground: string;\n disabledBg: string;\n};\n\nexport const lightTheme: SemanticTheme = {\n background: \"0 0% 100%\", // gray.white #FFFFFF\n foreground: \"0 0% 12.5%\", // gray.dark #202020\n card: \"0 0% 100%\", // gray.white #FFFFFF\n cardForeground: \"0 0% 12.5%\", // gray.dark #202020\n popover: \"0 0% 100%\", // gray.white #FFFFFF\n popoverForeground: \"0 0% 12.5%\", // gray.dark #202020\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n secondaryForeground: \"0 0% 20%\", // gray.mediumDark #333333\n muted: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n mutedForeground: \"0 0% 45.1%\", // gray.medium #737373\n accent: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n accentForeground: \"216 60% 19.6%\", // blue.dark #142C50\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"0 0% 89.8%\", // gray.light #E5E5E5\n input: \"0 0% 89.8%\", // gray.light #E5E5E5\n ring: \"216.1 58.4% 52%\", // blue.light #3D76CC\n};\n\nexport const darkTheme: SemanticTheme = {\n background: \"225 66.7% 4.7%\", // dark.bg #040814\n foreground: \"0 0% 100%\", // gray.white #FFFFFF\n card: \"226.7 50% 7.1%\", // dark.surface #090D1B\n cardForeground: \"0 0% 100%\", // gray.white #FFFFFF\n popover: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n popoverForeground: \"0 0% 100%\", // gray.white #FFFFFF\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n secondaryForeground: \"0 0% 89.8%\", // gray.light #E5E5E5\n muted: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n mutedForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n accent: \"216 60% 19.6%\", // blue.dark #142C50\n accentForeground: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"216 60% 19.6%\", // blue.dark #142C50\n input: \"216 60% 19.6%\", // blue.dark #142C50\n ring: \"216.4 78% 24.9%\", // dark.outline #0E3571\n};\n\nexport const lightBrand: BrandTheme = {\n brandPrimary: \"216 60% 19.6%\", // blue.dark #142C50\n brandPrimaryMedium: \"216.1 59.3% 35.7%\", // blue.medium #255091\n brandPrimaryLight: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandSecondary: \"88 69.9% 30%\", // green.dark #508217\n brandSecondaryMedium: \"88 59.8% 40%\", // green.medium #6AA329\n brandSecondaryLight: \"87.9 50.6% 50%\", // green.light #84C03F\n\n errorText: \"349.7 82.3% 22.2%\", // #670A1A\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"350.5 100% 92.5%\", // #FFD9DF\n\n alertText: \"20.6 82.3% 22.2%\", // #672A0A\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.5 100% 92.5%\", // #FFE6D9\n\n warningText: \"40 82.3% 22.2%\", // #67480A\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"39.5 100% 92.5%\", // #FFF2D9\n\n successText: \"120 48.2% 27.3%\", // #246724\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 100% 92.5%\", // #D9FFD9\n\n infoText: \"220 82.3% 22.2%\", // #0A2967\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"219.5 100% 92.5%\", // #D9E6FF\n\n disabledForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n disabledBg: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n};\n\n/**\n * Feedback no tema escuro.\n *\n * ATENÇÃO: o Figma não especifica os estados de feedback sobre fundo\n * escuro. Estes valores são DERIVADOS, trocando os papéis de `text` e\n * `bg` (o tom escuro vira superfície, o tom claro vira texto) e mantendo\n * o `icon`, que já tem contraste suficiente nos dois temas.\n *\n * Substitua por valores especificados assim que a página de dark mode do\n * Figma cobrir feedback.\n */\nexport const darkBrand: BrandTheme = {\n brandPrimary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandPrimaryMedium: \"215.9 72.5% 62.9%\", // blue.5 #5C93E5\n brandPrimaryLight: \"215.9 98.4% 74.7%\", // blue.4 #7FB2FE\n brandSecondary: \"87.9 50.6% 50%\", // green.light #84C03F\n brandSecondaryMedium: \"87.8 50.3% 62.2%\", // green.5 #A2CF6E\n brandSecondaryLight: \"87.9 50.3% 71.6%\", // green.4 #B9DB92\n\n errorText: \"350.5 100% 92.5%\", // #FFD9DF\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"349.7 82.3% 22.2%\", // #670A1A\n\n alertText: \"20.5 100% 92.5%\", // #FFE6D9\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.6 82.3% 22.2%\", // #672A0A\n\n warningText: \"39.5 100% 92.5%\", // #FFF2D9\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"40 82.3% 22.2%\", // #67480A\n\n successText: \"120 100% 92.5%\", // #D9FFD9\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 48.2% 27.3%\", // #246724\n\n infoText: \"219.5 100% 92.5%\", // #D9E6FF\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"220 82.3% 22.2%\", // #0A2967\n\n /*\n * DERIVADO. O #BFBFBF que o Figma usa para desabilitado só funciona\n * sobre fundo claro: no escuro ele fica MAIS claro que o texto normal,\n * e o elemento desabilitado passa a chamar mais atenção que o ativo.\n * Aqui o desabilitado escurece, mantendo a relação de hierarquia.\n */\n disabledForeground: \"0 0% 45.1%\", // gray.medium #737373\n disabledBg: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n};\n\n/**\n * Raio de borda base, usado por `rounded-lg`/`rounded-md`/`rounded-sm`\n * via preset. 8px é o valor de canto mais usado em componentes no Figma.\n */\nexport const radius = \"0.5rem\";\n\n/**\n * Escala de raios do Figma, por frequência de uso no arquivo:\n * 4px (1047x), 12px (925x), 8px (787x), 16px (265x), 25px (215x),\n * 30px (124x), 40px (68x).\n *\n * `sm`/`md`/`lg` continuam derivados de `--radius` (contrato shadcn) e\n * por isso não aparecem aqui.\n */\nexport const radii = {\n xs: \"4px\",\n xl: \"12px\",\n \"2xl\": \"16px\",\n \"3xl\": \"30px\",\n \"4xl\": \"40px\",\n pill: \"9999px\",\n} as const;\n\nexport const theme = {\n light: lightTheme,\n dark: darkTheme,\n lightBrand,\n darkBrand,\n radius,\n radii,\n} as const;\n","/**\n * Tokens de tipografia da FracUI.\n *\n * Extraídos dos 28 estilos de texto publicados no Figma\n * \"Design System - 2026\" (página \"↳ Tipografia\").\n *\n * O peso é um eixo separado do tamanho: cada estilo abaixo existe em\n * `regular` (400) e `medium` (500) com as mesmas métricas, exceto onde\n * anotado. Por isso a escala expõe tamanho/entrelinha/tracking e deixa o\n * peso para as utilidades `font-normal` / `font-medium`.\n */\n\n/** Pilha padrão de fontes. Todo o design system usa Roboto. */\nexport const fontFamily = {\n sans: [\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"'Segoe UI'\",\n \"sans-serif\",\n ],\n /**\n * ATENÇÃO: no Figma, `h1` e `h2` no peso medium estão em Rubik, apesar\n * de os estilos se chamarem `roboto/medium/h1` e `roboto/medium/h2`.\n * Exposto aqui para reproduzir fielmente o design; confirme com o time\n * de design se é intencional antes de usar em produção.\n */\n display: [\n \"Rubik\",\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"sans-serif\",\n ],\n} as const;\n\nexport type TypeStyle = {\n /** `font-size` em px. */\n fontSize: string;\n /** `line-height` em px. */\n lineHeight: string;\n /** `letter-spacing` em px. */\n letterSpacing: string;\n /** Presente apenas nos estilos que o Figma marca como caixa alta. */\n textTransform?: \"uppercase\";\n};\n\n/**\n * Escala tipográfica.\n *\n * Consumida pelo preset como `theme.extend.fontSize`, o que gera as\n * classes `text-h1`, `text-body-1`, `text-caption`, etc.\n */\nexport const typeScale = {\n h1: {\n fontSize: \"36px\",\n lineHeight: \"37.8px\",\n letterSpacing: \"0px\",\n },\n h2: {\n fontSize: \"30px\",\n lineHeight: \"30px\",\n letterSpacing: \"0px\",\n },\n h3: {\n fontSize: \"24px\",\n lineHeight: \"24px\",\n letterSpacing: \"0.24px\",\n },\n h4: {\n fontSize: \"20px\",\n lineHeight: \"27px\",\n letterSpacing: \"0.2px\",\n },\n h5: {\n fontSize: \"18px\",\n lineHeight: \"24.3px\",\n letterSpacing: \"0.18px\",\n },\n \"subtitle-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.32px\",\n },\n \"subtitle-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n },\n \"body-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-allcaps\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n textTransform: \"uppercase\",\n },\n button: {\n fontSize: \"14px\",\n lineHeight: \"16.1px\",\n letterSpacing: \"1.4px\",\n textTransform: \"uppercase\",\n },\n caption: {\n fontSize: \"12px\",\n lineHeight: \"14.4px\",\n letterSpacing: \"0.48px\",\n },\n link: {\n fontSize: \"14px\",\n lineHeight: \"18.2px\",\n letterSpacing: \"0.56px\",\n },\n} as const satisfies Record<string, TypeStyle>;\n\n/**\n * Variação de tracking dos estilos `medium` que diferem do `regular`.\n *\n * Só `h1`, `h2`, `h3` e `caption` mudam de tracking ao trocar de peso; os\n * demais são idênticos. Aplique manualmente quando usar `font-medium`\n * nesses quatro estilos.\n */\nexport const mediumTracking = {\n h1: \"0.72px\",\n h2: \"1.12px\",\n h3: \"0.48px\",\n caption: \"0.36px\",\n} as const;\n\n/**\n * `h2` no peso medium também muda de tamanho e entrelinha (28px/39.2px,\n * contra 30px/30px do regular), além de trocar para a família `display`.\n */\nexport const h2Medium: TypeStyle = {\n fontSize: \"28px\",\n lineHeight: \"39.2px\",\n letterSpacing: \"1.12px\",\n};\n\nexport const typography = {\n fontFamily,\n typeScale,\n mediumTracking,\n h2Medium,\n} as const;\n","/**\n * Sistema de elevação da FracUI.\n *\n * Extraído dos 20 estilos de efeito do Figma \"Design System - 2026\"\n * (página \"↳ Sombras e Blur\").\n *\n * O sistema tem dois eixos:\n *\n * - **direção**: `down` / `up` / `left` / `right` — a sombra é projetada\n * para o lado indicado, e não apenas para baixo. Usado para destacar\n * sidebars (`right`), barras fixas de rodapé (`up`) e drawers (`left`).\n * - **intensidade**: `1` / `4` / `8` dp, seguindo a escala do Material.\n *\n * Cada nível é uma tripla de sombras (contato, difusa, ambiente) — não\n * simplifique para uma só: o degradê entre as três é o que dá a\n * profundidade.\n */\n\n/** Sombras neutras — `Grey/` no Figma. */\nexport const shadowGrey = {\n \"down-1\":\n \"0px 2px 4px rgba(0, 0, 0, 0.08), 0px 9px 15px rgba(0, 0, 0, 0.05), 0px 24px 46px rgba(0, 0, 0, 0.03)\",\n \"down-4\":\n \"0px 2px 5px rgba(0, 0, 0, 0.16), 0px 12px 20px rgba(0, 0, 0, 0.10), 0px 32px 58px rgba(0, 0, 0, 0.07)\",\n \"down-8\":\n \"0px 4px 6px rgba(0, 0, 0, 0.20), 0px 18px 22px rgba(0, 0, 0, 0.12), 0px 48px 70px rgba(0, 0, 0, 0.08)\",\n \"up-1\":\n \"0px -2px 4px rgba(0, 0, 0, 0.08), 0px -9px 15px rgba(0, 0, 0, 0.05), 0px -24px 46px rgba(0, 0, 0, 0.03)\",\n \"up-4\":\n \"0px -2px 5px rgba(0, 0, 0, 0.16), 0px -12px 20px rgba(0, 0, 0, 0.10), 0px -32px 58px rgba(0, 0, 0, 0.07)\",\n \"up-8\":\n \"0px -4px 6px rgba(0, 0, 0, 0.20), 0px -18px 22px rgba(0, 0, 0, 0.12), 0px -48px 70px rgba(0, 0, 0, 0.08)\",\n \"right-1\":\n \"2px 0px 4px rgba(0, 0, 0, 0.08), 9px 0px 15px rgba(0, 0, 0, 0.05), 24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(0, 0, 0, 0.16), 12px 0px 20px rgba(0, 0, 0, 0.10), 32px 0px 58px rgba(0, 0, 0, 0.07)\",\n \"left-1\":\n \"-2px 0px 4px rgba(0, 0, 0, 0.08), -9px 0px 15px rgba(0, 0, 0, 0.05), -24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"left-4\":\n \"-2px 0px 5px rgba(0, 0, 0, 0.16), -12px 0px 20px rgba(0, 0, 0, 0.10), -32px 0px 58px rgba(0, 0, 0, 0.07)\",\n} as const;\n\n/**\n * Sombras azuis — `azul/` no Figma.\n *\n * Tingidas com o azul de marca (`#3D76CC` nas laterais, `#142C50` nas\n * centralizadas). Usadas em superfícies que ficam sobre fundo azul, onde\n * a sombra neutra cinza parece suja.\n */\nexport const shadowBlue = {\n \"right-1\":\n \"2px 0px 4px rgba(61, 118, 204, 0.08), 4px 0px 10px rgba(61, 118, 204, 0.05), 24px 0px 46px rgba(61, 118, 204, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(61, 118, 204, 0.16), 12px 0px 20px rgba(61, 118, 204, 0.10), 32px 0px 58px rgba(61, 118, 204, 0.07)\",\n \"right-1-dark\":\n \"4px 0px 5px rgba(20, 44, 80, 0.12), 6px 0px 10px rgba(20, 44, 80, 0.05), 24px 0px 46px rgba(20, 44, 80, 0.03)\",\n \"center-1\": \"0px 1px 0.5px rgba(20, 44, 80, 0.02)\",\n \"center-2\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.08), -2px -2px 4.5px rgba(20, 44, 80, 0.08)\",\n \"center-2-dark\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.40), -2px -2px 4.5px rgba(20, 44, 80, 0.40)\",\n} as const;\n\n/** Sombra de contorno sutil — `Sombras/shadow-Elemento4` no Figma. */\nexport const shadowOutline = \"0px 0px 2px rgba(36, 36, 36, 0.10)\";\n\n/**\n * Desfoque de fundo dos headers e overlays \"glass\" — `Glass blur` no\n * Figma. Aplique junto de um fundo semitransparente (ver `colors.alpha`).\n */\nexport const backdropBlur = {\n glass: \"13.2px\",\n} as const;\n\n/**\n * Mapa achatado consumido pelo preset como `theme.extend.boxShadow`.\n *\n * Gera `shadow-down-1`, `shadow-blue-right-4`, `shadow-outline`, etc.\n */\nexport const boxShadow = {\n ...shadowGrey,\n ...Object.fromEntries(\n Object.entries(shadowBlue).map(([k, v]) => [`blue-${k}`, v])\n ),\n outline: shadowOutline,\n} as Record<string, string>;\n\nexport const elevation = {\n shadowGrey,\n shadowBlue,\n shadowOutline,\n backdropBlur,\n boxShadow,\n} as const;\n","/**\n * Malha e breakpoints da FracUI.\n *\n * Extraídos dos 6 estilos de grid do Figma \"Design System - 2026\"\n * (página \"↳ Grid\"), lidos dos `layoutGrids` dos frames de exemplo.\n *\n * O design define três larguras de referência — 360, 768 e 1280 — e três\n * malhas distintas para desktop, escolhidas pelo tipo de tela e não pelo\n * tamanho. Não são breakpoints alternativos: são layouts diferentes na\n * mesma largura.\n */\n\n/**\n * Breakpoints adicionados à escala padrão do Tailwind.\n *\n * As três larguras de referência do design já coincidem com breakpoints\n * padrão, então não há motivo para substituir a escala inteira:\n *\n * | Design | Largura | Tailwind |\n * | ----------------- | ------- | -------- |\n * | mobile | 360px | `xs` ⬅ adicionado |\n * | tablet | 768px | `md` (já é 768) |\n * | desktop | 1280px | `xl` (já é 1280) |\n *\n * Só `xs` é novo. Substituir a escala quebraria `sm:` e `lg:`, usados nos\n * componentes existentes, sem ganho de fidelidade — por isso este objeto\n * entra em `theme.extend.screens`, e não em `theme.screens`.\n */\nexport const screens = {\n xs: \"360px\",\n} as const;\n\nexport type LayoutGrid = {\n /** Largura do frame em que a malha foi especificada. */\n reference: string;\n columns: number;\n /** Espaço entre colunas. */\n gutter: string;\n /** Margem nas laterais do container. */\n margin: string;\n /** Largura de coluna fixa, quando o design não usa colunas fluidas. */\n columnWidth?: string;\n /** Passo da malha de linha de base. */\n baseline: string;\n};\n\n/**\n * As cinco malhas nomeadas do design.\n *\n * `deskRight` é a malha das telas com painel lateral à direita (colunas\n * ancoradas à direita); `deskCentered` é a malha de conteúdo corrido;\n * `deskMenu` é a faixa estreita do menu lateral.\n */\nexport const grids = {\n deskRight: {\n reference: \"1280px\",\n columns: 11,\n gutter: \"16px\",\n margin: \"18px\",\n columnWidth: \"75px\",\n baseline: \"8px\",\n },\n deskCentered: {\n reference: \"1280px\",\n columns: 14,\n gutter: \"27px\",\n margin: \"70px\",\n columnWidth: \"60px\",\n baseline: \"4px\",\n },\n deskMenu: {\n reference: \"1280px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n columnWidth: \"44px\",\n baseline: \"4px\",\n },\n tablet: {\n reference: \"768px\",\n columns: 8,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n mobile: {\n reference: \"360px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n} as const satisfies Record<string, LayoutGrid>;\n\n/**\n * Container padrão.\n *\n * A margem de 70px vem da malha `deskCentered`, que é a usada nas telas de\n * conteúdo. Abaixo de 1280px o design cai para a margem de 16px das malhas\n * de tablet e mobile.\n */\nexport const container = {\n center: true,\n padding: {\n DEFAULT: \"16px\",\n lg: \"70px\",\n },\n screens: {\n xl: \"1440px\",\n },\n} as const;\n\n/**\n * Escala de espaçamento derivada da malha de linha de base.\n *\n * O design usa duas bases: 4px na maioria das telas e 8px na malha\n * `deskRight`. Como 8 é múltiplo de 4, a escala de 4 cobre as duas.\n */\nexport const spacingBase = \"4px\";\n\nexport const grid = {\n screens,\n grids,\n container,\n spacingBase,\n} as const;\n"],"names":["blue","green","red","gray","feedback","dark","subtitle","subtitleLight","alpha","FIGMA_OVERRIDES","colors","lightTheme","darkTheme","lightBrand","darkBrand","radius","radii","theme","fontFamily","typeScale","mediumTracking","h2Medium","typography","shadowGrey","shadowBlue","shadowOutline","backdropBlur","boxShadow","v","elevation","screens","grids","container","spacingBase","grid"],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Variáveis de tema (design tokens semânticos) da FracUI.
3
+ *
4
+ * Só variáveis: sem `@tailwind`, sem preflight, sem classes. É o arquivo
5
+ * que um app com Tailwind próprio importa junto do preset:
6
+ *
7
+ * import "@fracui/styleguide/tokens.css";
8
+ *
9
+ * Os valores precisam ficar sincronizados com `src/tokens/theme.ts`
10
+ * (lightTheme / darkTheme / lightBrand / darkBrand). O contraste é
11
+ * verificado por `yarn test:contrast`, que lê este arquivo.
12
+ *
13
+ * Os hex ao lado de cada valor são a cor de origem na paleta Fractal
14
+ * (`src/tokens/colors.ts`), extraída do Figma "Design System - 2026".
15
+ */
16
+ :root {
17
+ --background: 0 0% 100%; /* #FFFFFF */
18
+ --foreground: 0 0% 12.5%; /* #202020 */
19
+
20
+ --card: 0 0% 100%; /* #FFFFFF */
21
+ --card-foreground: 0 0% 12.5%; /* #202020 */
22
+
23
+ --popover: 0 0% 100%; /* #FFFFFF */
24
+ --popover-foreground: 0 0% 12.5%; /* #202020 */
25
+
26
+ --primary: 216.1 58.4% 52%; /* #3D76CC */
27
+ --primary-foreground: 0 0% 100%; /* #FFFFFF */
28
+
29
+ --secondary: 0 0% 96.1%; /* #F5F5F5 */
30
+ --secondary-foreground: 0 0% 20%; /* #333333 */
31
+
32
+ --muted: 0 0% 96.1%; /* #F5F5F5 */
33
+ --muted-foreground: 0 0% 45.1%; /* #737373 */
34
+
35
+ --accent: 214.6 100% 94.9%; /* #E5F0FF */
36
+ --accent-foreground: 216 60% 19.6%; /* #142C50 */
37
+
38
+ --destructive: 349.9 58.4% 52%; /* #CC3D55 */
39
+ --destructive-foreground: 0 0% 100%; /* #FFFFFF */
40
+
41
+ --border: 0 0% 89.8%; /* #E5E5E5 */
42
+ --input: 0 0% 89.8%; /* #E5E5E5 */
43
+ --ring: 216.1 58.4% 52%; /* #3D76CC */
44
+
45
+ --radius: 0.5rem;
46
+
47
+ /* Cores de marca */
48
+ --brand-primary: 216 60% 19.6%; /* #142C50 */
49
+ --brand-primary-medium: 216.1 59.3% 35.7%; /* #255091 */
50
+ --brand-primary-light: 216.1 58.4% 52%; /* #3D76CC */
51
+ --brand-secondary: 88 69.9% 30%; /* #508217 */
52
+ --brand-secondary-medium: 88 59.8% 40%; /* #6AA329 */
53
+ --brand-secondary-light: 87.9 50.6% 50%; /* #84C03F */
54
+
55
+ /* Feedback: trio texto / ícone / fundo por estado */
56
+ --error-text: 349.7 82.3% 22.2%; /* #670A1A */
57
+ --error-icon: 349.9 58.4% 52%; /* #CC3D55 */
58
+ --error-bg: 350.5 100% 92.5%; /* #FFD9DF */
59
+
60
+ --alert-text: 20.6 82.3% 22.2%; /* #672A0A */
61
+ --alert-icon: 20.1 58.4% 52%; /* #CC6D3D */
62
+ --alert-bg: 20.5 100% 92.5%; /* #FFE6D9 */
63
+
64
+ --warning-text: 40 82.3% 22.2%; /* #67480A */
65
+ --warning-icon: 39.9 58.4% 52%; /* #CC9C3D */
66
+ --warning-bg: 39.5 100% 92.5%; /* #FFF2D9 */
67
+
68
+ --success-text: 120 48.2% 27.3%; /* #246724 */
69
+ --success-icon: 120 47.4% 62%; /* #70CC70 */
70
+ --success-bg: 120 100% 92.5%; /* #D9FFD9 */
71
+
72
+ --info-text: 220 82.3% 22.2%; /* #0A2967 */
73
+ --info-icon: 219.9 58.4% 52%; /* #3D6DCC */
74
+ --info-bg: 219.5 100% 92.5%; /* #D9E6FF */
75
+
76
+ /* Estado desabilitado */
77
+ --disabled-foreground: 0 0% 74.9%; /* #BFBFBF */
78
+ --disabled-bg: 0 0% 96.1%; /* #F5F5F5 */
79
+ }
80
+
81
+ .dark {
82
+ --background: 225 66.7% 4.7%; /* #040814 */
83
+ --foreground: 0 0% 100%; /* #FFFFFF */
84
+
85
+ --card: 226.7 50% 7.1%; /* #090D1B */
86
+ --card-foreground: 0 0% 100%; /* #FFFFFF */
87
+
88
+ --popover: 221.5 54.2% 9.4%; /* #0B1325 */
89
+ --popover-foreground: 0 0% 100%; /* #FFFFFF */
90
+
91
+ --primary: 216.1 58.4% 52%; /* #3D76CC */
92
+ --primary-foreground: 0 0% 100%; /* #FFFFFF */
93
+
94
+ --secondary: 221.5 54.2% 9.4%; /* #0B1325 */
95
+ --secondary-foreground: 0 0% 89.8%; /* #E5E5E5 */
96
+
97
+ --muted: 221.5 54.2% 9.4%; /* #0B1325 */
98
+ --muted-foreground: 0 0% 74.9%; /* #BFBFBF */
99
+
100
+ --accent: 216 60% 19.6%; /* #142C50 */
101
+ --accent-foreground: 214.6 100% 94.9%; /* #E5F0FF */
102
+
103
+ --destructive: 349.9 58.4% 52%; /* #CC3D55 */
104
+ --destructive-foreground: 0 0% 100%; /* #FFFFFF */
105
+
106
+ --border: 216 60% 19.6%; /* #142C50 */
107
+ --input: 216 60% 19.6%; /* #142C50 */
108
+ --ring: 216.4 78% 24.9%; /* #0E3571 */
109
+
110
+ /* Cores de marca */
111
+ --brand-primary: 216.1 58.4% 52%; /* #3D76CC */
112
+ --brand-primary-medium: 215.9 72.5% 62.9%; /* #5C93E5 */
113
+ --brand-primary-light: 215.9 98.4% 74.7%; /* #7FB2FE */
114
+ --brand-secondary: 87.9 50.6% 50%; /* #84C03F */
115
+ --brand-secondary-medium: 87.8 50.3% 62.2%; /* #A2CF6E */
116
+ --brand-secondary-light: 87.9 50.3% 71.6%; /* #B9DB92 */
117
+
118
+ /*
119
+ * Feedback no escuro: DERIVADO, não especificado no Figma.
120
+ * Os papéis de texto e fundo são trocados; o ícone é mantido.
121
+ * Ver `darkBrand` em src/tokens/theme.ts.
122
+ */
123
+ --error-text: 350.5 100% 92.5%; /* #FFD9DF */
124
+ --error-icon: 349.9 58.4% 52%; /* #CC3D55 */
125
+ --error-bg: 349.7 82.3% 22.2%; /* #670A1A */
126
+
127
+ --alert-text: 20.5 100% 92.5%; /* #FFE6D9 */
128
+ --alert-icon: 20.1 58.4% 52%; /* #CC6D3D */
129
+ --alert-bg: 20.6 82.3% 22.2%; /* #672A0A */
130
+
131
+ --warning-text: 39.5 100% 92.5%; /* #FFF2D9 */
132
+ --warning-icon: 39.9 58.4% 52%; /* #CC9C3D */
133
+ --warning-bg: 40 82.3% 22.2%; /* #67480A */
134
+
135
+ --success-text: 120 100% 92.5%; /* #D9FFD9 */
136
+ --success-icon: 120 47.4% 62%; /* #70CC70 */
137
+ --success-bg: 120 48.2% 27.3%; /* #246724 */
138
+
139
+ --info-text: 219.5 100% 92.5%; /* #D9E6FF */
140
+ --info-icon: 219.9 58.4% 52%; /* #3D6DCC */
141
+ --info-bg: 220 82.3% 22.2%; /* #0A2967 */
142
+
143
+ /*
144
+ * Desabilitado no escuro: DERIVADO. O #BFBFBF do Figma só funciona
145
+ * sobre fundo claro — no escuro ele fica mais claro que o texto
146
+ * normal e o elemento desabilitado vira o mais visível da tela.
147
+ */
148
+ --disabled-foreground: 0 0% 45.1%; /* #737373 */
149
+ --disabled-bg: 221.5 54.2% 9.4%; /* #0B1325 */
150
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sources":["../src/tokens/colors.ts","../src/tokens/theme.ts","../src/tokens/typography.ts","../src/tokens/elevation.ts","../src/tokens/grid.ts"],"sourcesContent":["/**\n * Paleta primitiva de cores da FracUI.\n *\n * Extraída do Figma \"Design System - 2026\"\n * (file key `J15QTL7SaxlobMRnPtOimR`, página \"↳ Cores\").\n *\n * Estas são as cores \"cruas\" (hex) que alimentam os tokens semânticos em\n * `theme.ts`. Use estas escalas diretamente apenas quando não houver um\n * token semântico equivalente (ex: gráficos, ilustrações, e-mails).\n *\n * Para UI de produto, prefira sempre os tokens semânticos\n * (`primary`, `background`, `destructive`, etc.) expostos via classes do\n * Tailwind (`bg-primary`, `text-muted-foreground`...).\n */\n\n/** Escala de 5 tons claros (`Shades/` no Figma), do mais claro ao mais escuro. */\nexport type ShadeScale = {\n 1: string;\n 2: string;\n 3: string;\n 4: string;\n 5: string;\n};\n\n/** Trio de cores de um estado de feedback, conforme modelado no Figma. */\nexport type FeedbackTone = {\n /** Cor do texto sobre o fundo `bg`. */\n text: string;\n /** Cor de ícones e bordas de destaque. */\n icon: string;\n /** Cor de fundo da superfície do alerta. */\n bg: string;\n};\n\n/**\n * Azul institucional — `Primary/` + `Shades/Blue` no Figma.\n *\n * `dark` é a cor de marca principal (usada em `--primary` no tema claro);\n * `light` é a variação usada sobre fundos escuros.\n */\nexport const blue = {\n 1: \"#E5F0FF\",\n 2: \"#CBE0FE\",\n 3: \"#A5C8FE\",\n 4: \"#7FB2FE\",\n 5: \"#5C93E5\",\n light: \"#3D76CC\",\n medium: \"#255091\",\n dark: \"#142C50\",\n} as const;\n\n/**\n * Verde institucional — `Secondary/` + `Shades/Green` no Figma.\n *\n * É a cor de apoio da marca, NÃO o estado de sucesso: para \"deu certo\",\n * use `feedback.success`.\n */\nexport const green = {\n 1: \"#F4F9ED\",\n 2: \"#E2F0D1\",\n 3: \"#D1E7B7\",\n 4: \"#B9DB92\",\n 5: \"#A2CF6E\",\n light: \"#84C03F\",\n medium: \"#6AA329\",\n dark: \"#508217\",\n} as const;\n\n/**\n * Escala vermelha de intensidade — conjunto `Tags` no Figma.\n *\n * Usada apenas para graduar a força do El Niño, do mais fraco ao mais\n * forte. Não está na página de cores do arquivo: existe só dentro do\n * conjunto `Tags`, e por isso não tem os cinco passos das outras escalas.\n *\n * A contraparte da La Niña são os quatro primeiros passos de `blue`, que\n * já existiam na paleta — só o lado vermelho precisava ser nomeado.\n */\nexport const red = {\n 1: \"#F9EAEA\",\n 2: \"#F8CECE\",\n 3: \"#EAA4A4\",\n 4: \"#E18282\",\n} as const;\n\n/**\n * Neutros — `Basics/` no Figma.\n *\n * Rampa contínua do branco puro ao quase-preto. `white`/`ice`/`iceMedium`\n * são superfícies; `light`/`lightMedium` são bordas e divisores;\n * `DEFAULT`/`medium`/`mediumDark`/`dark` são níveis de texto.\n */\nexport const gray = {\n white: \"#FFFFFF\",\n ice: \"#FAFAFA\",\n iceMedium: \"#F5F5F5\",\n light: \"#E5E5E5\",\n lightMedium: \"#BFBFBF\",\n DEFAULT: \"#999999\",\n medium: \"#737373\",\n mediumDark: \"#333333\",\n dark: \"#202020\",\n} as const;\n\n/**\n * Estados de feedback — `Feedback/` no Figma.\n *\n * Cada família é um matiz em três passos fixos de saturação/luminosidade:\n *\n * | slot | S | L |\n * | ------ | ------ | ------ |\n * | `text` | 82.3% | 22.2% |\n * | `icon` | 58.4% | 52.0% |\n * | `bg` | 100% | 92.5% |\n *\n * `success` é a exceção deliberada: seus tons foram dessaturados à mão no\n * Figma (S≈48%) para não brigar com o verde de marca. Mantido como está.\n *\n * Ver `FIGMA_OVERRIDES` para as divergências resolvidas na extração.\n */\nexport const feedback = {\n error: {\n text: \"#670A1A\",\n icon: \"#CC3D55\",\n bg: \"#FFD9DF\",\n },\n alert: {\n text: \"#672A0A\",\n icon: \"#CC6D3D\",\n bg: \"#FFE6D9\",\n },\n warning: {\n text: \"#67480A\",\n icon: \"#CC9C3D\",\n bg: \"#FFF2D9\",\n },\n success: {\n text: \"#246724\",\n icon: \"#70CC70\",\n bg: \"#D9FFD9\",\n },\n info: {\n text: \"#0A2967\",\n icon: \"#3D6DCC\",\n bg: \"#D9E6FF\",\n },\n} as const satisfies Record<string, FeedbackTone>;\n\n/**\n * Superfícies do tema escuro — página \"↳ Light e Dark Mode\" no Figma.\n *\n * Não são neutros cinzas: são azuis muito escuros, para casar com o azul\n * de marca. `outline` é a cor de borda/foco sobre esses fundos.\n */\nexport const dark = {\n bg: \"#040814\",\n surface: \"#090D1B\",\n elevated: \"#0B1325\",\n outline: \"#0E3571\",\n} as const;\n\n/**\n * Cores de legenda de mapa — `Subtitle/` no Figma.\n *\n * Paleta categórica para séries e marcadores geoespaciais. Cada cor tem\n * uma variação `light` para estados desabilitados/hover.\n */\nexport const subtitle = {\n red: \"#DA3C36\",\n orange: \"#D9822B\",\n yellow: \"#F2F218\",\n green: \"#4D9966\",\n blueLight: \"#51CFE3\",\n blueMedium: \"#2554B2\",\n purple: \"#634CD9\",\n} as const;\n\n/** Variações claras das cores de legenda — `Subtitle/Light/` no Figma. */\nexport const subtitleLight = {\n red: \"#F27F7A\",\n orange: \"#FFBF7F\",\n yellow: \"#FEFF80\",\n green: \"#98D9AD\",\n blueLight: \"#99CCFF\",\n blueMedium: \"#8CB2FF\",\n purple: \"#9985FF\",\n} as const;\n\n/**\n * Preto com transparência — `Transparency black/` no Figma.\n *\n * Usado em overlays de modal, headers com blur e estados de pressão.\n */\nexport const alpha = {\n 4: \"rgba(0, 0, 0, 0.04)\",\n 8: \"rgba(0, 0, 0, 0.08)\",\n 16: \"rgba(0, 0, 0, 0.16)\",\n 25: \"rgba(0, 0, 0, 0.25)\",\n 40: \"rgba(0, 0, 0, 0.4)\",\n 60: \"rgba(0, 0, 0, 0.6)\",\n 80: \"rgba(0, 0, 0, 0.8)\",\n} as const;\n\n/**\n * Divergências entre o rótulo e o preenchimento real de swatches no Figma,\n * e qual valor esta biblioteca adotou.\n *\n * Documentado aqui para que a próxima extração não \"corrija\" de volta para\n * o valor errado. Enquanto o Figma não for arrumado, ele e este arquivo\n * discordam nestes pontos — de propósito.\n */\nexport const FIGMA_OVERRIDES = [\n {\n swatch: \"Basics/Ice\",\n figmaFill: \"#E5E5E5\",\n figmaLabel: \"#FAFAFA\",\n adopted: \"#FAFAFA\",\n reason: \"o fill duplica Gray Light; o rótulo completa a rampa de neutros\",\n },\n {\n swatch: \"Feedback/Text Alert Orange\",\n figmaFill: \"#693014\",\n figmaLabel: \"#0A2967\",\n adopted: \"#672A0A\",\n reason:\n \"rótulo é cópia do Text Info Blue; fill está fora dos passos S/L da família. Derivado do matiz 20.3° nos passos canônicos\",\n },\n {\n swatch: \"Feedback/Icon Alert Orange\",\n figmaFill: \"#DD662B\",\n figmaLabel: \"#CC6D3D\",\n adopted: \"#CC6D3D\",\n reason: \"o rótulo bate exatamente com os passos S/L da família; o fill não\",\n },\n {\n swatch: \"Feedback/BG Alert Orange\",\n figmaFill: \"#FFD6C1\",\n figmaLabel: \"#D9E6FF\",\n adopted: \"#FFE6D9\",\n reason:\n \"rótulo é cópia do BG Info Blue; fill está em L87.8% em vez de L92.5%\",\n },\n {\n swatch: \"Subtitle/Blue Medium\",\n figmaFill: \"#E336B4\",\n figmaLabel: \"#2554B2\",\n adopted: \"#2554B2\",\n reason: \"o fill é magenta, incompatível com o nome da cor\",\n },\n {\n swatch: \"Subtitle/Blue Light\",\n figmaFill: \"#51CFE3\",\n figmaLabel: \"#5798D9\",\n adopted: \"#51CFE3\",\n reason:\n \"o fill é ciano e o rótulo é azul. Adotado o fill, que é o que renderiza hoje nas legendas de mapa e o que dá matiz distinto do Blue Medium — mas a divergência é grande o bastante para valer confirmação com o design\",\n },\n {\n swatch: \"Subtitle/Light/Blue Medium\",\n figmaFill: \"#8CB2FF\",\n figmaLabel: \"#8CA9FF\",\n adopted: \"#8CB2FF\",\n reason: \"diferença de um passo de matiz; adotado o fill, que é o que renderiza\",\n },\n {\n swatch: \"Subtitle/Light/Yellow\",\n figmaFill: \"#FEFF80\",\n figmaLabel: \"#E9E98E\",\n adopted: \"#FEFF80\",\n reason: \"adotado o fill; o rótulo é mais dessaturado e não acompanha o resto da família Light\",\n },\n] as const;\n\nexport const colors = {\n blue,\n green,\n red,\n gray,\n feedback,\n dark,\n subtitle,\n subtitleLight,\n alpha,\n} as const;\n","/**\n * Tokens semânticos (tema) da FracUI.\n *\n * Cada valor é um triplo HSL (\"H S% L%\", sem o wrapper hsl()) para poder\n * ser injetado em variáveis CSS e consumido pelo Tailwind como\n * `hsl(var(--nome))`. Isso permite alternar temas (claro/escuro) apenas\n * trocando as variáveis, sem trocar classes.\n *\n * IMPORTANTE: estes valores precisam ficar em sincronia com\n * `src/styles/globals.css`. Se alterar um valor aqui, atualize o CSS\n * correspondente (e vice-versa).\n *\n * Os nomes seguem o contrato do shadcn/ui (`background`, `primary`,\n * `muted`...) para que os componentes existentes continuem funcionando,\n * mas os VALORES vêm da paleta Fractal em `colors.ts`.\n *\n * `primary` é o azul INTERATIVO (`blue.light`, #3D76CC), não o azul\n * institucional. O Figma usa #3D76CC como fundo de repouso do botão\n * primário, do switch ligado, do FAB, da aba ativa e do link; #142C50\n * aparece como estado pressionado/focado e como fundo de tooltip. A cor\n * institucional continua disponível como `--brand-primary`.\n */\n\nexport type SemanticTheme = {\n background: string;\n foreground: string;\n card: string;\n cardForeground: string;\n popover: string;\n popoverForeground: string;\n primary: string;\n primaryForeground: string;\n secondary: string;\n secondaryForeground: string;\n muted: string;\n mutedForeground: string;\n accent: string;\n accentForeground: string;\n destructive: string;\n destructiveForeground: string;\n border: string;\n input: string;\n ring: string;\n};\n\n/**\n * Camada Fractal sobre o contrato do shadcn.\n *\n * `brand*` expõe o azul e o verde institucionais como tokens semânticos\n * (o `primary` do shadcn é consumido por dezenas de componentes e nem\n * sempre é o lugar certo para a cor de marca).\n *\n * `*Text`/`*Icon`/`*Bg` reproduzem o modelo de feedback do Figma, em que\n * cada estado tem três cores coordenadas em vez de uma só.\n */\nexport type BrandTheme = {\n brandPrimary: string;\n brandPrimaryMedium: string;\n brandPrimaryLight: string;\n brandSecondary: string;\n brandSecondaryMedium: string;\n brandSecondaryLight: string;\n\n errorText: string;\n errorIcon: string;\n errorBg: string;\n\n alertText: string;\n alertIcon: string;\n alertBg: string;\n\n warningText: string;\n warningIcon: string;\n warningBg: string;\n\n successText: string;\n successIcon: string;\n successBg: string;\n\n infoText: string;\n infoIcon: string;\n infoBg: string;\n\n disabledForeground: string;\n disabledBg: string;\n};\n\nexport const lightTheme: SemanticTheme = {\n background: \"0 0% 100%\", // gray.white #FFFFFF\n foreground: \"0 0% 12.5%\", // gray.dark #202020\n card: \"0 0% 100%\", // gray.white #FFFFFF\n cardForeground: \"0 0% 12.5%\", // gray.dark #202020\n popover: \"0 0% 100%\", // gray.white #FFFFFF\n popoverForeground: \"0 0% 12.5%\", // gray.dark #202020\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n secondaryForeground: \"0 0% 20%\", // gray.mediumDark #333333\n muted: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n mutedForeground: \"0 0% 45.1%\", // gray.medium #737373\n accent: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n accentForeground: \"216 60% 19.6%\", // blue.dark #142C50\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"0 0% 89.8%\", // gray.light #E5E5E5\n input: \"0 0% 89.8%\", // gray.light #E5E5E5\n ring: \"216.1 58.4% 52%\", // blue.light #3D76CC\n};\n\nexport const darkTheme: SemanticTheme = {\n background: \"225 66.7% 4.7%\", // dark.bg #040814\n foreground: \"0 0% 100%\", // gray.white #FFFFFF\n card: \"226.7 50% 7.1%\", // dark.surface #090D1B\n cardForeground: \"0 0% 100%\", // gray.white #FFFFFF\n popover: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n popoverForeground: \"0 0% 100%\", // gray.white #FFFFFF\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n secondaryForeground: \"0 0% 89.8%\", // gray.light #E5E5E5\n muted: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n mutedForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n accent: \"216 60% 19.6%\", // blue.dark #142C50\n accentForeground: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"216 60% 19.6%\", // blue.dark #142C50\n input: \"216 60% 19.6%\", // blue.dark #142C50\n ring: \"216.4 78% 24.9%\", // dark.outline #0E3571\n};\n\nexport const lightBrand: BrandTheme = {\n brandPrimary: \"216 60% 19.6%\", // blue.dark #142C50\n brandPrimaryMedium: \"216.1 59.3% 35.7%\", // blue.medium #255091\n brandPrimaryLight: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandSecondary: \"88 69.9% 30%\", // green.dark #508217\n brandSecondaryMedium: \"88 59.8% 40%\", // green.medium #6AA329\n brandSecondaryLight: \"87.9 50.6% 50%\", // green.light #84C03F\n\n errorText: \"349.7 82.3% 22.2%\", // #670A1A\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"350.5 100% 92.5%\", // #FFD9DF\n\n alertText: \"20.6 82.3% 22.2%\", // #672A0A\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.5 100% 92.5%\", // #FFE6D9\n\n warningText: \"40 82.3% 22.2%\", // #67480A\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"39.5 100% 92.5%\", // #FFF2D9\n\n successText: \"120 48.2% 27.3%\", // #246724\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 100% 92.5%\", // #D9FFD9\n\n infoText: \"220 82.3% 22.2%\", // #0A2967\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"219.5 100% 92.5%\", // #D9E6FF\n\n disabledForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n disabledBg: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n};\n\n/**\n * Feedback no tema escuro.\n *\n * ATENÇÃO: o Figma não especifica os estados de feedback sobre fundo\n * escuro. Estes valores são DERIVADOS, trocando os papéis de `text` e\n * `bg` (o tom escuro vira superfície, o tom claro vira texto) e mantendo\n * o `icon`, que já tem contraste suficiente nos dois temas.\n *\n * Substitua por valores especificados assim que a página de dark mode do\n * Figma cobrir feedback.\n */\nexport const darkBrand: BrandTheme = {\n brandPrimary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandPrimaryMedium: \"215.9 72.5% 62.9%\", // blue.5 #5C93E5\n brandPrimaryLight: \"215.9 98.4% 74.7%\", // blue.4 #7FB2FE\n brandSecondary: \"87.9 50.6% 50%\", // green.light #84C03F\n brandSecondaryMedium: \"87.8 50.3% 62.2%\", // green.5 #A2CF6E\n brandSecondaryLight: \"87.9 50.3% 71.6%\", // green.4 #B9DB92\n\n errorText: \"350.5 100% 92.5%\", // #FFD9DF\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"349.7 82.3% 22.2%\", // #670A1A\n\n alertText: \"20.5 100% 92.5%\", // #FFE6D9\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.6 82.3% 22.2%\", // #672A0A\n\n warningText: \"39.5 100% 92.5%\", // #FFF2D9\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"40 82.3% 22.2%\", // #67480A\n\n successText: \"120 100% 92.5%\", // #D9FFD9\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 48.2% 27.3%\", // #246724\n\n infoText: \"219.5 100% 92.5%\", // #D9E6FF\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"220 82.3% 22.2%\", // #0A2967\n\n /*\n * DERIVADO. O #BFBFBF que o Figma usa para desabilitado só funciona\n * sobre fundo claro: no escuro ele fica MAIS claro que o texto normal,\n * e o elemento desabilitado passa a chamar mais atenção que o ativo.\n * Aqui o desabilitado escurece, mantendo a relação de hierarquia.\n */\n disabledForeground: \"0 0% 45.1%\", // gray.medium #737373\n disabledBg: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n};\n\n/**\n * Raio de borda base, usado por `rounded-lg`/`rounded-md`/`rounded-sm`\n * via preset. 8px é o valor de canto mais usado em componentes no Figma.\n */\nexport const radius = \"0.5rem\";\n\n/**\n * Escala de raios do Figma, por frequência de uso no arquivo:\n * 4px (1047x), 12px (925x), 8px (787x), 16px (265x), 25px (215x),\n * 30px (124x), 40px (68x).\n *\n * `sm`/`md`/`lg` continuam derivados de `--radius` (contrato shadcn) e\n * por isso não aparecem aqui.\n */\nexport const radii = {\n xs: \"4px\",\n xl: \"12px\",\n \"2xl\": \"16px\",\n \"3xl\": \"30px\",\n \"4xl\": \"40px\",\n pill: \"9999px\",\n} as const;\n\nexport const theme = {\n light: lightTheme,\n dark: darkTheme,\n lightBrand,\n darkBrand,\n radius,\n radii,\n} as const;\n","/**\n * Tokens de tipografia da FracUI.\n *\n * Extraídos dos 28 estilos de texto publicados no Figma\n * \"Design System - 2026\" (página \"↳ Tipografia\").\n *\n * O peso é um eixo separado do tamanho: cada estilo abaixo existe em\n * `regular` (400) e `medium` (500) com as mesmas métricas, exceto onde\n * anotado. Por isso a escala expõe tamanho/entrelinha/tracking e deixa o\n * peso para as utilidades `font-normal` / `font-medium`.\n */\n\n/** Pilha padrão de fontes. Todo o design system usa Roboto. */\nexport const fontFamily = {\n sans: [\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"'Segoe UI'\",\n \"sans-serif\",\n ],\n /**\n * ATENÇÃO: no Figma, `h1` e `h2` no peso medium estão em Rubik, apesar\n * de os estilos se chamarem `roboto/medium/h1` e `roboto/medium/h2`.\n * Exposto aqui para reproduzir fielmente o design; confirme com o time\n * de design se é intencional antes de usar em produção.\n */\n display: [\n \"Rubik\",\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"sans-serif\",\n ],\n} as const;\n\nexport type TypeStyle = {\n /** `font-size` em px. */\n fontSize: string;\n /** `line-height` em px. */\n lineHeight: string;\n /** `letter-spacing` em px. */\n letterSpacing: string;\n /** Presente apenas nos estilos que o Figma marca como caixa alta. */\n textTransform?: \"uppercase\";\n};\n\n/**\n * Escala tipográfica.\n *\n * Consumida pelo preset como `theme.extend.fontSize`, o que gera as\n * classes `text-h1`, `text-body-1`, `text-caption`, etc.\n */\nexport const typeScale = {\n h1: {\n fontSize: \"36px\",\n lineHeight: \"37.8px\",\n letterSpacing: \"0px\",\n },\n h2: {\n fontSize: \"30px\",\n lineHeight: \"30px\",\n letterSpacing: \"0px\",\n },\n h3: {\n fontSize: \"24px\",\n lineHeight: \"24px\",\n letterSpacing: \"0.24px\",\n },\n h4: {\n fontSize: \"20px\",\n lineHeight: \"27px\",\n letterSpacing: \"0.2px\",\n },\n h5: {\n fontSize: \"18px\",\n lineHeight: \"24.3px\",\n letterSpacing: \"0.18px\",\n },\n \"subtitle-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.32px\",\n },\n \"subtitle-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n },\n \"body-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-allcaps\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n textTransform: \"uppercase\",\n },\n button: {\n fontSize: \"14px\",\n lineHeight: \"16.1px\",\n letterSpacing: \"1.4px\",\n textTransform: \"uppercase\",\n },\n caption: {\n fontSize: \"12px\",\n lineHeight: \"14.4px\",\n letterSpacing: \"0.48px\",\n },\n link: {\n fontSize: \"14px\",\n lineHeight: \"18.2px\",\n letterSpacing: \"0.56px\",\n },\n} as const satisfies Record<string, TypeStyle>;\n\n/**\n * Variação de tracking dos estilos `medium` que diferem do `regular`.\n *\n * Só `h1`, `h2`, `h3` e `caption` mudam de tracking ao trocar de peso; os\n * demais são idênticos. Aplique manualmente quando usar `font-medium`\n * nesses quatro estilos.\n */\nexport const mediumTracking = {\n h1: \"0.72px\",\n h2: \"1.12px\",\n h3: \"0.48px\",\n caption: \"0.36px\",\n} as const;\n\n/**\n * `h2` no peso medium também muda de tamanho e entrelinha (28px/39.2px,\n * contra 30px/30px do regular), além de trocar para a família `display`.\n */\nexport const h2Medium: TypeStyle = {\n fontSize: \"28px\",\n lineHeight: \"39.2px\",\n letterSpacing: \"1.12px\",\n};\n\nexport const typography = {\n fontFamily,\n typeScale,\n mediumTracking,\n h2Medium,\n} as const;\n","/**\n * Sistema de elevação da FracUI.\n *\n * Extraído dos 20 estilos de efeito do Figma \"Design System - 2026\"\n * (página \"↳ Sombras e Blur\").\n *\n * O sistema tem dois eixos:\n *\n * - **direção**: `down` / `up` / `left` / `right` — a sombra é projetada\n * para o lado indicado, e não apenas para baixo. Usado para destacar\n * sidebars (`right`), barras fixas de rodapé (`up`) e drawers (`left`).\n * - **intensidade**: `1` / `4` / `8` dp, seguindo a escala do Material.\n *\n * Cada nível é uma tripla de sombras (contato, difusa, ambiente) — não\n * simplifique para uma só: o degradê entre as três é o que dá a\n * profundidade.\n */\n\n/** Sombras neutras — `Grey/` no Figma. */\nexport const shadowGrey = {\n \"down-1\":\n \"0px 2px 4px rgba(0, 0, 0, 0.08), 0px 9px 15px rgba(0, 0, 0, 0.05), 0px 24px 46px rgba(0, 0, 0, 0.03)\",\n \"down-4\":\n \"0px 2px 5px rgba(0, 0, 0, 0.16), 0px 12px 20px rgba(0, 0, 0, 0.10), 0px 32px 58px rgba(0, 0, 0, 0.07)\",\n \"down-8\":\n \"0px 4px 6px rgba(0, 0, 0, 0.20), 0px 18px 22px rgba(0, 0, 0, 0.12), 0px 48px 70px rgba(0, 0, 0, 0.08)\",\n \"up-1\":\n \"0px -2px 4px rgba(0, 0, 0, 0.08), 0px -9px 15px rgba(0, 0, 0, 0.05), 0px -24px 46px rgba(0, 0, 0, 0.03)\",\n \"up-4\":\n \"0px -2px 5px rgba(0, 0, 0, 0.16), 0px -12px 20px rgba(0, 0, 0, 0.10), 0px -32px 58px rgba(0, 0, 0, 0.07)\",\n \"up-8\":\n \"0px -4px 6px rgba(0, 0, 0, 0.20), 0px -18px 22px rgba(0, 0, 0, 0.12), 0px -48px 70px rgba(0, 0, 0, 0.08)\",\n \"right-1\":\n \"2px 0px 4px rgba(0, 0, 0, 0.08), 9px 0px 15px rgba(0, 0, 0, 0.05), 24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(0, 0, 0, 0.16), 12px 0px 20px rgba(0, 0, 0, 0.10), 32px 0px 58px rgba(0, 0, 0, 0.07)\",\n \"left-1\":\n \"-2px 0px 4px rgba(0, 0, 0, 0.08), -9px 0px 15px rgba(0, 0, 0, 0.05), -24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"left-4\":\n \"-2px 0px 5px rgba(0, 0, 0, 0.16), -12px 0px 20px rgba(0, 0, 0, 0.10), -32px 0px 58px rgba(0, 0, 0, 0.07)\",\n} as const;\n\n/**\n * Sombras azuis — `azul/` no Figma.\n *\n * Tingidas com o azul de marca (`#3D76CC` nas laterais, `#142C50` nas\n * centralizadas). Usadas em superfícies que ficam sobre fundo azul, onde\n * a sombra neutra cinza parece suja.\n */\nexport const shadowBlue = {\n \"right-1\":\n \"2px 0px 4px rgba(61, 118, 204, 0.08), 4px 0px 10px rgba(61, 118, 204, 0.05), 24px 0px 46px rgba(61, 118, 204, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(61, 118, 204, 0.16), 12px 0px 20px rgba(61, 118, 204, 0.10), 32px 0px 58px rgba(61, 118, 204, 0.07)\",\n \"right-1-dark\":\n \"4px 0px 5px rgba(20, 44, 80, 0.12), 6px 0px 10px rgba(20, 44, 80, 0.05), 24px 0px 46px rgba(20, 44, 80, 0.03)\",\n \"center-1\": \"0px 1px 0.5px rgba(20, 44, 80, 0.02)\",\n \"center-2\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.08), -2px -2px 4.5px rgba(20, 44, 80, 0.08)\",\n \"center-2-dark\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.40), -2px -2px 4.5px rgba(20, 44, 80, 0.40)\",\n} as const;\n\n/** Sombra de contorno sutil — `Sombras/shadow-Elemento4` no Figma. */\nexport const shadowOutline = \"0px 0px 2px rgba(36, 36, 36, 0.10)\";\n\n/**\n * Desfoque de fundo dos headers e overlays \"glass\" — `Glass blur` no\n * Figma. Aplique junto de um fundo semitransparente (ver `colors.alpha`).\n */\nexport const backdropBlur = {\n glass: \"13.2px\",\n} as const;\n\n/**\n * Mapa achatado consumido pelo preset como `theme.extend.boxShadow`.\n *\n * Gera `shadow-down-1`, `shadow-blue-right-4`, `shadow-outline`, etc.\n */\nexport const boxShadow = {\n ...shadowGrey,\n ...Object.fromEntries(\n Object.entries(shadowBlue).map(([k, v]) => [`blue-${k}`, v])\n ),\n outline: shadowOutline,\n} as Record<string, string>;\n\nexport const elevation = {\n shadowGrey,\n shadowBlue,\n shadowOutline,\n backdropBlur,\n boxShadow,\n} as const;\n","/**\n * Malha e breakpoints da FracUI.\n *\n * Extraídos dos 6 estilos de grid do Figma \"Design System - 2026\"\n * (página \"↳ Grid\"), lidos dos `layoutGrids` dos frames de exemplo.\n *\n * O design define três larguras de referência — 360, 768 e 1280 — e três\n * malhas distintas para desktop, escolhidas pelo tipo de tela e não pelo\n * tamanho. Não são breakpoints alternativos: são layouts diferentes na\n * mesma largura.\n */\n\n/**\n * Breakpoints adicionados à escala padrão do Tailwind.\n *\n * As três larguras de referência do design já coincidem com breakpoints\n * padrão, então não há motivo para substituir a escala inteira:\n *\n * | Design | Largura | Tailwind |\n * | ----------------- | ------- | -------- |\n * | mobile | 360px | `xs` ⬅ adicionado |\n * | tablet | 768px | `md` (já é 768) |\n * | desktop | 1280px | `xl` (já é 1280) |\n *\n * Só `xs` é novo. Substituir a escala quebraria `sm:` e `lg:`, usados nos\n * componentes existentes, sem ganho de fidelidade — por isso este objeto\n * entra em `theme.extend.screens`, e não em `theme.screens`.\n */\nexport const screens = {\n xs: \"360px\",\n} as const;\n\nexport type LayoutGrid = {\n /** Largura do frame em que a malha foi especificada. */\n reference: string;\n columns: number;\n /** Espaço entre colunas. */\n gutter: string;\n /** Margem nas laterais do container. */\n margin: string;\n /** Largura de coluna fixa, quando o design não usa colunas fluidas. */\n columnWidth?: string;\n /** Passo da malha de linha de base. */\n baseline: string;\n};\n\n/**\n * As cinco malhas nomeadas do design.\n *\n * `deskRight` é a malha das telas com painel lateral à direita (colunas\n * ancoradas à direita); `deskCentered` é a malha de conteúdo corrido;\n * `deskMenu` é a faixa estreita do menu lateral.\n */\nexport const grids = {\n deskRight: {\n reference: \"1280px\",\n columns: 11,\n gutter: \"16px\",\n margin: \"18px\",\n columnWidth: \"75px\",\n baseline: \"8px\",\n },\n deskCentered: {\n reference: \"1280px\",\n columns: 14,\n gutter: \"27px\",\n margin: \"70px\",\n columnWidth: \"60px\",\n baseline: \"4px\",\n },\n deskMenu: {\n reference: \"1280px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n columnWidth: \"44px\",\n baseline: \"4px\",\n },\n tablet: {\n reference: \"768px\",\n columns: 8,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n mobile: {\n reference: \"360px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n} as const satisfies Record<string, LayoutGrid>;\n\n/**\n * Container padrão.\n *\n * A margem de 70px vem da malha `deskCentered`, que é a usada nas telas de\n * conteúdo. Abaixo de 1280px o design cai para a margem de 16px das malhas\n * de tablet e mobile.\n */\nexport const container = {\n center: true,\n padding: {\n DEFAULT: \"16px\",\n lg: \"70px\",\n },\n screens: {\n xl: \"1440px\",\n },\n} as const;\n\n/**\n * Escala de espaçamento derivada da malha de linha de base.\n *\n * O design usa duas bases: 4px na maioria das telas e 8px na malha\n * `deskRight`. Como 8 é múltiplo de 4, a escala de 4 cobre as duas.\n */\nexport const spacingBase = \"4px\";\n\nexport const grid = {\n screens,\n grids,\n container,\n spacingBase,\n} as const;\n"],"names":["blue","green","red","gray","feedback","dark","subtitle","subtitleLight","alpha","FIGMA_OVERRIDES","colors","lightTheme","darkTheme","lightBrand","darkBrand","radius","radii","theme","fontFamily","typeScale","mediumTracking","h2Medium","typography","shadowGrey","shadowBlue","shadowOutline","backdropBlur","boxShadow","k","v","elevation","screens","grids","container","spacingBase","grid"],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sources":["../src/tokens/colors.ts","../src/tokens/theme.ts","../src/tokens/typography.ts","../src/tokens/elevation.ts","../src/tokens/grid.ts"],"sourcesContent":["/**\n * Paleta primitiva de cores da FracUI.\n *\n * Extraída do Figma \"Design System - 2026\"\n * (file key `J15QTL7SaxlobMRnPtOimR`, página \"↳ Cores\").\n *\n * Estas são as cores \"cruas\" (hex) que alimentam os tokens semânticos em\n * `theme.ts`. Use estas escalas diretamente apenas quando não houver um\n * token semântico equivalente (ex: gráficos, ilustrações, e-mails).\n *\n * Para UI de produto, prefira sempre os tokens semânticos\n * (`primary`, `background`, `destructive`, etc.) expostos via classes do\n * Tailwind (`bg-primary`, `text-muted-foreground`...).\n */\n\n/** Escala de 5 tons claros (`Shades/` no Figma), do mais claro ao mais escuro. */\nexport type ShadeScale = {\n 1: string;\n 2: string;\n 3: string;\n 4: string;\n 5: string;\n};\n\n/** Trio de cores de um estado de feedback, conforme modelado no Figma. */\nexport type FeedbackTone = {\n /** Cor do texto sobre o fundo `bg`. */\n text: string;\n /** Cor de ícones e bordas de destaque. */\n icon: string;\n /** Cor de fundo da superfície do alerta. */\n bg: string;\n};\n\n/**\n * Azul institucional — `Primary/` + `Shades/Blue` no Figma.\n *\n * `dark` é a cor de marca principal (usada em `--primary` no tema claro);\n * `light` é a variação usada sobre fundos escuros.\n */\nexport const blue = {\n 1: \"#E5F0FF\",\n 2: \"#CBE0FE\",\n 3: \"#A5C8FE\",\n 4: \"#7FB2FE\",\n 5: \"#5C93E5\",\n light: \"#3D76CC\",\n medium: \"#255091\",\n dark: \"#142C50\",\n} as const;\n\n/**\n * Verde institucional — `Secondary/` + `Shades/Green` no Figma.\n *\n * É a cor de apoio da marca, NÃO o estado de sucesso: para \"deu certo\",\n * use `feedback.success`.\n */\nexport const green = {\n 1: \"#F4F9ED\",\n 2: \"#E2F0D1\",\n 3: \"#D1E7B7\",\n 4: \"#B9DB92\",\n 5: \"#A2CF6E\",\n light: \"#84C03F\",\n medium: \"#6AA329\",\n dark: \"#508217\",\n} as const;\n\n/**\n * Escala vermelha de intensidade — conjunto `Tags` no Figma.\n *\n * Usada apenas para graduar a força do El Niño, do mais fraco ao mais\n * forte. Não está na página de cores do arquivo: existe só dentro do\n * conjunto `Tags`, e por isso não tem os cinco passos das outras escalas.\n *\n * A contraparte da La Niña são os quatro primeiros passos de `blue`, que\n * já existiam na paleta — só o lado vermelho precisava ser nomeado.\n */\nexport const red = {\n 1: \"#F9EAEA\",\n 2: \"#F8CECE\",\n 3: \"#EAA4A4\",\n 4: \"#E18282\",\n} as const;\n\n/**\n * Neutros — `Basics/` no Figma.\n *\n * Rampa contínua do branco puro ao quase-preto. `white`/`ice`/`iceMedium`\n * são superfícies; `light`/`lightMedium` são bordas e divisores;\n * `DEFAULT`/`medium`/`mediumDark`/`dark` são níveis de texto.\n */\nexport const gray = {\n white: \"#FFFFFF\",\n ice: \"#FAFAFA\",\n iceMedium: \"#F5F5F5\",\n light: \"#E5E5E5\",\n lightMedium: \"#BFBFBF\",\n DEFAULT: \"#999999\",\n medium: \"#737373\",\n mediumDark: \"#333333\",\n dark: \"#202020\",\n} as const;\n\n/**\n * Estados de feedback — `Feedback/` no Figma.\n *\n * Cada família é um matiz em três passos fixos de saturação/luminosidade:\n *\n * | slot | S | L |\n * | ------ | ------ | ------ |\n * | `text` | 82.3% | 22.2% |\n * | `icon` | 58.4% | 52.0% |\n * | `bg` | 100% | 92.5% |\n *\n * `success` é a exceção deliberada: seus tons foram dessaturados à mão no\n * Figma (S≈48%) para não brigar com o verde de marca. Mantido como está.\n *\n * Ver `FIGMA_OVERRIDES` para as divergências resolvidas na extração.\n */\nexport const feedback = {\n error: {\n text: \"#670A1A\",\n icon: \"#CC3D55\",\n bg: \"#FFD9DF\",\n },\n alert: {\n text: \"#672A0A\",\n icon: \"#CC6D3D\",\n bg: \"#FFE6D9\",\n },\n warning: {\n text: \"#67480A\",\n icon: \"#CC9C3D\",\n bg: \"#FFF2D9\",\n },\n success: {\n text: \"#246724\",\n icon: \"#70CC70\",\n bg: \"#D9FFD9\",\n },\n info: {\n text: \"#0A2967\",\n icon: \"#3D6DCC\",\n bg: \"#D9E6FF\",\n },\n} as const satisfies Record<string, FeedbackTone>;\n\n/**\n * Superfícies do tema escuro — página \"↳ Light e Dark Mode\" no Figma.\n *\n * Não são neutros cinzas: são azuis muito escuros, para casar com o azul\n * de marca. `outline` é a cor de borda/foco sobre esses fundos.\n */\nexport const dark = {\n bg: \"#040814\",\n surface: \"#090D1B\",\n elevated: \"#0B1325\",\n outline: \"#0E3571\",\n} as const;\n\n/**\n * Cores de legenda de mapa — `Subtitle/` no Figma.\n *\n * Paleta categórica para séries e marcadores geoespaciais. Cada cor tem\n * uma variação `light` para estados desabilitados/hover.\n */\nexport const subtitle = {\n red: \"#DA3C36\",\n orange: \"#D9822B\",\n yellow: \"#F2F218\",\n green: \"#4D9966\",\n blueLight: \"#51CFE3\",\n blueMedium: \"#2554B2\",\n purple: \"#634CD9\",\n} as const;\n\n/** Variações claras das cores de legenda — `Subtitle/Light/` no Figma. */\nexport const subtitleLight = {\n red: \"#F27F7A\",\n orange: \"#FFBF7F\",\n yellow: \"#FEFF80\",\n green: \"#98D9AD\",\n blueLight: \"#99CCFF\",\n blueMedium: \"#8CB2FF\",\n purple: \"#9985FF\",\n} as const;\n\n/**\n * Preto com transparência — `Transparency black/` no Figma.\n *\n * Usado em overlays de modal, headers com blur e estados de pressão.\n */\nexport const alpha = {\n 4: \"rgba(0, 0, 0, 0.04)\",\n 8: \"rgba(0, 0, 0, 0.08)\",\n 16: \"rgba(0, 0, 0, 0.16)\",\n 25: \"rgba(0, 0, 0, 0.25)\",\n 40: \"rgba(0, 0, 0, 0.4)\",\n 60: \"rgba(0, 0, 0, 0.6)\",\n 80: \"rgba(0, 0, 0, 0.8)\",\n} as const;\n\n/**\n * Divergências entre o rótulo e o preenchimento real de swatches no Figma,\n * e qual valor esta biblioteca adotou.\n *\n * Documentado aqui para que a próxima extração não \"corrija\" de volta para\n * o valor errado. Enquanto o Figma não for arrumado, ele e este arquivo\n * discordam nestes pontos — de propósito.\n */\nexport const FIGMA_OVERRIDES = [\n {\n swatch: \"Basics/Ice\",\n figmaFill: \"#E5E5E5\",\n figmaLabel: \"#FAFAFA\",\n adopted: \"#FAFAFA\",\n reason: \"o fill duplica Gray Light; o rótulo completa a rampa de neutros\",\n },\n {\n swatch: \"Feedback/Text Alert Orange\",\n figmaFill: \"#693014\",\n figmaLabel: \"#0A2967\",\n adopted: \"#672A0A\",\n reason:\n \"rótulo é cópia do Text Info Blue; fill está fora dos passos S/L da família. Derivado do matiz 20.3° nos passos canônicos\",\n },\n {\n swatch: \"Feedback/Icon Alert Orange\",\n figmaFill: \"#DD662B\",\n figmaLabel: \"#CC6D3D\",\n adopted: \"#CC6D3D\",\n reason: \"o rótulo bate exatamente com os passos S/L da família; o fill não\",\n },\n {\n swatch: \"Feedback/BG Alert Orange\",\n figmaFill: \"#FFD6C1\",\n figmaLabel: \"#D9E6FF\",\n adopted: \"#FFE6D9\",\n reason:\n \"rótulo é cópia do BG Info Blue; fill está em L87.8% em vez de L92.5%\",\n },\n {\n swatch: \"Subtitle/Blue Medium\",\n figmaFill: \"#E336B4\",\n figmaLabel: \"#2554B2\",\n adopted: \"#2554B2\",\n reason: \"o fill é magenta, incompatível com o nome da cor\",\n },\n {\n swatch: \"Subtitle/Blue Light\",\n figmaFill: \"#51CFE3\",\n figmaLabel: \"#5798D9\",\n adopted: \"#51CFE3\",\n reason:\n \"o fill é ciano e o rótulo é azul. Adotado o fill, que é o que renderiza hoje nas legendas de mapa e o que dá matiz distinto do Blue Medium — mas a divergência é grande o bastante para valer confirmação com o design\",\n },\n {\n swatch: \"Subtitle/Light/Blue Medium\",\n figmaFill: \"#8CB2FF\",\n figmaLabel: \"#8CA9FF\",\n adopted: \"#8CB2FF\",\n reason: \"diferença de um passo de matiz; adotado o fill, que é o que renderiza\",\n },\n {\n swatch: \"Subtitle/Light/Yellow\",\n figmaFill: \"#FEFF80\",\n figmaLabel: \"#E9E98E\",\n adopted: \"#FEFF80\",\n reason: \"adotado o fill; o rótulo é mais dessaturado e não acompanha o resto da família Light\",\n },\n] as const;\n\nexport const colors = {\n blue,\n green,\n red,\n gray,\n feedback,\n dark,\n subtitle,\n subtitleLight,\n alpha,\n} as const;\n","/**\n * Tokens semânticos (tema) da FracUI.\n *\n * Cada valor é um triplo HSL (\"H S% L%\", sem o wrapper hsl()) para poder\n * ser injetado em variáveis CSS e consumido pelo Tailwind como\n * `hsl(var(--nome))`. Isso permite alternar temas (claro/escuro) apenas\n * trocando as variáveis, sem trocar classes.\n *\n * IMPORTANTE: estes valores precisam ficar em sincronia com\n * `src/styles/tokens.css`. Se alterar um valor aqui, atualize o CSS\n * correspondente (e vice-versa).\n *\n * Os nomes seguem o contrato do shadcn/ui (`background`, `primary`,\n * `muted`...) para que os componentes existentes continuem funcionando,\n * mas os VALORES vêm da paleta Fractal em `colors.ts`.\n *\n * `primary` é o azul INTERATIVO (`blue.light`, #3D76CC), não o azul\n * institucional. O Figma usa #3D76CC como fundo de repouso do botão\n * primário, do switch ligado, do FAB, da aba ativa e do link; #142C50\n * aparece como estado pressionado/focado e como fundo de tooltip. A cor\n * institucional continua disponível como `--brand-primary`.\n */\n\nexport type SemanticTheme = {\n background: string;\n foreground: string;\n card: string;\n cardForeground: string;\n popover: string;\n popoverForeground: string;\n primary: string;\n primaryForeground: string;\n secondary: string;\n secondaryForeground: string;\n muted: string;\n mutedForeground: string;\n accent: string;\n accentForeground: string;\n destructive: string;\n destructiveForeground: string;\n border: string;\n input: string;\n ring: string;\n};\n\n/**\n * Camada Fractal sobre o contrato do shadcn.\n *\n * `brand*` expõe o azul e o verde institucionais como tokens semânticos\n * (o `primary` do shadcn é consumido por dezenas de componentes e nem\n * sempre é o lugar certo para a cor de marca).\n *\n * `*Text`/`*Icon`/`*Bg` reproduzem o modelo de feedback do Figma, em que\n * cada estado tem três cores coordenadas em vez de uma só.\n */\nexport type BrandTheme = {\n brandPrimary: string;\n brandPrimaryMedium: string;\n brandPrimaryLight: string;\n brandSecondary: string;\n brandSecondaryMedium: string;\n brandSecondaryLight: string;\n\n errorText: string;\n errorIcon: string;\n errorBg: string;\n\n alertText: string;\n alertIcon: string;\n alertBg: string;\n\n warningText: string;\n warningIcon: string;\n warningBg: string;\n\n successText: string;\n successIcon: string;\n successBg: string;\n\n infoText: string;\n infoIcon: string;\n infoBg: string;\n\n disabledForeground: string;\n disabledBg: string;\n};\n\nexport const lightTheme: SemanticTheme = {\n background: \"0 0% 100%\", // gray.white #FFFFFF\n foreground: \"0 0% 12.5%\", // gray.dark #202020\n card: \"0 0% 100%\", // gray.white #FFFFFF\n cardForeground: \"0 0% 12.5%\", // gray.dark #202020\n popover: \"0 0% 100%\", // gray.white #FFFFFF\n popoverForeground: \"0 0% 12.5%\", // gray.dark #202020\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n secondaryForeground: \"0 0% 20%\", // gray.mediumDark #333333\n muted: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n mutedForeground: \"0 0% 45.1%\", // gray.medium #737373\n accent: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n accentForeground: \"216 60% 19.6%\", // blue.dark #142C50\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"0 0% 89.8%\", // gray.light #E5E5E5\n input: \"0 0% 89.8%\", // gray.light #E5E5E5\n ring: \"216.1 58.4% 52%\", // blue.light #3D76CC\n};\n\nexport const darkTheme: SemanticTheme = {\n background: \"225 66.7% 4.7%\", // dark.bg #040814\n foreground: \"0 0% 100%\", // gray.white #FFFFFF\n card: \"226.7 50% 7.1%\", // dark.surface #090D1B\n cardForeground: \"0 0% 100%\", // gray.white #FFFFFF\n popover: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n popoverForeground: \"0 0% 100%\", // gray.white #FFFFFF\n primary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n primaryForeground: \"0 0% 100%\", // gray.white #FFFFFF\n secondary: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n secondaryForeground: \"0 0% 89.8%\", // gray.light #E5E5E5\n muted: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n mutedForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n accent: \"216 60% 19.6%\", // blue.dark #142C50\n accentForeground: \"214.6 100% 94.9%\", // blue.1 #E5F0FF\n destructive: \"349.9 58.4% 52%\", // feedback.error.icon #CC3D55\n destructiveForeground: \"0 0% 100%\", // gray.white #FFFFFF\n border: \"216 60% 19.6%\", // blue.dark #142C50\n input: \"216 60% 19.6%\", // blue.dark #142C50\n ring: \"216.4 78% 24.9%\", // dark.outline #0E3571\n};\n\nexport const lightBrand: BrandTheme = {\n brandPrimary: \"216 60% 19.6%\", // blue.dark #142C50\n brandPrimaryMedium: \"216.1 59.3% 35.7%\", // blue.medium #255091\n brandPrimaryLight: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandSecondary: \"88 69.9% 30%\", // green.dark #508217\n brandSecondaryMedium: \"88 59.8% 40%\", // green.medium #6AA329\n brandSecondaryLight: \"87.9 50.6% 50%\", // green.light #84C03F\n\n errorText: \"349.7 82.3% 22.2%\", // #670A1A\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"350.5 100% 92.5%\", // #FFD9DF\n\n alertText: \"20.6 82.3% 22.2%\", // #672A0A\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.5 100% 92.5%\", // #FFE6D9\n\n warningText: \"40 82.3% 22.2%\", // #67480A\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"39.5 100% 92.5%\", // #FFF2D9\n\n successText: \"120 48.2% 27.3%\", // #246724\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 100% 92.5%\", // #D9FFD9\n\n infoText: \"220 82.3% 22.2%\", // #0A2967\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"219.5 100% 92.5%\", // #D9E6FF\n\n disabledForeground: \"0 0% 74.9%\", // gray.lightMedium #BFBFBF\n disabledBg: \"0 0% 96.1%\", // gray.iceMedium #F5F5F5\n};\n\n/**\n * Feedback no tema escuro.\n *\n * ATENÇÃO: o Figma não especifica os estados de feedback sobre fundo\n * escuro. Estes valores são DERIVADOS, trocando os papéis de `text` e\n * `bg` (o tom escuro vira superfície, o tom claro vira texto) e mantendo\n * o `icon`, que já tem contraste suficiente nos dois temas.\n *\n * Substitua por valores especificados assim que a página de dark mode do\n * Figma cobrir feedback.\n */\nexport const darkBrand: BrandTheme = {\n brandPrimary: \"216.1 58.4% 52%\", // blue.light #3D76CC\n brandPrimaryMedium: \"215.9 72.5% 62.9%\", // blue.5 #5C93E5\n brandPrimaryLight: \"215.9 98.4% 74.7%\", // blue.4 #7FB2FE\n brandSecondary: \"87.9 50.6% 50%\", // green.light #84C03F\n brandSecondaryMedium: \"87.8 50.3% 62.2%\", // green.5 #A2CF6E\n brandSecondaryLight: \"87.9 50.3% 71.6%\", // green.4 #B9DB92\n\n errorText: \"350.5 100% 92.5%\", // #FFD9DF\n errorIcon: \"349.9 58.4% 52%\", // #CC3D55\n errorBg: \"349.7 82.3% 22.2%\", // #670A1A\n\n alertText: \"20.5 100% 92.5%\", // #FFE6D9\n alertIcon: \"20.1 58.4% 52%\", // #CC6D3D\n alertBg: \"20.6 82.3% 22.2%\", // #672A0A\n\n warningText: \"39.5 100% 92.5%\", // #FFF2D9\n warningIcon: \"39.9 58.4% 52%\", // #CC9C3D\n warningBg: \"40 82.3% 22.2%\", // #67480A\n\n successText: \"120 100% 92.5%\", // #D9FFD9\n successIcon: \"120 47.4% 62%\", // #70CC70\n successBg: \"120 48.2% 27.3%\", // #246724\n\n infoText: \"219.5 100% 92.5%\", // #D9E6FF\n infoIcon: \"219.9 58.4% 52%\", // #3D6DCC\n infoBg: \"220 82.3% 22.2%\", // #0A2967\n\n /*\n * DERIVADO. O #BFBFBF que o Figma usa para desabilitado só funciona\n * sobre fundo claro: no escuro ele fica MAIS claro que o texto normal,\n * e o elemento desabilitado passa a chamar mais atenção que o ativo.\n * Aqui o desabilitado escurece, mantendo a relação de hierarquia.\n */\n disabledForeground: \"0 0% 45.1%\", // gray.medium #737373\n disabledBg: \"221.5 54.2% 9.4%\", // dark.elevated #0B1325\n};\n\n/**\n * Raio de borda base, usado por `rounded-lg`/`rounded-md`/`rounded-sm`\n * via preset. 8px é o valor de canto mais usado em componentes no Figma.\n */\nexport const radius = \"0.5rem\";\n\n/**\n * Escala de raios do Figma, por frequência de uso no arquivo:\n * 4px (1047x), 12px (925x), 8px (787x), 16px (265x), 25px (215x),\n * 30px (124x), 40px (68x).\n *\n * `sm`/`md`/`lg` continuam derivados de `--radius` (contrato shadcn) e\n * por isso não aparecem aqui.\n */\nexport const radii = {\n xs: \"4px\",\n xl: \"12px\",\n \"2xl\": \"16px\",\n \"3xl\": \"30px\",\n \"4xl\": \"40px\",\n pill: \"9999px\",\n} as const;\n\nexport const theme = {\n light: lightTheme,\n dark: darkTheme,\n lightBrand,\n darkBrand,\n radius,\n radii,\n} as const;\n","/**\n * Tokens de tipografia da FracUI.\n *\n * Extraídos dos 28 estilos de texto publicados no Figma\n * \"Design System - 2026\" (página \"↳ Tipografia\").\n *\n * O peso é um eixo separado do tamanho: cada estilo abaixo existe em\n * `regular` (400) e `medium` (500) com as mesmas métricas, exceto onde\n * anotado. Por isso a escala expõe tamanho/entrelinha/tracking e deixa o\n * peso para as utilidades `font-normal` / `font-medium`.\n */\n\n/** Pilha padrão de fontes. Todo o design system usa Roboto. */\nexport const fontFamily = {\n sans: [\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"'Segoe UI'\",\n \"sans-serif\",\n ],\n /**\n * ATENÇÃO: no Figma, `h1` e `h2` no peso medium estão em Rubik, apesar\n * de os estilos se chamarem `roboto/medium/h1` e `roboto/medium/h2`.\n * Exposto aqui para reproduzir fielmente o design; confirme com o time\n * de design se é intencional antes de usar em produção.\n */\n display: [\n \"Rubik\",\n \"Roboto\",\n \"ui-sans-serif\",\n \"system-ui\",\n \"-apple-system\",\n \"sans-serif\",\n ],\n} as const;\n\nexport type TypeStyle = {\n /** `font-size` em px. */\n fontSize: string;\n /** `line-height` em px. */\n lineHeight: string;\n /** `letter-spacing` em px. */\n letterSpacing: string;\n /** Presente apenas nos estilos que o Figma marca como caixa alta. */\n textTransform?: \"uppercase\";\n};\n\n/**\n * Escala tipográfica.\n *\n * Consumida pelo preset como `theme.extend.fontSize`, o que gera as\n * classes `text-h1`, `text-body-1`, `text-caption`, etc.\n */\nexport const typeScale = {\n h1: {\n fontSize: \"36px\",\n lineHeight: \"37.8px\",\n letterSpacing: \"0px\",\n },\n h2: {\n fontSize: \"30px\",\n lineHeight: \"30px\",\n letterSpacing: \"0px\",\n },\n h3: {\n fontSize: \"24px\",\n lineHeight: \"24px\",\n letterSpacing: \"0.24px\",\n },\n h4: {\n fontSize: \"20px\",\n lineHeight: \"27px\",\n letterSpacing: \"0.2px\",\n },\n h5: {\n fontSize: \"18px\",\n lineHeight: \"24.3px\",\n letterSpacing: \"0.18px\",\n },\n \"subtitle-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.32px\",\n },\n \"subtitle-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-1\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n },\n \"body-2\": {\n fontSize: \"14px\",\n lineHeight: \"19.6px\",\n letterSpacing: \"0.28px\",\n },\n \"body-allcaps\": {\n fontSize: \"16px\",\n lineHeight: \"20px\",\n letterSpacing: \"0.48px\",\n textTransform: \"uppercase\",\n },\n button: {\n fontSize: \"14px\",\n lineHeight: \"16.1px\",\n letterSpacing: \"1.4px\",\n textTransform: \"uppercase\",\n },\n caption: {\n fontSize: \"12px\",\n lineHeight: \"14.4px\",\n letterSpacing: \"0.48px\",\n },\n link: {\n fontSize: \"14px\",\n lineHeight: \"18.2px\",\n letterSpacing: \"0.56px\",\n },\n} as const satisfies Record<string, TypeStyle>;\n\n/**\n * Variação de tracking dos estilos `medium` que diferem do `regular`.\n *\n * Só `h1`, `h2`, `h3` e `caption` mudam de tracking ao trocar de peso; os\n * demais são idênticos. Aplique manualmente quando usar `font-medium`\n * nesses quatro estilos.\n */\nexport const mediumTracking = {\n h1: \"0.72px\",\n h2: \"1.12px\",\n h3: \"0.48px\",\n caption: \"0.36px\",\n} as const;\n\n/**\n * `h2` no peso medium também muda de tamanho e entrelinha (28px/39.2px,\n * contra 30px/30px do regular), além de trocar para a família `display`.\n */\nexport const h2Medium: TypeStyle = {\n fontSize: \"28px\",\n lineHeight: \"39.2px\",\n letterSpacing: \"1.12px\",\n};\n\nexport const typography = {\n fontFamily,\n typeScale,\n mediumTracking,\n h2Medium,\n} as const;\n","/**\n * Sistema de elevação da FracUI.\n *\n * Extraído dos 20 estilos de efeito do Figma \"Design System - 2026\"\n * (página \"↳ Sombras e Blur\").\n *\n * O sistema tem dois eixos:\n *\n * - **direção**: `down` / `up` / `left` / `right` — a sombra é projetada\n * para o lado indicado, e não apenas para baixo. Usado para destacar\n * sidebars (`right`), barras fixas de rodapé (`up`) e drawers (`left`).\n * - **intensidade**: `1` / `4` / `8` dp, seguindo a escala do Material.\n *\n * Cada nível é uma tripla de sombras (contato, difusa, ambiente) — não\n * simplifique para uma só: o degradê entre as três é o que dá a\n * profundidade.\n */\n\n/** Sombras neutras — `Grey/` no Figma. */\nexport const shadowGrey = {\n \"down-1\":\n \"0px 2px 4px rgba(0, 0, 0, 0.08), 0px 9px 15px rgba(0, 0, 0, 0.05), 0px 24px 46px rgba(0, 0, 0, 0.03)\",\n \"down-4\":\n \"0px 2px 5px rgba(0, 0, 0, 0.16), 0px 12px 20px rgba(0, 0, 0, 0.10), 0px 32px 58px rgba(0, 0, 0, 0.07)\",\n \"down-8\":\n \"0px 4px 6px rgba(0, 0, 0, 0.20), 0px 18px 22px rgba(0, 0, 0, 0.12), 0px 48px 70px rgba(0, 0, 0, 0.08)\",\n \"up-1\":\n \"0px -2px 4px rgba(0, 0, 0, 0.08), 0px -9px 15px rgba(0, 0, 0, 0.05), 0px -24px 46px rgba(0, 0, 0, 0.03)\",\n \"up-4\":\n \"0px -2px 5px rgba(0, 0, 0, 0.16), 0px -12px 20px rgba(0, 0, 0, 0.10), 0px -32px 58px rgba(0, 0, 0, 0.07)\",\n \"up-8\":\n \"0px -4px 6px rgba(0, 0, 0, 0.20), 0px -18px 22px rgba(0, 0, 0, 0.12), 0px -48px 70px rgba(0, 0, 0, 0.08)\",\n \"right-1\":\n \"2px 0px 4px rgba(0, 0, 0, 0.08), 9px 0px 15px rgba(0, 0, 0, 0.05), 24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(0, 0, 0, 0.16), 12px 0px 20px rgba(0, 0, 0, 0.10), 32px 0px 58px rgba(0, 0, 0, 0.07)\",\n \"left-1\":\n \"-2px 0px 4px rgba(0, 0, 0, 0.08), -9px 0px 15px rgba(0, 0, 0, 0.05), -24px 0px 46px rgba(0, 0, 0, 0.03)\",\n \"left-4\":\n \"-2px 0px 5px rgba(0, 0, 0, 0.16), -12px 0px 20px rgba(0, 0, 0, 0.10), -32px 0px 58px rgba(0, 0, 0, 0.07)\",\n} as const;\n\n/**\n * Sombras azuis — `azul/` no Figma.\n *\n * Tingidas com o azul de marca (`#3D76CC` nas laterais, `#142C50` nas\n * centralizadas). Usadas em superfícies que ficam sobre fundo azul, onde\n * a sombra neutra cinza parece suja.\n */\nexport const shadowBlue = {\n \"right-1\":\n \"2px 0px 4px rgba(61, 118, 204, 0.08), 4px 0px 10px rgba(61, 118, 204, 0.05), 24px 0px 46px rgba(61, 118, 204, 0.03)\",\n \"right-4\":\n \"2px 0px 5px rgba(61, 118, 204, 0.16), 12px 0px 20px rgba(61, 118, 204, 0.10), 32px 0px 58px rgba(61, 118, 204, 0.07)\",\n \"right-1-dark\":\n \"4px 0px 5px rgba(20, 44, 80, 0.12), 6px 0px 10px rgba(20, 44, 80, 0.05), 24px 0px 46px rgba(20, 44, 80, 0.03)\",\n \"center-1\": \"0px 1px 0.5px rgba(20, 44, 80, 0.02)\",\n \"center-2\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.08), -2px -2px 4.5px rgba(20, 44, 80, 0.08)\",\n \"center-2-dark\":\n \"2px 2px 4.5px rgba(20, 44, 80, 0.40), -2px -2px 4.5px rgba(20, 44, 80, 0.40)\",\n} as const;\n\n/** Sombra de contorno sutil — `Sombras/shadow-Elemento4` no Figma. */\nexport const shadowOutline = \"0px 0px 2px rgba(36, 36, 36, 0.10)\";\n\n/**\n * Desfoque de fundo dos headers e overlays \"glass\" — `Glass blur` no\n * Figma. Aplique junto de um fundo semitransparente (ver `colors.alpha`).\n */\nexport const backdropBlur = {\n glass: \"13.2px\",\n} as const;\n\n/**\n * Mapa achatado consumido pelo preset como `theme.extend.boxShadow`.\n *\n * Gera `shadow-down-1`, `shadow-blue-right-4`, `shadow-outline`, etc.\n */\nexport const boxShadow = {\n ...shadowGrey,\n ...Object.fromEntries(\n Object.entries(shadowBlue).map(([k, v]) => [`blue-${k}`, v])\n ),\n outline: shadowOutline,\n} as Record<string, string>;\n\nexport const elevation = {\n shadowGrey,\n shadowBlue,\n shadowOutline,\n backdropBlur,\n boxShadow,\n} as const;\n","/**\n * Malha e breakpoints da FracUI.\n *\n * Extraídos dos 6 estilos de grid do Figma \"Design System - 2026\"\n * (página \"↳ Grid\"), lidos dos `layoutGrids` dos frames de exemplo.\n *\n * O design define três larguras de referência — 360, 768 e 1280 — e três\n * malhas distintas para desktop, escolhidas pelo tipo de tela e não pelo\n * tamanho. Não são breakpoints alternativos: são layouts diferentes na\n * mesma largura.\n */\n\n/**\n * Breakpoints adicionados à escala padrão do Tailwind.\n *\n * As três larguras de referência do design já coincidem com breakpoints\n * padrão, então não há motivo para substituir a escala inteira:\n *\n * | Design | Largura | Tailwind |\n * | ----------------- | ------- | -------- |\n * | mobile | 360px | `xs` ⬅ adicionado |\n * | tablet | 768px | `md` (já é 768) |\n * | desktop | 1280px | `xl` (já é 1280) |\n *\n * Só `xs` é novo. Substituir a escala quebraria `sm:` e `lg:`, usados nos\n * componentes existentes, sem ganho de fidelidade — por isso este objeto\n * entra em `theme.extend.screens`, e não em `theme.screens`.\n */\nexport const screens = {\n xs: \"360px\",\n} as const;\n\nexport type LayoutGrid = {\n /** Largura do frame em que a malha foi especificada. */\n reference: string;\n columns: number;\n /** Espaço entre colunas. */\n gutter: string;\n /** Margem nas laterais do container. */\n margin: string;\n /** Largura de coluna fixa, quando o design não usa colunas fluidas. */\n columnWidth?: string;\n /** Passo da malha de linha de base. */\n baseline: string;\n};\n\n/**\n * As cinco malhas nomeadas do design.\n *\n * `deskRight` é a malha das telas com painel lateral à direita (colunas\n * ancoradas à direita); `deskCentered` é a malha de conteúdo corrido;\n * `deskMenu` é a faixa estreita do menu lateral.\n */\nexport const grids = {\n deskRight: {\n reference: \"1280px\",\n columns: 11,\n gutter: \"16px\",\n margin: \"18px\",\n columnWidth: \"75px\",\n baseline: \"8px\",\n },\n deskCentered: {\n reference: \"1280px\",\n columns: 14,\n gutter: \"27px\",\n margin: \"70px\",\n columnWidth: \"60px\",\n baseline: \"4px\",\n },\n deskMenu: {\n reference: \"1280px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n columnWidth: \"44px\",\n baseline: \"4px\",\n },\n tablet: {\n reference: \"768px\",\n columns: 8,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n mobile: {\n reference: \"360px\",\n columns: 4,\n gutter: \"16px\",\n margin: \"16px\",\n baseline: \"4px\",\n },\n} as const satisfies Record<string, LayoutGrid>;\n\n/**\n * Container padrão.\n *\n * A margem de 70px vem da malha `deskCentered`, que é a usada nas telas de\n * conteúdo. Abaixo de 1280px o design cai para a margem de 16px das malhas\n * de tablet e mobile.\n */\nexport const container = {\n center: true,\n padding: {\n DEFAULT: \"16px\",\n lg: \"70px\",\n },\n screens: {\n xl: \"1440px\",\n },\n} as const;\n\n/**\n * Escala de espaçamento derivada da malha de linha de base.\n *\n * O design usa duas bases: 4px na maioria das telas e 8px na malha\n * `deskRight`. Como 8 é múltiplo de 4, a escala de 4 cobre as duas.\n */\nexport const spacingBase = \"4px\";\n\nexport const grid = {\n screens,\n grids,\n container,\n spacingBase,\n} as const;\n"],"names":["blue","green","red","gray","feedback","dark","subtitle","subtitleLight","alpha","FIGMA_OVERRIDES","colors","lightTheme","darkTheme","lightBrand","darkBrand","radius","radii","theme","fontFamily","typeScale","mediumTracking","h2Medium","typography","shadowGrey","shadowBlue","shadowOutline","backdropBlur","boxShadow","k","v","elevation","screens","grids","container","spacingBase","grid"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fracui/styleguide",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Biblioteca de styleguide corporativa: componentes shadcn/ui, tokens de design e preset do Tailwind CSS para uso em múltiplos repositórios (single-spa).",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -30,6 +30,7 @@
30
30
  "require": "./dist/tokens.cjs"
31
31
  },
32
32
  "./styles.css": "./dist/styles.css",
33
+ "./tokens.css": "./dist/tokens.css",
33
34
  "./package.json": "./package.json",
34
35
  "./icons": {
35
36
  "types": "./dist/icons/index.d.ts",
@@ -40,7 +41,7 @@
40
41
  },
41
42
  "scripts": {
42
43
  "dev": "vite",
43
- "build": "tsc --noEmit -p tsconfig.build.json && vite build --config vite.lib.config.ts && tailwindcss -i src/styles/globals.css -o dist/styles.css --config tailwind.build.config.cjs --minify && node -e \"require('node:fs').copyFileSync('src/styles/fonts.css','dist/fonts.css')\"",
44
+ "build": "tsc --noEmit -p tsconfig.build.json && vite build --config vite.lib.config.ts && tailwindcss -i src/styles/globals.css -o dist/styles.css --config tailwind.build.config.cjs --minify && node -e \"require('node:fs').copyFileSync('src/styles/fonts.css','dist/fonts.css');require('node:fs').copyFileSync('src/styles/tokens.css','dist/tokens.css')\"",
44
45
  "build:system": "yarn build && vite build --config vite.system.config.ts",
45
46
  "build:playground": "vite build --config vite.config.ts",
46
47
  "typecheck": "tsc --noEmit",