diff --git a/.gitignore b/.gitignore
index 40447b4b4c..c77fbb40b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ coverage/
.directory
.DS_Store
.idea/
+mistica-web.iml
*.js.map
*.orig
*.rej
@@ -32,3 +33,4 @@ community.d.ts
.scannerwork
*storybook.log
.env*.local
+
diff --git a/doc/fonts.md b/doc/fonts.md
index 784e019e32..d4ffc17bb4 100644
--- a/doc/fonts.md
+++ b/doc/fonts.md
@@ -8,15 +8,15 @@ default serif font (Times New Roman on desktop). You must declare `@font-face` r
Each skin has a designated font family. Use the correct one for the skin your app is using:
-| Skin | Getter function | Font family |
-| --------------------- | ------------------------ | ------------------- |
-| `movistar` _(legacy)_ | `getMovistarSkin()` | `'On Air'` |
-| `o2` | `getO2Skin()` | `'On Air'` |
-| `vivo` | `getVivoSkin()` | `'Vivo Type'` |
-| `vivo-evolution` | `getVivoEvolutionSkin()` | `'Vivo Type'` |
-| `telefonica` | `getTelefonicaSkin()` | `'Telefonica Sans'` |
-| `blau` | `getBlauSkin()` | `'Roboto'` |
-| `esimflag` | `getEsimflagSkin()` | `'On Air'` |
+| Skin | Getter function | Font family |
+| ---------------- | ------------------------ | ------------------- |
+| `movistar` | `getMovistarSkin()` | `'Movistar Sans'` |
+| `o2` | `getO2Skin()` | `'On Air'` |
+| `vivo` | `getVivoSkin()` | `'Vivo Type'` |
+| `vivo-evolution` | `getVivoEvolutionSkin()` | `'Vivo Type'` |
+| `telefonica` | `getTelefonicaSkin()` | `'Telefonica Sans'` |
+| `blau` | `getBlauSkin()` | `'Roboto'` |
+| `esimflag` | `getEsimflagSkin()` | `'On Air'` |
## Setting font-family
diff --git a/doc/llms/agents/figma-verifier.md b/doc/llms/agents/figma-verifier.md
index 1f122b1028..0e2d69b8b1 100644
--- a/doc/llms/agents/figma-verifier.md
+++ b/doc/llms/agents/figma-verifier.md
@@ -37,10 +37,10 @@ rules before starting.
`font-family`, composite props that don't match the non-CodeConnect DOM, spacing values absent from the
DOM, mismatched semantic structure (`Stack` vs `Inline`, flat vs nested), native HTML where a Mistica
primitive exists, wrong/missing skin/font/body-background for the file's brand.
- - **Layout primitives.** When the DOM shows `grid grid-cols-[repeat(12,…)]` with `col-[…/span_N]`
- children, flag any implementation that used a raw `
`, a fixed-width flex
- row, `Grid`, or manual spacer columns instead of a `GridLayout` whose `template` matches the child
- spans. Flag a `GridLayout` that is not wrapped in a `ResponsiveLayout`, and a full-width padded section
+ - **Layout primitives.** When the DOM shows `grid grid-cols-[repeat(12,…)]` with `col-[…/span_N]` children,
+ flag any implementation that used a raw `
`, a fixed-width flex row, `Grid`,
+ or manual spacer columns instead of a `GridLayout` whose `template` matches the child spans. Flag a
+ `GridLayout` that is not wrapped in a `ResponsiveLayout`, and a full-width padded section
(`px-[48/32/16px]`) implemented without a `ResponsiveLayout`. Conversely, flag double-wrapping a
component that embeds its own `ResponsiveLayout` (`MainNavigationBar`, `NavigationBar`, `Tabs`).
diff --git a/packages/generate-design-tokens/index.js b/packages/generate-design-tokens/index.js
index 708de23e86..f7cec6ab6f 100644
--- a/packages/generate-design-tokens/index.js
+++ b/packages/generate-design-tokens/index.js
@@ -25,7 +25,7 @@ console.log('Using design tokens from:', DESIGN_TOKENS_FOLDER);
const SKINS_FOLDER = path.join(import.meta.dirname, '..', '..', 'src', 'skins');
const CSS_FOLDER = path.join(import.meta.dirname, '..', '..', 'css');
-const KNOWN_SKINS = ['blau', 'movistar', 'o2', 'o2-new', 'telefonica', 'vivo', 'vivo-new', 'tu', 'esimflag'];
+const KNOWN_SKINS = ['blau', 'movistar', 'o2', 'telefonica', 'vivo', 'vivo-evolution', 'esimflag'];
const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
const toCamelCase = (str) => str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
diff --git a/src/__type_tests__/data-attributes-type-test.tsx b/src/__type_tests__/data-attributes-type-test.tsx
new file mode 100644
index 0000000000..6b3f7cb17f
--- /dev/null
+++ b/src/__type_tests__/data-attributes-type-test.tsx
@@ -0,0 +1,16 @@
+import type {DataAttributes} from '../utils/types';
+
+const validAttrs: DataAttributes = {
+ testid: 'MyComponent',
+ custom: 'value',
+ count: 42,
+ enabled: true,
+ // eslint-disable-next-line object-shorthand
+ undefined: undefined,
+};
+
+// component-name is allowed
+const validAttrsWithComponentName: DataAttributes = {
+ 'component-name': 'MyComponent',
+ testid: 'MyComponent',
+};
diff --git a/src/accordion.tsx b/src/accordion.tsx
index 17b1a16b9c..97c8edd941 100644
--- a/src/accordion.tsx
+++ b/src/accordion.tsx
@@ -248,7 +248,7 @@ export const AccordionItem = React.forwardRef