New brand and negative contexts
Context
All new brand tokens should be a duplicate of the current inverse tokens, these tokens will be the same in all brands but blau, since blau inverse has a new definition.
Current contexts: default | inverse | alternative | media New contexts: default | inverse (Deprecated) | brand | negative | alternative | media
Description
- [x] Include new brand context
- [x] Update tokens
- [x] Update component specs
New context tests: https://www.figma.com/design/pfj9svckTNYDj3Cft4Fnrc/Brand-context?node-id=0-1&t=ezOkfn8s5kxXSRcj-1 Blau new brand definition: https://www.figma.com/design/ULzXysnzC1K7ReX9uDWccJ/-Blau--Blau-brand-kickoff-preparation-Q3-2025-PRODUCTDSN-3459?node-id=673-5069
Tasks
- [x] Update specs
- [ ] Design documentation
- [ ] Add to mobile library
- [ ] Add to desktop library
- [ ] Add to UI Kit
- [x] Android ticket
- [x] iOS ticket
- [x] Web ticket
New tokens
Brand Context
| Token name | Inverse equivalent | Used in |
|---|---|---|
| backgroundContainerBrandOverBrand | backgroundContainerBrandOverInverse | Boxed, Cards, Timeline |
| backgroundSkeletonBrand | backgroundSkeletonInverse | Image |
| completedStepBrand | completedStepInverse | - |
| buttonLinkDangerBackgroundBrand | buttonLinkDangerBackgroundInverse | Button, IconButton |
| buttonLinkDangerBackgroundBrandPressed | buttonLinkDangerBackgroundInversePressed | Button |
| buttonLinkBackgroundBrandPressed | buttonLinkBackgroundInversePressed | Button |
| buttonPrimaryBackgroundBrand | buttonPrimaryBackgroundInverse | Button |
| buttonPrimaryBackgroundBrandHover | buttonPrimaryBackgroundInverseHover | - |
| buttonPrimaryBackgroundBrandPressed | buttonPrimaryBackgroundInversePressed | Button |
| buttonSecondaryBorderBrand | buttonSecondaryBorderInverse | Button |
| buttonSecondaryBorderBrandPressed | buttonSecondaryBorderInversePressed | Button |
| buttonSecondaryBackgroundBrandHover | buttonSecondaryBackgroundInverseHover | Button |
| buttonSecondaryBackgroundBrandPressed | buttonSecondaryBackgroundInversePressed | Button |
| textButtonPrimaryBrand | textButtonPrimaryInverse | Button, IconButton |
| textButtonPrimaryBrandPressed | textButtonPrimaryInversePressed | Button |
| textButtonSecondaryBrand | textButtonSecondaryInverse | Button, IconButton |
| textButtonSecondaryBrandPressed | textButtonSecondaryInversePressed | Button |
| textLinkBrand | textLinkInverse | Button, IconButton, Textlink, Text |
| inputBorderBrand | inputBorderInverse | - |
| controlBrand | controlInverse | Checkbox, RadioButton, Switch, Timeline |
| controlActivatedBrand | controlActivatedInverse | Checkbox, RadioButton, Switch, Timeline, Meter, ProgressBar, Slider, Spinner, Tabs |
| barTrackBrand | barTrackInverse | Meter, ProgressBar, Slider, Timeline |
| controlKnobBrand | controlKnobInverse | Checkbox, RadioButton, Switch |
| dividerBrand | dividerInverse | Divider, Tabs |
| neutralMediumBrand | neutralMediumInverse | - |
| textPrimaryBrand | textPrimaryInverse | Avatar, Badge, Chip, List, NavigationBar, Breadcrumbs, SnackBar, StackingGroup, Stepper, Tabs, TextField, Text, FeedbacksSreen |
| textSecondaryBrand | textSecondaryInverse | NavigationBar, Breadcrumbs, Tabs, Text |
| textErrorBrand | textErrorInverse | List, Tag, Text |
| successHighBrand | successHighInverse | - |
| warningHighBrand | warningHighInverse | - |
| errorHighBrand | errorHighInverse | - |
| promoHighBrand | promoHighInverse | - |
| tagTextPromoBrand | tagTextPromoInverse | Tag |
| tagTextActiveBrand | tagTextActiveInverse | Tag |
| tagTextInactiveBrand | tagTextInactiveInverse | Tag |
| tagTextInfoBrand | tagTextInfoInverse | Tag |
| tagTextSuccessBrand | tagTextSuccessInverse | Tag |
| tagTextWarningBrand | tagTextWarningInverse | Tag |
| tagTextErrorBrand | tagTextErrorInverse | Tag |
| tagBackgroundPromoBrand | tagBackgroundPromoInverse | Tag |
| tagBackgroundActiveBrand | tagBackgroundActiveInverse | Tag |
| tagBackgroundInactiveBrand | tagBackgroundInactiveInverse | Tag |
| tagBackgroundInfoBrand | tagBackgroundInfoInverse | Tag |
| tagBackgroundSuccessBrand | tagBackgroundSuccessInverse | Tag |
| tagBackgroundWarningBrand | tagBackgroundWarningInverse | Tag |
| tagBackgroundErrorBrand | tagBackgroundErrorInverse | Tag |
Negative context
backgroundContainerNegative backgroundSkeletonNegative completedStepNegative buttonLinkDangerBackgroundNegative buttonLinkDangerBackgroundNegativePressed buttonLinkBackgroundNegativePressed buttonPrimaryBackgroundNegative buttonPrimaryBackgroundNegativeHover buttonPrimaryBackgroundNegativePressed buttonSecondaryBorderNegative buttonSecondaryBorderNegativePressed buttonSecondaryBackgroundNegativeHover buttonSecondaryBackgroundNegativePressed textButtonPrimaryNegative textButtonPrimaryNegativePressed textButtonSecondaryNegative textButtonSecondaryNegativePressed textLinkNegative inputBorderNegative controlNegative controlActivatedNegative barTrackNegative controlKnobNegative dividerNegative neutralMediumNegative textPrimaryNegative textSecondaryNegative textErrorNegative successHighNegative warningHighNegative errorHighNegative promoHighNegative tagTextPromoNegative tagTextActiveNegative tagTextInactiveNegative tagTextInfoNegative tagTextSuccessNegative tagTextWarningNegative tagTextErrorNegative tagBackgroundPromoNegative tagBackgroundActiveNegative tagBackgroundInactiveNegative tagBackgroundInfoNegative tagBackgroundSuccessNegative tagBackgroundWarningNegative tagBackgroundErrorNegative
Specs updated:
| Spec | Changes | Link |
|---|---|---|
| Accordion | Add new brand and negative contexts | https://www.figma.com/design/KDxPjcTXq2NCvQZjb4FXgi/%F0%9F%94%B8-Accordion-Specs?node-id=2430-17913&t=p85GgAYjcXCa6If7-4 |
| Text | Add brand context and default text color as textPrimaryBrand |
https://www.figma.com/design/f9tAOJproMIiJJuPchDEhG/branch/o0INwxDDPjXh6tHQeEBjhO/%F0%9F%94%B8-Text-Specs?m=auto&node-id=2139-99&t=m3w6CXNxDPPEeLkc-1 |
| Cards | Use media tokens instead of inverse for texts | https://www.figma.com/design/tKdPOfcUALzVIh5oizFbm7/%F0%9F%94%B8-Cards-Specs?m=auto&node-id=11030-16173&t=x1b5muX2vHaYSawE-1 |
| Cover hero | Use media tokens instead of inverse for texts | https://www.figma.com/design/M8t65SWdTUyM44YjxuzCyu/branch/HyJpLBtPlufEG2aO2Gaf0w/%F0%9F%94%B8-Hero-Specs?m=auto&node-id=4963-17046&t=TjF40PpITiTj4dma-1 |
| Hero | Add new brand context token definition + new brand prop | https://www.figma.com/design/zcBtnxP3gdBDFkKxmwvRFk/-2291---New-brand-context?node-id=5748-10170&t=YmOcaidF6qxG7kM9-4 |
| Button | Use brand tokens | https://www.figma.com/design/koROdh3HpEPG2O8jG52Emh/%F0%9F%94%B8-Buttons-Specs?m=auto&node-id=3326-11339&t=GnLZzPDFtIv8japP-1 |
| Icon Button | Use brand tokens | https://www.figma.com/design/koROdh3HpEPG2O8jG52Emh/branch/I2LXSD58GhgQ2w9kWs245B/%F0%9F%94%B8-Buttons-Specs?m=auto&node-id=3949-8933&t=t7U3KGG6twBOZyjY-1 |
| Checkbox | Add new brand context token definition | https://www.figma.com/design/6IN1rHqpYLILjgWMuUGKvJ/%F0%9F%94%B8-Checkbox-Specs?t=nFgSYogq39AbACca-0 |
| Radio button | Add new brand context definition | https://www.figma.com/design/RkHDrAELuQIlwNSQBfjSBx/branch/6pGOaHeQ173DkSEOf0wpxz/%F0%9F%94%B8-Radio-Button-Specs?m=auto&node-id=0-1004&t=uq2WWyU5JoTYyjDx-1 |
| Switch | Add new brand context definition | https://www.figma.com/design/0lLlL7hkpcLP9tyG7yV4Pt/-2291---New-brand-context?node-id=2859-1238&t=g7OaZkr5IN8zEUBq-4 |
| Divider | Add new brand context definition | https://www.figma.com/design/opTuWa0jTX3M1VS6iVviMj/-2291---New-brand-context?node-id=1506-308&t=74vWLjYQgdjlZX1T-4 |
| Tabs | Add new brand context definition | https://www.figma.com/design/MCZvIWHhvo69OGIiLRm5cx/-2291---New-brand-context?node-id=2362-2725&t=HISU9oltEU5kPwGw-4 |
| Meter | Add new brand context definition | https://www.figma.com/design/vl42pXmTEmzLZvx4ngrOkI/-2291---New-brand-context?node-id=2848-2036&t=vnL39ftPA25d8kj9-4 |
| ProgressBar | Add new brand context definition | https://www.figma.com/design/8XPfj53H6esIle2cCBddzg/-2291---New-brand-context?node-id=3140-416&t=TmclbgicUimVw9KD-4 |
| Slider | Add new brand context definition | https://www.figma.com/design/Cwg0TYSpt5IlznstVS2Y0D/-2291---New-brand-context?node-id=3461-1878&t=kCERj0mdKa1MvabZ-4 |
| Timeline | Add new brand context definition | https://www.figma.com/design/X7I9t1mfcIHCZGuXozD8D5/branch/1fNanHonG5phAZMHCkt4nr/%F0%9F%94%B8-Timeline-Specs?m=auto&node-id=175-2897&t=jMaiASvPuriw2IFA-1 |
| Spinner | Add new brand context definition | https://www.figma.com/design/9pJgcyUexLu3yHi6Gau867/-2291---New-brand-context?node-id=4002-157&t=EdTyUJ0uptI5vZmN-4 |
| Avatar | Add new brand context definition | https://www.figma.com/design/TyIdjJvLTP4SWKhM1q025p/-2291---New-brand-context?node-id=2165-333&t=ZIjJk0AzcQM6eAe5-4 |
| Badge | Add new brand context definition, the text of the badge doesnt change, since badge background doesn't change between contexts | https://www.figma.com/design/gUZfZajV9Zfade0rBYWZQg/branch/NHewR3s61oLuBMfPymmHyb/%F0%9F%94%B8-Badge-Specs?m=auto&node-id=0-1&t=g6volH7lUyj3ZL06-1 |
| Chip | Add new brand context definition/ Should Inverse be transparent? | https://www.figma.com/design/512a5Ke4EldL0GYffCXGCJ/%F0%9F%94%B8-Chips-Specs?m=auto&node-id=0-1&t=CSuiD0zRuJl01eBP-1 |
| List | Add new brand context definition | https://www.figma.com/design/Be8QB9onmHunKCCAkIBAVr/%F0%9F%94%B8-Lists-Specs?m=auto&node-id=0-1&t=Zk1g6lnkz174KewL-1 |
| Web navigation bars | Add new brand context definition | https://www.figma.com/design/Os5UfsnhLtQ9rnzmtcX8J4/%F0%9F%94%B8-Navigation-Bar-Specs?node-id=1206-5760&t=Ih4dYyAUh4UxUuuL-4 |
| Breadcrumbs | Add new brand context | https://www.figma.com/design/BctaFHf0PVPX2uwRSl8taf/branch/kijKfpjWgF6reKBWe2XKLz/%F0%9F%94%B8-Breadcrumbs-Specs?m=auto&node-id=2-61&t=M28jsbBtZcrl0Xbs-1 |
| Stacking group | Add new brand context definition | https://www.figma.com/design/3ME86VKaAQ2BoeqoQuHMYx/branch/j9lClmzPjcyJNtFpJ5nyLr/%F0%9F%94%B8-StackingGroup-Specs?m=auto&node-id=2060-532&t=XzQZ11WViBlv36lQ-1 |
| Feedback | Replace inverse with brand | https://www.figma.com/design/LpjgnU1xpmEzQvlXKwAHmn/branch/wu5KY7OYGMd7xYSp0Dr3ZW/%F0%9F%94%B8-Feedbacks-Specs?m=auto&node-id=0-303&t=DE1nJPeMJ2jLsjmy-1 |
| Input fields | Add new brand and negative contexts | https://www.figma.com/design/e8d3PkXitUJ1Jwgc9Y3mNc/%F0%9F%94%B8-Input-Fields---Forms-Specs?node-id=6885-4800&t=FVg2JQae7Bvv3hl6-4 |
New brand context
Preview: https://mistica-web-jpho-2dvustzzh-alex-buenos-projects.vercel.app/
To see how brand context behaves use current inverse context
List of changes
Light
backgroundContainerBrand:blauBluePrimaryinstead ofblauBlueSecondarybackgroundContainerBrandOverBrand:blauBluePrimary30instead ofblauBlueSecondary60backgroundContainerBrandHover:applyAlpha(palette.darkModeBlack, 0.05)instead ofapplyAlpha(palette.darkModeBlack, 0.2)backgroundContainerBrandPressed:applyAlpha(palette.darkModeBlack, 0.08)instead ofapplyAlpha(palette.darkModeBlack, 0.4)textLinkBrand:grey6instead ofwhitetextErrorBrand:grey6instead ofwhitecontrolBrand:blauBlueSecondary60instead ofblauBluePrimary30controlActivatedBrand:blauBlueSecondary60instead ofwhitedividerBrand:applyAlpha(palette.grey6, 0.2)instead ofapplyAlpha(palette.white, 0.2)- buttonPrimary:
buttonPrimaryBackgroundBrand:blauBlueSecondaryinstead ofwhitebuttonPrimaryBackgroundBrandHover:blauBlueSecondary60instead ofblauBluePrimary20buttonPrimaryBackgroundBrandPressed:blauBlueSecondary60instead ofblauBluePrimary30textButtonPrimaryBrand:whiteinstead ofblauBlueSecondarytextButtonPrimaryBrandPressed:whiteinstead ofblauBlueSecondary60
- buttonSecondary:
buttonSecondaryBorderBrand:applyAlpha(palette.white, 0)instead ofwhitebuttonSecondaryBorderBrandPressed:applyAlpha(palette.white, 0)instead ofwhite- New
buttonSecondaryBackgroundBrandtoken buttonSecondaryBackgroundBrandHover:blauBlueSecondary10instead ofapplyAlpha(palette.white, 0.2)buttonSecondaryBackgroundBrandPressed:blauBlueSecondary10instead ofapplyAlpha(palette.white, 0.2)textButtonSecondaryBrand:blauBlueSecondaryinstead ofwhitetextButtonSecondaryBrandPressed:blauBlueSecondary60instead ofwhite
Dark
- buttonSecondary:
- New
buttonSecondaryBackgroundBrandtoken
- New
Components
- Carousel:
bulletInverseandbulletActiveInverseshould usecontrolBrandandcontrolActivatedBrandinstead ofinverse - List: chevron should use
textSecondaryBrandinstead ofinverse - Button: type secondary should use
buttonSecondaryBackgroundBrandas default background instead of 'transparent' - IconButton:
- neutral-transparent-default/iconColor:
textPrimaryInverseinstead ofinverse
- neutral-transparent-default/iconColor:
- Rating:
activeColor: in brand context should usecontrolActivatedInverseinstead ofinverseinactiveColor: in brand context should usecontrolInverseinstead ofinverse
- Switch: Added new
toggleAndroidActiveBrand,toggleAndroidInactiveBrand,toggleAndroidBackgroundActiveBrandandtoggleAndroidBackgroundInactiveBrandtokens to use in brand variant of the android and web versions
Notes
- Cover Cards should use
textPrimaryMediaandtextSecondaryMedia - Avatar: contents when there's no image should use
textPrimaryNegative - Badge: numeric content should use
textPrimaryNegative
To review
-
Accordion icon seems not following the logic defined in list and is displayed white over brand
-
Logo current inverse variant should only be used in negative context, brand should use default?
-
Table is not following the divider definition
-
Timeline assets definition is not working fine
-
Include new
blauBluePrimary40forbackgroundContainerBrandOverBrand?
New negative context
Preview: https://mistica-web-jpho-1klde6q15-alex-buenos-projects.vercel.app/
To see how negative context behaves use current inverse context
List of changes
Blau
backgroundNegative:blauBlueSecondaryinstead ofblauBluePrimarybackgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead ofblauBlueSecondary60
Esimflag
backgroundNegative:blue65instead oflinear-gradient(180deg, ${palette.blue55} 0%, ${palette.blue} 60%, ${palette.purple} 100%)backgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead ofblue80
Movistar-new
backgroundNegative:blueHighinstead ofmovistarBluebackgroundContainerNegative:applyAlpha(palette.movistarBlack, 0.2)instead ofblue800
Movistar
backgroundNegative:movistarBlueHC55instead ofmovistarBluebackgroundContainerNegative:applyAlpha(palette.black, 0.2)instead ofmovistarBlue55
O2-New
backgroundNegative:beyondBlueinstead oflinear-gradient(180deg, ${palette.darkBlue} 0%, ${palette.beyondBlue} 64%, ${palette.beyondBlue45} 100%)backgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead ofbeyondBlue70
O2
backgroundNegative:o2BluePrimary70instead ofo2BluePrimarybackgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead ofo2BluePrimary70
Telefonica
backgroundNegative:telefonicaBlue70instead oftelefonicaBluebackgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead oftelefonicaBlue70
TU
backgroundNegative:primary80instead ofprimarybackgroundContainerNegative:applyAlpha(palette.grey1, 0.2)instead ofprimary80
Vivo-new
backgroundNegative:vivoPurpleDarkinstead ofvivoPurplebackgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead ofvivoPurpleDark
Vivo
backgroundNegative:vivoPurpleDarkinstead ofvivoPurplebackgroundContainerNegative:applyAlpha(palette.darkModeBlack, 0.4)instead ofvivoPurpleDark
Notes
- In o2 negative context
backgroundNegativeandbackgroundBrandSecondaryhave the same value - Custom color cards behaviour