Intro to typography design tokens | Penpot Hands-on Demo ๐Ÿ”— **Source:** [Intro to typography design tokens | Penpot Hands-on Demo](https://www.youtube.com/watch?v=TTPfc9zFN5k) > [!note]+ Document Notes > tags: [design-tokens, typography, penpot, ui-design] > author: Laura > source: Penpot > reference: https://www.youtube.com/watch?v=TTPfc9zFN5k > date created: 2024-12-19 14:30 > > # ๐Ÿท๏ธ Title: Intro to typography design tokens | Penpot Hands-on Demo > <!-- deep-read:sections start --> ## ๐Ÿงฐ Action Inbox - [H1] Download design tokens starter kit from Penpot Hub โ€” updated version with typography and shadow tokens #penpot - [H2] Try proportional typographic scales using mathematical relationships โ€” use base ร— scale calculations #typography - [H3] Create semantic typography tokens for specific use cases โ€” buttons, headings, labels #design-system ## ๐Ÿงญ Table of Contents - [๐Ÿ“ Summary](#-summary) - [๐Ÿ“– Main Content](#-main-content) - [๐Ÿ—’๏ธ Notes](#๏ธ-notes) - [๐Ÿ“š References](#-references) - [๐Ÿ—ฃ๏ธ Paraphrase](#๏ธ-paraphrase) - [๐Ÿ“ฐ Newsletter](#-newsletter) - [โœ… Action Items](#-action-items) - [๐Ÿงช Hypotheses](#-hypotheses) - [๐Ÿ“Š Methodology](#-methodology) - [โ“ Questions](#-questions) - [๐Ÿ”ฎ Future Research](#-future-research) - [๐Ÿ’ก Implications](#-implications) - [๐Ÿง  Learning Styles Assessment](#-learning-styles-assessment) - [๐Ÿ“Š Accessibility Assessment](#-accessibility-assessment) - [๐ŸŒ DEIB Assessment](#-deib-assessment) - [โœ… Logical Validity](#-logical-validity) - [๐Ÿ›ก๏ธ DARVO Analysis](#-darvo-analysis) - [๐ŸŽฏ Conclusion](#-conclusion) ### ๐Ÿ”— References - [Penpot Hub Libraries and Templates](https://penpot.app/libraries-templates) - [Penpot User Guide](https://help.penpot.app) ## ๐Ÿ“ Summary - Laura demonstrates typography design tokens in Penpot, covering foundational tokens, composite tokens, and proportional scales - Shows how design tokens create consistency, shared language, and maintainability across design systems - Covers practical implementation including font families, weights, sizes, and semantic naming conventions - Introduces shadow tokens as bonus composite token type with similar principles - Emphasizes W3C design token standard compatibility for cross-platform use ## ๐Ÿ“– Main Content Design tokens in Penpot store reusable values with names, enabling consistent design systems. Typography tokens are composite tokens combining multiple properties (font family, size, weight, line height) into single reusable units. The video demonstrates creating foundational tokens (generic values like font-size.small) and semantic tokens (purpose-driven like text.default). Proportional typographic scales use mathematical relationships between font sizes for visual harmony. Penpot uses W3C design token standards, making tokens portable across platforms. The approach balances systematic consistency with practical flexibility, avoiding over-engineering while maintaining design coherence. ## ๐Ÿ—’๏ธ Notes #### โฑ๏ธ [00:00](https://youtu.be/TTPfc9zFN5k?t=0) โ€” [H1] Introduction to Penpot and design tokens - Key idea: Penpot is open-source design platform for designers and developers - Evidence: "Design tokens are a way to store reusable values for your designs" #### โฑ๏ธ [03:25](https://youtu.be/TTPfc9zFN5k?t=205) โ€” [H2] Basic design token structure - Key idea: Each design token has a name and value, like color.black with hex value - Evidence: "So it's really as simple as that. And so for here you can see I've got color.black" #### โฑ๏ธ [06:45](https://youtu.be/TTPfc9zFN5k?t=405) โ€” [H3] Design tokens create shared language - Key idea: Named tokens enable teams to communicate consistently about design values - Evidence: "They create a shared language between all of the designers using the same tokens" #### โฑ๏ธ [08:30](https://youtu.be/TTPfc9zFN5k?t=510) โ€” [H2] W3C design token standard compatibility - Key idea: Penpot uses W3C standard JSON format for cross-platform compatibility - Evidence: "Penpot uses the native design tokens, the W3C design tokens community group standard" #### โฑ๏ธ [11:20](https://youtu.be/TTPfc9zFN5k?t=680) โ€” [H2] Token theming capabilities - Key idea: Multiple token sets enable light/dark modes and theme variations - Evidence: "You can turn them on and off using themes... I can change between vibrant and muted themes" #### โฑ๏ธ [14:15](https://youtu.be/TTPfc9zFN5k?t=855) โ€” [H1] Typography token types overview - Key idea: Typography tokens include font size, family, weight, letter spacing, case, decoration - Evidence: "Font weight is similar except... whether your font is bold or light... also whether your font is italic" #### โฑ๏ธ [18:40](https://youtu.be/TTPfc9zFN5k?t=1120) โ€” [H1] Typography composite tokens introduction - Key idea: Composite tokens combine multiple design token types into single reusable unit - Evidence: "Typography token is a special one... it is a composite token made up of other design tokens" #### โฑ๏ธ [20:50](https://youtu.be/TTPfc9zFN5k?t=1250) โ€” [H2] Token referencing system - Key idea: Tokens can reference other tokens using curly braces for maintainability - Evidence: "I can reference it by putting it in curly quotes and say font weight 600" #### โฑ๏ธ [23:10](https://youtu.be/TTPfc9zFN5k?t=1390) โ€” [H2] Foundational vs semantic tokens - Key idea: Foundation tokens are generic values, semantic tokens are purpose-driven - Evidence: "Semantic token is named for the purpose of the token... what is this token actually for" #### โฑ๏ธ [26:30](https://youtu.be/TTPfc9zFN5k?t=1590) โ€” [H2] Creating typography composite tokens - Key idea: Combine font family, size, weight, line height into single typography token - Evidence: "Typography tokens are really about how you're using the token during your design process" #### โฑ๏ธ [33:45](https://youtu.be/TTPfc9zFN5k?t=2025) โ€” [H3] Avoiding over-engineering tokens - Key idea: Don't create foundational tokens for unique values used only once - Evidence: "Not overusing design tokens when you don't need them... this title is completely unique" #### โฑ๏ธ [37:20](https://youtu.be/TTPfc9zFN5k?t=2240) โ€” [H1] Proportional typographic scales - Key idea: Mathematical relationships between font sizes create visual harmony - Evidence: "Proportional typographic scale... making those values mathematically related to each other" #### โฑ๏ธ [42:15](https://youtu.be/TTPfc9zFN5k?t=2535) โ€” [H2] Scale calculation methodology - Key idea: Use base size multiplied by scale factor for each level in hierarchy - Evidence: "For each value I am multiplying the next lower down font size in the hierarchy" #### โฑ๏ธ [46:30](https://youtu.be/TTPfc9zFN5k?t=2790) โ€” [H1] Shadow tokens introduction - Key idea: Shadow tokens are composite tokens for drop shadow and inner shadow effects - Evidence: "Shadow design tokens... composite token... has all of these different values that are made up to create a shadow" #### โฑ๏ธ [52:10](https://youtu.be/TTPfc9zFN5k?t=3130) โ€” [H2] Consistent light source principle - Key idea: Shadows should have consistent direction to mimic single light source - Evidence: "You probably usually have one light source... you want that to be consistent across all of your design" ## ๐Ÿ“š References - [Penpot Design Tokens Starter Kit](https://penpot.app/libraries-templates) - [Penpot User Guide](https://help.penpot.app) - [Penpot Community](https://community.penpot.app) - [W3C Design Tokens Community Group](https://www.w3.org/community/design-tokens/) ## ๐Ÿ—ฃ๏ธ Paraphrase - Design tokens store reusable design values with meaningful names, enabling consistency and maintainability across design systems while creating shared vocabulary for design teams - Typography composite tokens combine multiple font properties (family, size, weight, line height) into single reusable units that reflect how designers actually think about typography holistically - Proportional typographic scales use mathematical relationships between font sizes to create visual harmony, typically using a base size multiplied by a consistent scale factor for each hierarchy level ## ๐Ÿ“ฐ Newsletter Laura from Penpot demonstrates the power of typography design tokens in this hands-on session. Learn how composite tokens combine font properties into reusable units, discover proportional typographic scales for visual harmony, and explore the new shadow tokens feature. The updated design tokens starter kit now includes typography and shadow examples, all following W3C standards for cross-platform compatibility. Key takeaways: Create foundational tokens for generic values, semantic tokens for specific purposes, and avoid over-engineering by not tokenizing unique values. Typography tokens reflect how designers actually work - considering font family, size, weight, and line height together rather than separately. Resources: [Penpot Hub](https://penpot.app/libraries-templates), [User Guide](https://help.penpot.app), [Community](https://community.penpot.app) ## โœ… Action Items #### DevRel - Developer advocacy: Create tutorials showing design token integration with code workflows - Education: Develop workshops on design system token architecture patterns - Developer experience: Document token export formats and development handoff processes - Developer marketing: Showcase W3C standard compatibility and cross-platform workflows - Community management: Support design token discussions and feature requests #### WordPress - Design: Integrate design token concepts into WordPress design system documentation - Documentation: Create guides for design token usage in theme development - Community: Share design token best practices at WordCamp design track sessions ## ๐Ÿงช Hypotheses - Teams using semantic token naming will have better design system adoption rates than those using only foundational tokens - Proportional typographic scales will reduce design decision time while improving visual consistency - Composite tokens will decrease token management overhead compared to individual property tokens - W3C standard compliance will increase design-to-development workflow efficiency ### ๐Ÿ“Š Methodology - Survey design teams on token naming conventions and adoption rates - A/B test proportional vs arbitrary font size scales for design speed - Measure token count and maintenance overhead across different architectures ### โ“ Questions - How do proportional scales perform across different font families and use cases? - What's the optimal balance between foundational and semantic token ratios? - How can design token architecture evolve with growing design system complexity? ### ๐Ÿ”ฎ Future Research - Advanced token aliasing and referencing patterns for complex design systems - Integration patterns between design tokens and component libraries - Automated token generation from existing design patterns ### ๐Ÿ’ก Implications - Practice: Typography tokens change how designers approach text styling workflows - Policy: W3C standards adoption affects tool selection and workflow decisions - Security: Token export formats need validation for sensitive design system data - Education: Design system education must include token architecture principles - Funding: Open source design tools require sustainable development models ### ๐Ÿง  Learning Styles Assessment Reading level estimate: 10th grade #### ๐Ÿ‘€ Visual learners - Present: Live design tool demonstrations, before/after token applications - Improve: Diagram showing token relationships and hierarchy structures #### ๐Ÿ”Š Aural learners - Present: Live narrated demonstration with explanations - Improve: Audio summary of key token concepts and principles #### ๐Ÿ—ฃ๏ธ Verbal learners - Present: Clear definitions, analogies to code variables, naming conventions - Improve: Glossary of design token terminology and comparison tables #### ๐Ÿงฉ Kinesthetic learners - Present: Hands-on demonstration, downloadable starter kit for practice - Improve: Step-by-step checklist for token creation workflow #### ๐Ÿง  Logical learners - Present: Mathematical relationships in proportional scales, systematic naming - Improve: Decision tree for choosing token types and architecture patterns #### ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Social learners - Present: Live Q&A, community forum mentions, team collaboration context - Improve: Collaborative token creation exercises and peer review guidelines #### ๐Ÿง˜โ€โ™€๏ธ Solitary learners - Present: Downloadable resources, self-paced demonstration format - Improve: Reflection questions about token organization and personal workflows #### ๐ŸŒฟ Naturalistic learners - Present: Analogies to light sources for shadow consistency - Improve: Ecosystem thinking about design token relationships ### ๐Ÿ“Š Accessibility Assessment #### Screen reader semantics - Present: Clear heading structure, descriptive alt text for UI elements - Improve: ARIA labels for complex token relationships in demos #### Keyboard navigation - Present: Standard browser controls for video playback - Improve: Transcript with timestamp navigation links #### Contrast and readability - Present: High contrast in design tool interface - Improve: Ensure token color examples meet WCAG standards #### Text resizing and reflow - Present: Responsive video player interface - Improve: Scalable text in design tool demonstrations #### Media and captions - Present: Audio narration throughout demonstration - Improve: Professional captions with technical terminology accuracy #### Forms and interactions - Present: Clear token creation workflows - Improve: Keyboard shortcuts documentation for accessibility ### ๐ŸŒ DEIB Assessment #### Cultural breadth - Present: Universal design principles, international typography considerations - Improve: Examples from non-Latin scripts and different cultural design approaches #### Inclusive language - Present: Clear technical explanations, defined jargon - Improve: Plain language summaries of complex token concepts #### Neurodiversity support - Present: Logical structure, consistent demonstration pace - Improve: Content warnings for rapid UI changes, summary sections #### Representation - Present: Focus on technical content over personal representation - Improve: Diverse use case examples beyond Western design patterns #### Psychological safety - Present: Encouraging tone, acknowledgment of mistakes during demo - Improve: Explicit welcome for questions and different experience levels ### โœ… Logical Validity #### Strong reasoning - Deductive strength: Token architecture principles lead to specific implementation benefits - Inductive strength: Multiple examples support general token usage patterns - Causal reasoning: Clear cause-effect between token organization and design consistency - Analogical strength: Code variable analogy effectively explains token concepts #### Fallacies - Appeal to authority: W3C standard mentioned without explaining specific benefits - False dilemma: Implies foundational vs semantic tokens are either/or choice #### Tone of voice - Overall tone: Conversational, educational, encouraging with authentic acknowledgment of demo challenges ### ๐Ÿ›ก๏ธ DARVO Analysis - Deny: No concerning denial patterns present - Attack: No attacks on other approaches or tools - Reverse victim/offender: No victim/offender dynamics present - Emotional cues and rhetoric: Positive, supportive educational tone throughout ## ๐ŸŽฏ Conclusion Typography design tokens in Penpot provide a powerful foundation for consistent, maintainable design systems. The combination of foundational tokens (generic values) and semantic tokens (purpose-driven) creates both flexibility and clarity. Proportional typographic scales add mathematical harmony while composite tokens reflect real design thinking. The W3C standard compliance ensures cross-platform compatibility, making Penpot tokens a solid choice for design-to-development workflows. Key next step: download the updated starter kit and experiment with proportional scales in your own projects. ## ๐Ÿงฑ Refactor Appendix ### ๐Ÿ“š Literature Split Pad Purpose: Stage CEE units that become Literature notes. Split level: H3 ### [H1] Design tokens create systematic design consistency > [!quote] [Intro to typography design tokens](https://youtu.be/TTPfc9zFN5k) by [[Laura]] via [[Penpot]]. Published 2024. Accessed 2024-12-19. > "Design tokens are a way to store reusable values for your designs." Foundation for scalable design systems and cross-team collaboration. [view highlight](https://youtu.be/TTPfc9zFN5k?t=205#H1) #design-system #consistency ID:rw_dt001 ### [ --- ## Full Transcript [00:00] [music]<br>[00:08] Hello, my friends, and welcome to<br>[00:10] another PimpPot hands-on session. In<br>[00:13] these sessions, I'll show you exactly<br>[00:15] how I do design work with PenPot, and<br>[00:18] we'll dig into the practical details.<br>[00:21] And I'm here to answer any of the<br>[00:23] questions you might have along the way.<br>[00:26] Remember, if you like these sessions,<br>[00:28] please follow us, like, subscribe,<br>[00:30] whatever you do on whatever platform<br>[00:31] you're watching this on, and then you'll<br>[00:33] be the first to know about the next one.<br>[00:36] Today, we will be exploring typography<br>[00:39] tokens. It's very exciting. So, please<br>[00:42] do ask questions. We've got other folks<br>[00:44] from the PenPot team here live as well.<br>[00:46] So, if I don't get round to your<br>[00:48] questions, they can answer them in the<br>[00:50] chat, and we'll make sure we answer them<br>[00:51] afterwards if we don't get round to them<br>[00:53] at all. At the end, we'll have a little<br>[00:57] design token doctor in session. Uh,<br>[00:59] that's me. That's basically just the<br>[01:01] Q&A. And you can also ask questions<br>[01:04] throughout. So, what is Pemot? In case<br>[01:08] you don't already know, Pempot is the<br>[01:11] open-source design platform for both<br>[01:13] designers and developers. And what are<br>[01:17] design tokens? Well, let's get into it.<br>[01:30] So, this here is my design tokens<br>[01:32] starter kit. You might be familiar with<br>[01:35] it already. It's had a bit of a font<br>[01:37] upgrade. Um, but there's a new version<br>[01:40] of it now in the penot hub under<br>[01:43] libraries and templates. So, if you go<br>[01:46] to the um resources and you can find<br>[01:50] libraries and templates from the penmpot<br>[01:52] site in there and you can find my design<br>[01:55] token starter kit in there and this<br>[01:58] contains demos of all of the different<br>[02:00] token types that you can use and demos<br>[02:04] of them in use and it's a great kit to<br>[02:06] get started with. So, I thought I would<br>[02:09] get started showing you that. So, what<br>[02:12] is actually a design token? Design<br>[02:14] tokens are a way to store reusable<br>[02:18] values for your designs. So each design<br>[02:21] token, if I go to the tokens tab here,<br>[02:24] and so let's do this black color. It's<br>[02:27] right here very conveniently.<br>[02:29] So each design token is made up of a<br>[02:32] name and a value. So it's really as<br>[02:36] simple as that. And so for here you can<br>[02:38] see I've got color.black. And if you are<br>[02:41] a nerd like me and you can read a hex<br>[02:43] code, you can also see from the swatch<br>[02:46] maybe that this isn't exactly black.<br>[02:49] That would be 000000.<br>[02:53] And but I've decided that I actually<br>[02:55] want my black color to be slightly off<br>[02:58] black, slightly softer black. And so<br>[03:01] I've set this as a design token that's a<br>[03:04] color type design token. and I have<br>[03:07] applied it to this swatch here. So, how<br>[03:10] might I apply that token? If I create a<br>[03:13] rectangle, any other object, I select it<br>[03:16] on the canvas or I can select it in the<br>[03:19] layers panel here. And if I go to tokens<br>[03:22] and I find a token that I want to apply,<br>[03:25] I can rightclick it and then I can<br>[03:27] choose which property I want to apply<br>[03:29] that token to. So here I might say fill<br>[03:33] and that will fill it and then you can't<br>[03:35] really see it against the background as<br>[03:37] well. Now one of the benefits of design<br>[03:40] tokens is that if you apply a token to<br>[03:44] multiple objects and then you want to<br>[03:46] change say that shade of black later on<br>[03:48] you only need to update the token value<br>[03:51] to update it across the whole of your<br>[03:53] design. So I decide now I wouldn't do<br>[03:57] this. I would, this is called black, so<br>[03:58] I wouldn't<br>[04:00] change the color to something that<br>[04:02] wasn't black. But, you know, just in<br>[04:03] case I decided to be a bit wild and I<br>[04:06] want to go change this value to this hex<br>[04:09] code, which is blue, and save it.<br>[04:13] And oh, is that not that didn't have the<br>[04:16] token applied and it'll will update it<br>[04:18] throughout. Let's try that again now<br>[04:20] that I've actually applied the token to<br>[04:22] the swatch. edit the color and say I<br>[04:26] update it to purple and save it. There<br>[04:30] we go. [laughter] That's what it looks<br>[04:32] like when it works. There's always a<br>[04:33] little bit of chaos in my demos. It<br>[04:36] wouldn't be a hands-on session without<br>[04:39] it. So design tokens are a really<br>[04:42] valuable tool for your designs, but<br>[04:45] they're also a really great foundation<br>[04:46] for design systems because they create a<br>[04:49] shared language between all of the<br>[04:51] designers using the same tokens because<br>[04:54] these values have a name assigned to<br>[04:56] them. You can talk about them in the<br>[04:58] same way. You can say, "Hey, um, are you<br>[05:00] using the blue 100 color for this? I<br>[05:03] think maybe it would be slightly better<br>[05:06] contrast if we used, say, blue 500." and<br>[05:09] you have that shared language and you're<br>[05:11] not just talking in hex codes which<br>[05:13] could be quite hard to read and<br>[05:15] understand. And they also translate<br>[05:18] really well into the development process<br>[05:20] because they're essentially just like<br>[05:22] code variables.<br>[05:24] The benefit of pimpot and design tokens<br>[05:27] is that penmpot uses the native design<br>[05:30] tokens, the W3C<br>[05:33] design tokens community group uh<br>[05:36] standard for design tokens and that<br>[05:38] standard format. And so that means that<br>[05:40] any platform that supports design tokens<br>[05:43] will be able to support the tokens that<br>[05:45] you've created in penmpot. And you can<br>[05:48] also import the tokens you've created on<br>[05:51] other platforms into pimpot if they are<br>[05:54] in that same JSON format. It's a JSON<br>[05:57] format. So if I hit export here, you can<br>[06:00] actually see a little preview of this<br>[06:01] JSON format. And so uh that scales,<br>[06:04] which is not something I'm going to get<br>[06:05] into right now, but if I scroll down,<br>[06:07] there we go. Colors. So this is a 300<br>[06:10] color for if I scroll up purple. And you<br>[06:14] can see it's got a value and a type. And<br>[06:16] you can add a description as well. And<br>[06:20] one of the other benefits of tokens is<br>[06:22] once you've created these tokens and<br>[06:25] assigned values to them, you can use<br>[06:29] different sets of tokens turning them on<br>[06:31] and off. We go to tokens. So these are<br>[06:34] all my different sets of tokens and you<br>[06:37] can turn them on and off using themes.<br>[06:38] So if I just switch to this different<br>[06:41] page.<br>[06:43] There we go. So, this is a little demo<br>[06:45] page and I switch between light and dark<br>[06:51] mode<br>[06:53] and I can change between vibrant and<br>[06:55] muted themes. So, you can do all of<br>[06:59] these things and create very advanced<br>[07:01] theming just with tokens. Now, that's<br>[07:04] all examples to do with colors, but<br>[07:07] there are a lot more different token<br>[07:09] types. So, in this foundations set that<br>[07:12] I've got here, I have color tokens, I<br>[07:15] have opacity tokens, I have rotation<br>[07:19] tokens, sizing, stroke width, and you<br>[07:24] can see there's even more token types<br>[07:25] down here. Border radius, dimensions,<br>[07:28] and some others that we'll get to in a<br>[07:31] minute. And each token can only be<br>[07:34] applied to the relevant properties of<br>[07:36] your design elements. So, for example,<br>[07:39] you can't apply font size and font<br>[07:42] weight to a rectangle. That wouldn't<br>[07:44] make any sense. But if I say selected a<br>[07:47] rectangle or a group or a container and<br>[07:50] then I open up the tokens, I can see<br>[07:54] that this line token is already applied.<br>[07:57] That's shows in the panel here. That's<br>[08:00] the highlighted show that's applied to<br>[08:01] this object. But only the highlighted<br>[08:06] ones can be applied. In fact, it would<br>[08:07] be helpful if I open one with typography<br>[08:10] because then you can see I can't apply<br>[08:13] these typography tokens to this<br>[08:16] rectangle, but I could apply them to the<br>[08:19] text. And if I wanted to, I would<br>[08:21] rightclick and choose to apply to the<br>[08:24] typography properties.<br>[08:27] So when you just select the object on<br>[08:30] the canvas, I'm using that really handy<br>[08:33] little option shortcut to pick direct<br>[08:35] objects here. Then I can see what I can<br>[08:38] use and what's already applied in the<br>[08:40] panel. Colors are also already shown in<br>[08:44] the design panel as well. And other<br>[08:46] tokens will be shown in the design panel<br>[08:49] soon.<br>[08:50] So let's have a look at typography<br>[08:53] tokens. I'm going to jump into a<br>[08:56] different file for that.<br>[08:59] Now,<br>[09:01] in this here, I've got back into my<br>[09:04] tokens. This is a much simpler file with<br>[09:06] much simpler tokens. So, I think it's a<br>[09:08] good example.<br>[09:13] Now, here I have a global set and I have<br>[09:17] this scratch set that I've created for<br>[09:20] us to play with. And what I want to do<br>[09:23] is I'm just going to go into this<br>[09:28] scratch file<br>[09:30] and let's look at typography tokens in<br>[09:32] more detail. In fact, I'm going to<br>[09:33] disable the global set while I'm doing<br>[09:35] that just so it doesn't mess with what<br>[09:37] I'm doing in here. So, typography<br>[09:40] related tokens. Maybe I'm going to<br>[09:42] create a text box.<br>[09:46] Here's my nice text that is tiny. I'm<br>[09:50] just going to whack that size up so that<br>[09:52] you can all see it a bit better. Okay.<br>[09:56] In fact, as good as an idea that is. Set<br>[09:59] it to a normal size. And I'm going to<br>[10:00] use the zoom level [laughter] to so we<br>[10:03] can see it a bit better. I realize if<br>[10:05] I'm going to create font sizes, I might<br>[10:07] come across shortly. Right.<br>[10:11] So, what's a typography token I might<br>[10:14] use? Let's start with font size.<br>[10:17] So, I might create a font size token.<br>[10:24] And I'm going to I'm going to call it I<br>[10:29] create a range of font sizes. Uh<br>[10:31] thinking about how you usually use font<br>[10:33] sizes in a design. And I'm going to use<br>[10:36] t-shirt sizes for this. So, I might say<br>[10:38] font size. So, this is the beginning<br>[10:41] part of my token. It's going to be part<br>[10:43] of a sort of a grouping for the tokens<br>[10:45] called font size. And I'm going to start<br>[10:48] with<br>[10:50] SM small. And the dot is how you<br>[10:53] separate the different sections of the<br>[10:55] name in a token. And my small one, I'm<br>[10:58] going to make it 16. A nice default font<br>[11:02] size is 16. Nice and accessible as a<br>[11:04] general rule.<br>[11:06] So I have a small font size and I want<br>[11:08] to apply it to my nice text. Let's just<br>[11:11] shrink that bounding box. And I can just<br>[11:15] hit the uh token without right clicking<br>[11:18] it. But it's good to get into the habit<br>[11:20] of right clicking it if you want to be<br>[11:21] able to choose the property<br>[11:24] if it's a uh token that can be applied<br>[11:27] to multiple properties<br>[11:29] and choose font size and it will apply<br>[11:31] it. It was already 16 so it's not really<br>[11:34] made a change. Let's do another one.<br>[11:37] A slightly smaller font size.<br>[11:40] So we'll do XS extra small 14. So I<br>[11:45] apply that. There we go. Bit smaller.<br>[11:48] And I can continue on like that. Medium<br>[11:51] will be 18. I do actually have these<br>[11:53] written down for myself because I cannot<br>[11:55] remember numbers to save my life. Large<br>[11:59] would be 21<br>[12:02] and extra large<br>[12:06] would be 30. You could also duplicate<br>[12:09] these tokens and just edit the name of<br>[12:11] them if you want to make it nice and<br>[12:13] fast. That's a good technique for later.<br>[12:15] So, changing that to large by just<br>[12:18] clicking it or right clicking and<br>[12:21] selecting in there. The idea of naming<br>[12:25] tokens like this with sort of a<br>[12:27] restricted number of sizes is this idea<br>[12:30] of foundation or core design tokens. And<br>[12:34] the benefit of these is you're creating<br>[12:37] a narrow range of values that you can<br>[12:40] then use across your design. I think if<br>[12:42] you're a designer with any level of<br>[12:44] experience, what you've probably found<br>[12:46] is repeating the same value over and<br>[12:48] over again can create consistency and<br>[12:52] can create a nice visual hierarchy<br>[12:55] inside of your design work. And not only<br>[12:58] does it really maintain that consistency<br>[13:00] across the entirety of your design<br>[13:01] system, but it also makes a more<br>[13:04] consistent visual language for your<br>[13:06] users. If you think about every time a<br>[13:10] heading text is the same size and every<br>[13:12] time the label text is the same size,<br>[13:15] it's going to over time teach your user,<br>[13:18] oh, that's a label. Oh, that's a heading<br>[13:20] if they're able to see it. So it might<br>[13:23] seem quite restrictive to have to pick<br>[13:25] from a very limited number of values,<br>[13:29] but really think about it creating that<br>[13:31] cohesive visual language. You want to<br>[13:35] choose those initial values very<br>[13:37] carefully. So let's go to font family.<br>[13:40] That's quite an exciting one. That will<br>[13:41] be the font itself, I guess, as a lot of<br>[13:44] people would say, or the type face. And<br>[13:46] so I'm going to say font family<br>[13:49] and I'm going to call this default. Am I<br>[13:52] going to call it default?<br>[13:55] I'm thinking about how this is what you<br>[13:57] do when you're creating design tokens.<br>[13:58] I'm thinking about how fonts are used in<br>[14:03] designs. And I would say that<br>[14:07] you probably don't use that many fonts.<br>[14:10] You might have a default one and a<br>[14:11] special one. You might have a sans serif<br>[14:14] font and a saraf font. You know what?<br>[14:16] I'm going to go sands. I haven't<br>[14:18] pre-planned this. So, let's see. And the<br>[14:20] value. Uh. Oh, I'm doing this in font.<br>[14:23] Wait.<br>[14:25] Lucky. I just noticed that when I<br>[14:26] couldn't pick from the font. Went to do<br>[14:28] it again. Gosh. There we go. Right. So,<br>[14:31] font family. Sands. Now, I can type my<br>[14:34] value in. So, the name of a font family<br>[14:36] in here. If you're used to creating CSS,<br>[14:39] you could do this with a stack um the<br>[14:41] same way you usually would with<br>[14:43] commaepparated list of font names. And<br>[14:46] in theory, they would uh fall back to<br>[14:50] the first one in the stack is the one<br>[14:53] that gets used. If that's not available,<br>[14:54] the next one gets used. Um that doesn't<br>[14:57] work that way necessarily in penpop, but<br>[14:59] you would have that all set up nicely<br>[15:00] already in your design token. Or I can<br>[15:03] pick from the dropdown of the fonts that<br>[15:06] I have in pimpot. Whether that's a<br>[15:09] Google font or a custom font that I've<br>[15:11] already uploaded. Oh, what's a nice<br>[15:13] choice of font? Oh, I'm quite keen on<br>[15:16] inclusive sands lately.<br>[15:18] That's a nice sand saf. And so I'm going<br>[15:22] to save that. And so now my font<br>[15:24] family.Sands I can apply it by clicking<br>[15:27] the token or by right-clicking the token<br>[15:32] and selecting font family. Now you can<br>[15:35] see where this is going. Font weight is<br>[15:38] similar except you have to bear<br>[15:40] something in mind. Little clue in here.<br>[15:43] If you are coming from CSS you expect<br>[15:46] font weight and font style to perhaps be<br>[15:49] separate values. Here they are combined.<br>[15:51] They're both in font weight. So whether<br>[15:54] your font is bold or light or medium,<br>[15:58] that's in here. But also whether your<br>[16:01] font is itallic or Roman, that's the<br>[16:04] term if something isn't italic, just in<br>[16:06] case you didn't know. So you can specify<br>[16:08] all of that inside of this token. So I<br>[16:12] might have a font weight<br>[16:15] of<br>[16:17] bold and I can specify that as just bold<br>[16:21] or I can specify that as 600 or maybe I<br>[16:24] want a really heavy bold and I would<br>[16:26] specify it as 700. You can use any<br>[16:30] weight and itallic or Roman that is<br>[16:33] supported by the font family. So bear in<br>[16:36] mind that if you've set uh say<br>[16:41] I don't know 900 here<br>[16:43] and I apply this to this font I happen<br>[16:46] to know and I get an error for that that<br>[16:49] there is no 900 weight for the inclusive<br>[16:52] sands font family. So I'm going to set<br>[16:56] that to 600.<br>[16:58] And maybe I'll set one for bold itallic.<br>[17:03] not going to cover all bases right now<br>[17:05] because that would take us forever. So I<br>[17:07] might say 600 itallic in that case and<br>[17:10] so then if I selected that it would<br>[17:12] change it to 600 itallic.<br>[17:15] We also then have tokens for letter<br>[17:18] spacing. So this is the equivalent of<br>[17:21] what you get in this field here. uh text<br>[17:25] case as well that's at the bottom which<br>[17:28] is the equivalent of what you get in<br>[17:29] this field whether it's uppercase<br>[17:32] capitalized or lowerase and text<br>[17:35] decoration which is if you press these<br>[17:39] it is like either your underline or your<br>[17:42] strike through or none as well. Uh, if<br>[17:46] you want to learn more about the other<br>[17:49] design tokens, you can check out my<br>[17:51] previous hands-on on design tokens um,<br>[17:54] as well as I've written loads of<br>[17:56] tutorials on the penot blog and there is<br>[18:00] an excellent reference in the penot user<br>[18:02] guide. Really, that's my first place I<br>[18:05] go when I want to know something in<br>[18:07] detail about penot. The user guide is so<br>[18:10] good, so well written. So,<br>[18:14] let's get to our first Q&A. [laughter]<br>[18:16] Do we have any questions so far about<br>[18:19] design tokens in PMPOT?<br>[18:25] Then we can jump straight into creating<br>[18:29] typography composite tokens.<br>[18:35] [music]<br>[18:40] Now, I didn't mention just them. If you<br>[18:43] do want to ask any questions throughout,<br>[18:45] just jump on whatever platform you're on<br>[18:47] and ask questions in there and hopefully<br>[18:50] they'll filter through somehow or we'll<br>[18:52] pick them up later.<br>[18:54] Most of them do come through live, I<br>[18:56] believe. Right. So, the typography token<br>[18:59] is a special one.<br>[19:04] This is this type token down here. So<br>[19:08] what's special about a typography token<br>[19:11] is that it is a composite token. That<br>[19:15] means it's a token made up of other<br>[19:19] design tokens. And so it<br>[19:23] includes you see here we've got font<br>[19:26] family, font size, font weight, line<br>[19:28] height. and they enable you to add all<br>[19:31] of these styles to your text with just<br>[19:34] one click and just assign all of these<br>[19:36] things. And it really does reflect more<br>[19:38] how we tend to design typography. We<br>[19:41] don't tend to think of the font weight<br>[19:44] and the line height separate from the<br>[19:46] font family. We tend to when we're<br>[19:48] designing things consider all of these<br>[19:50] decisions together. So it really makes<br>[19:52] sense to combine them into one token.<br>[19:55] The composite part of a typography<br>[19:58] composite token is it is composed of<br>[20:01] those different tokens.<br>[20:04] So let's think about naming a typography<br>[20:06] token. So we've already kind of looked a<br>[20:08] little bit at the idea of foundation or<br>[20:12] core or base tokens. The idea that<br>[20:15] they've got these quite generic names<br>[20:17] and then you can reference those names<br>[20:19] in other tokens. In fact, I'm just going<br>[20:22] to show you that very quickly.<br>[20:25] So, say I wanted to I decided uh<br>[20:31] let's do this in<br>[20:33] I don't know I wanted to create a font<br>[20:37] weight<br>[20:38] uh 600 and I'm actually going to be<br>[20:42] using the 600 value. So, I've got a very<br>[20:44] specific name for my token. And then<br>[20:48] I've got a font weight bold and instead<br>[20:50] of saying 600 again I can reference it<br>[20:53] by putting it in curly quotes and say<br>[20:55] font weight 600 and it references that<br>[20:59] value and then if I choose to update<br>[21:01] that value why I would I don't know in<br>[21:04] the future then it will also update the<br>[21:07] value of this token too and then of<br>[21:10] course update any object on the canvas<br>[21:12] that is referencing that token. So<br>[21:15] that's what references are for. Uh I'll<br>[21:18] leave those be right there. It's not<br>[21:19] going to cause me any harm, I don't<br>[21:21] think. So when we come to naming our<br>[21:25] typography tokens, if we think that<br>[21:26] typography tokens are really about how<br>[21:29] you're using the token during your<br>[21:32] design process. So when you're naming<br>[21:34] them, think about that. like think about<br>[21:37] how should I make it really easy for<br>[21:40] anyone in my team or my future self even<br>[21:45] to use this token. So, you want to be<br>[21:49] consistent and you want to be<br>[21:51] descriptive, but you also want to be<br>[21:53] pretty concise with it. So sometimes<br>[21:55] it's easiest to plan your token names<br>[21:58] and your token design once you've<br>[22:01] already got and established some of<br>[22:04] those design patterns in your system<br>[22:06] already and you have an idea of the<br>[22:08] system that you already have in your<br>[22:10] hands. And so<br>[22:14] I explained foundational base core<br>[22:16] tokens. Now we're going to look at what<br>[22:18] is called a semantic token. So semantic<br>[22:21] token is named for the purpose of the<br>[22:25] token. So they're useful when you're<br>[22:27] actually doing the design work because<br>[22:29] they tell you what is this token<br>[22:32] actually for. So different types of<br>[22:36] headings, different types of labels. I<br>[22:38] might have this as my<br>[22:40] text dodee default. It's my default text<br>[22:43] that I use across my design.<br>[22:48] So let's get started with creating our<br>[22:51] typography token.<br>[22:53] Now I've start off my font family and<br>[22:56] I'm going to reference that token that I<br>[23:00] already created for font family sans.<br>[23:03] And so that is going to use inclusive<br>[23:06] sans as my default text font family. And<br>[23:11] that means if I change my mind in the<br>[23:12] future and I'm like, nah, actually I<br>[23:15] want to make the default SANS family<br>[23:18] into say DM SANS, I will change that in<br>[23:23] the font family SANS token and it will<br>[23:26] bubble through to my typography token<br>[23:28] and I'll only have to update it in one<br>[23:30] location. So it's really great thing to<br>[23:32] get into the habit of doing.<br>[23:35] The default font size. Well, that will<br>[23:37] be font size small.<br>[23:40] I find it quite handy when I'm creating<br>[23:42] tokens like this to have the panel and<br>[23:45] the relevant tokens open in the left<br>[23:48] panel because I cannot remember how I<br>[23:51] wrote things to begin with.<br>[23:53] Now, font weight. Oh, we don't want a<br>[23:57] bold font weight, do we? Well, you know<br>[23:59] what? I don't have to use a reference.<br>[24:01] I'm just going to say 400.<br>[24:03] That's a reasonable font weight there<br>[24:06] for a default text.<br>[24:08] Okay.<br>[24:16] And then it comes to line height. Now,<br>[24:19] you might be looking at line height and<br>[24:20] thinking, "But Laura, there isn't a line<br>[24:23] height token type."<br>[24:26] And that's because it doesn't really<br>[24:28] make sense to have one. If you think<br>[24:30] about your line height, it's usually in<br>[24:33] when you're designing line height, it's<br>[24:34] usually relative to the font family, the<br>[24:38] font size, the weight of the font, and<br>[24:42] to some degree where it's being used.<br>[24:44] Let's think about, say, paragraph text.<br>[24:47] you're going to use a much looser line<br>[24:51] height for readability,<br>[24:53] uh, a much bigger line height than you<br>[24:56] would for, say, heading text where when<br>[24:58] it runs onto two lines, you don't want<br>[25:00] too much of a space between it. So, it<br>[25:02] makes sense to keep it in here.<br>[25:05] With line height, you can do it like you<br>[25:08] would um, in the design panel in penot.<br>[25:11] And you can just say one, which is a<br>[25:13] multiplier of the current family. I<br>[25:15] would say maybe 1.2 two would be quite<br>[25:17] nice. You can also use percentages.<br>[25:21] Obviously, you don't want line height of<br>[25:23] 0.012.<br>[25:25] Maybe do like 150% or something like<br>[25:28] that. Um, but I'm just going to do 1.2<br>[25:31] for now. And then we have letter spacing<br>[25:35] and our uh case and text case and our<br>[25:40] text decoration.<br>[25:42] I'm just going to leave these empty<br>[25:44] because<br>[25:47] the defaults will be fine. I don't want<br>[25:49] to adjust the letter spacing from its<br>[25:50] default. I don't want to change the case<br>[25:55] from its default. I don't want to add<br>[25:57] underlines to my default text. So,<br>[26:00] that's going to do. And I can always add<br>[26:01] a description saying default text.<br>[26:07] Oh, that's a bug I discovered earlier in<br>[26:09] the week, actually. So, you know what?<br>[26:12] I'm going to save descriptions for<br>[26:13] later. [laughter]<br>[26:14] And then I will save that. And now I<br>[26:18] have my typography here. And that means<br>[26:21] if I create some new text,<br>[26:25] which is in a completely different text<br>[26:27] style, and then I set text default to<br>[26:30] it.<br>[26:31] It has then got all of those properties<br>[26:34] applied that I specified inside of my<br>[26:37] typography token.<br>[26:40] So I think that's a good point to ask.<br>[26:42] Do we have any questions about creating<br>[26:46] typography composite tokens?<br>[26:49] Is there a way to carefully define<br>[26:51] particular characters/glyph banks of a<br>[26:54] font so only those will load via CSS?<br>[26:58] There isn't right now, but I think<br>[27:00] that's a pretty cool feature request.<br>[27:02] So, I'd really recommend uh either going<br>[27:04] to the PMPOT GitHub, putting your<br>[27:08] feature requests in there, or going to<br>[27:09] the PMPOT community. I think that's a<br>[27:11] really great place to share your feature<br>[27:12] requests because then you can include<br>[27:15] your use case, maybe an example of how<br>[27:18] you would use it and what you would rely<br>[27:20] on because I can see that I don't know,<br>[27:23] for example, you've got a specific font<br>[27:26] family and you want to use the alternate<br>[27:29] glyphs in that font family. And so that<br>[27:32] I can definitely see a use case for that<br>[27:34] maybe as a part of the custom font area<br>[27:37] or something like that.<br>[27:40] Okay, if you do have any questions at<br>[27:42] any time, make sure that you just ask<br>[27:45] them on the platform that you're on. You<br>[27:47] can also jump into the penop community<br>[27:49] and ask them there later on. Come find<br>[27:51] me. I'm in there all the time.<br>[27:54] So, next up, let's look at using<br>[27:57] typography composite tokens in real<br>[28:01] projects.<br>[28:05] [music]<br>[28:10] So, I'm going to disable this scratch<br>[28:12] set for now. And I'm going to go back to<br>[28:15] my global set and enable that. And I'm<br>[28:18] going to jump onto this little demo.<br>[28:22] Now, uh if you like this little uh demo<br>[28:26] design that I've done, I have got a<br>[28:28] version of it available also from the<br>[28:31] pimpot libraries and templates.<br>[28:34] Um, if you search for it, you can search<br>[28:38] top typography.<br>[28:41] And here we go. A simple demo topography<br>[28:44] design tokens. And from the penot hub,<br>[28:47] you can download these files to import<br>[28:48] or just directly pull them into your<br>[28:51] penot.<br>[28:52] And so you can play along with me if you<br>[28:55] want. And uh, so look, go back to the<br>[28:58] right page.<br>[29:00] I got too many tabs open. All right.<br>[29:04] So here is as you see a nice grid demo<br>[29:07] that I've got. This is a the idea of<br>[29:09] maybe a fashion magazine kind of<br>[29:12] situation. So let's have a look at the<br>[29:14] tokens that I'm using here.<br>[29:17] So I have<br>[29:19] a font family. So like I explained<br>[29:22] before I have a SAS and a serif. I do<br>[29:26] quite like pairing the Sans and Serif<br>[29:29] versions of one uh like font family that<br>[29:34] can make quite a nice um consistency<br>[29:37] across a design.<br>[29:39] I have some font sizes here. I've tried<br>[29:41] to use a slightly different scale which<br>[29:43] personally I find incredibly confusing,<br>[29:45] but I just wanted to mix it up a bit.<br>[29:49] So, uh these are font sizes that are<br>[29:51] multiples of each other or multiples of<br>[29:53] the base font.<br>[29:55] I have my font weights in here. So I<br>[29:57] have bold, regular, regular, itallic,<br>[30:00] and here here are my typographies. So<br>[30:03] I've created a different typography for<br>[30:07] each different purpose of the text on<br>[30:09] the page. So up here I have my link<br>[30:12] navigation. So that's making use of the<br>[30:15] if I open it up,<br>[30:18] scroll down, I've got underline in there<br>[30:20] for my text decoration. And you can see<br>[30:22] I'm referencing the SANS font uh family<br>[30:27] and the font size one, a regular font<br>[30:30] weight and a line height of 1.2.<br>[30:34] I've got my headline in here. And so<br>[30:38] that's using serif and different things<br>[30:40] as well.<br>[30:43] Uh, [snorts] this is a bit more<br>[30:44] interesting, a pull quote because that's<br>[30:47] using regular itallic.<br>[30:50] And here, can I select it? It's the<br>[30:54] photo getting in the way. There we go.<br>[30:56] The title.<br>[30:58] I think this is quite an interesting use<br>[31:00] case because with the title typography,<br>[31:05] I'm not referencing any other design<br>[31:08] tokens because really, why do I need to?<br>[31:12] One of the things I think it's important<br>[31:14] to think about is not overusing design<br>[31:16] tokens when you don't need them. This<br>[31:18] title is completely unique. It's using a<br>[31:20] different font from every other aspect<br>[31:22] of my design. It's using a dramatically<br>[31:25] different font size. It's using a<br>[31:27] dramatically different letter casing.<br>[31:29] It's using an unusual<br>[31:31] um spacing and an unusual case. And so I<br>[31:35] don't need to create foundational tokens<br>[31:38] for each of these values because I won't<br>[31:40] use them again. So there's no point. But<br>[31:43] the typography token still allows me to<br>[31:46] create that semantic meaning that<br>[31:48] purposeful<br>[31:50] uh token so that I it so it appears in<br>[31:54] the list. I know how it differentiates<br>[31:56] from all of the other tokens, but I'm<br>[31:59] just putting in those specific values<br>[32:02] without using any references. You see<br>[32:04] here, I've even put used for the<br>[32:05] magazine title in my description. And so<br>[32:09] I think that is it can especially if you<br>[32:12] are someone with a very systemsoriented<br>[32:15] brain, you can often get into the habit<br>[32:18] of wanting to put everything into a tiny<br>[32:21] little token and reference it. It looks<br>[32:24] really nice and complete and tidy, but<br>[32:27] it's just not necessary and it can be<br>[32:28] overengineering<br>[32:30] to a degree and unless you're likely to<br>[32:33] create more titles in the future of<br>[32:36] different variations, you probably don't<br>[32:39] need to do that. Uh, so I've told you<br>[32:42] about<br>[32:44] foundational tokens. I've told you about<br>[32:46] the typography composite tokens here.<br>[32:48] I've told you you can download this demo<br>[32:50] file from the penot hub. So, this was a<br>[32:53] quick section. [laughter]<br>[32:54] Do you have any questions about anything<br>[32:57] so far? I'm not going to restrict you<br>[32:59] just to composite tokens. Okay. Right.<br>[33:04] Should we get into some really nerdy<br>[33:07] stuff? Let's look at proportional<br>[33:10] typographic scales.<br>[33:24] Now, I don't know if you've heard of a<br>[33:26] proportional typographic scale before.<br>[33:28] This is the idea where your typographic<br>[33:31] hierarchy. So, for example, the size of<br>[33:34] your title is bigger than your subtitle,<br>[33:36] which is bigger than your default text.<br>[33:39] Um, your subheading is bigger than your<br>[33:41] default text. This is a hierarchy. This<br>[33:43] is using font size to indicate what is<br>[33:46] the most important information on the<br>[33:49] page. That's a hierarchy. A proportional<br>[33:53] typographic scale is the idea of making<br>[33:57] those values mathematically related to<br>[34:00] each other in order to create a harmony<br>[34:04] across your design. Let's go back to our<br>[34:07] scratch and let's uh delete these<br>[34:12] and I'm going to go into my tokens. Oh<br>[34:14] no, I don't want those tokens.<br>[34:16] [laughter] I hate doing sizing like<br>[34:18] that. I don't know why I even did it.<br>[34:20] Just to be different. Okay, let's go to<br>[34:22] our scratch tokens. T-shirt sizes I'm<br>[34:25] finding much more comfortable right now.<br>[34:28] If anyone does have any other<br>[34:30] suggestions for scales, for font sizes<br>[34:32] and things like that, I'd love to hear<br>[34:33] it because I am genuinely interested<br>[34:35] about what works for you. And so, let's<br>[34:40] here make um I just do some demo text<br>[34:43] for each of our font sizes. So, I'm just<br>[34:45] going to say this is large.<br>[34:48] This is the exciting part where you<br>[34:49] discover that Laura can't type. Yep,<br>[34:51] there we go. [laughter] Knew it was<br>[34:53] going to happen. Extra large.<br>[34:58] and small and<br>[35:02] extra<br>[35:03] small.<br>[35:05] Um, I'm going to make all of those<br>[35:10] bounding boxes fit their text. And let's<br>[35:14] just pop those a little flex layout for<br>[35:17] prettiness.<br>[35:19] Just going to make them.<br>[35:22] Then I'll just order them by size.<br>[35:25] Flex layouts are so useful, aren't they?<br>[35:28] If you don't know about flex layouts<br>[35:29] yet, watch some of the other hands-on<br>[35:32] videos. They're so useful for laying<br>[35:34] things out really quickly. Right. So,<br>[35:37] I'm going to apply my extra large font<br>[35:39] there, my large font there, my medium<br>[35:43] there, my small, and my extra small. So,<br>[35:47] we got a nice little demo going on. Now,<br>[35:50] right now, as you know from when we<br>[35:53] created these tokens, they have kind of<br>[35:55] arbitrary values assigned to them. What<br>[35:59] I want to do is I want to make all of my<br>[36:02] font sizes<br>[36:04] relative to this small font size. I'm<br>[36:07] doing it from the small font size<br>[36:08] because I consider this to be my default<br>[36:11] font size.<br>[36:13] I'm going to do that using some<br>[36:15] calculations.<br>[36:16] So I go in here and if I wanted<br>[36:21] I could just uh go to medium. Say I want<br>[36:25] it to be a multiplied version of small<br>[36:29] and I could say 18 time uh 16 is what<br>[36:32] the value of small is or<br>[36:35] font size<br>[36:38] multiplied<br>[36:40] by say 1.2 two and then I'll get a new<br>[36:44] value. And so I can use a calculation to<br>[36:46] calculate the size of my medium text.<br>[36:50] But then I have to go through and do<br>[36:52] that for each of these individually. And<br>[36:55] what if I decide I don't want it to be<br>[36:57] 1.2 anymore.<br>[36:59] So if I I can't remember what it was<br>[37:02] now. Uh was 18. It doesn't really<br>[37:06] matter. Let's start off by making a<br>[37:08] number token. This is a relatively new<br>[37:10] token. It's a token that is just a<br>[37:13] number. And I'm going to call this my<br>[37:16] space.<br>[37:18] I'm going to say it is<br>[37:20] 16. So this [clears throat] is going to<br>[37:24] be my initial value from which all of my<br>[37:28] font sizes stem. So it's going to be the<br>[37:32] equivalent of small right now. But I<br>[37:33] might change my mind. Maybe if I use a<br>[37:35] different font family. Some font<br>[37:37] families render much smaller, some<br>[37:39] render much bigger. I might decide, oh<br>[37:41] no, I've changed it to this Sarah font<br>[37:43] where the X height is really tiny. I<br>[37:45] need to bump up my base font size to<br>[37:48] accommodate that. So I'm going to make<br>[37:50] my base of 16.<br>[37:53] And then I want my scale.<br>[37:56] So the higher the number for the scale,<br>[37:59] the more extreme the difference between<br>[38:01] my font sizes will be. The lower the<br>[38:03] number, the less extreme.<br>[38:06] You can get into really nerdy like<br>[38:09] musical scales. You can do golden ratio.<br>[38:12] You can look all these numbers up and<br>[38:14] they are actually in the starter kit if<br>[38:16] you're interested in doing that kind of<br>[38:17] thing. And so let's say for now my scale<br>[38:20] is going to be<br>[38:22] 1.2.<br>[38:25] So I'm going to set my small token to be<br>[38:30] base<br>[38:32] multiplied by scale.<br>[38:38] So that resolves as a value of 19.2.<br>[38:42] So maybe you think, oh that's quite a<br>[38:44] big<br>[38:47] uh<br>[38:49] is that what I want to do?<br>[38:51] Ah, it makes sense for now. Okay. Um, so<br>[38:55] when I come to generating my medium font<br>[38:58] size, in order to make it proportional,<br>[39:01] I'm going to reference my small font<br>[39:04] size. and then multiply that<br>[39:07] by my<br>[39:09] scale.<br>[39:12] And then I'm going to keep going.<br>[39:15] Tell you what is sometimes easier to do<br>[39:19] on typing things badly<br>[39:22] is to<br>[39:24] copy the value. And so for the large one<br>[39:29] to use that same value, but I'm actually<br>[39:31] multiplying medium. So for each value I<br>[39:34] am multiplying the low the next lower<br>[39:37] down<br>[39:39] uh font size in the hierarchy.<br>[39:43] And so when we get to extra large we are<br>[39:45] going to multiply it by large. For my<br>[39:50] extra small I'm going to go the other<br>[39:52] direction. So I'm taking font size small<br>[39:55] and I'm going to divide it by the scale.<br>[40:00] And actually that worked out well with<br>[40:01] that base size. So now I have all of<br>[40:05] these different font sizes<br>[40:07] relating to each other.<br>[40:11] And some of them are not entirely<br>[40:14] rounded. Um that's something you can do<br>[40:16] in development if if it really matters<br>[40:19] to you. Doesn't really matter to me<br>[40:22] unless you're worrying about things<br>[40:24] rendering cross pixel. But at this font<br>[40:26] size it's not really an issue. And so<br>[40:29] then if I want to play with the scale<br>[40:32] and the bass multiplier, I can try out<br>[40:36] different hierarchies. [snorts]<br>[40:38] So I could go really extreme. And you<br>[40:40] see here, if I've made my scale 1.6, my<br>[40:45] small is still reasonably small, but my<br>[40:46] extra large is enormous.<br>[40:49] Those kind of scales can work quite well<br>[40:50] if you're thinking about a lot of<br>[40:52] display typography, like landing pages<br>[40:54] and things like that. Um, maybe you want<br>[40:57] to go a bit more in the middle and with<br>[41:00] 1.3.<br>[41:02] Maybe you want to adjust the base token<br>[41:04] size to something a bit different in<br>[41:07] order to get sizes that you want. So<br>[41:09] that makes our extra small size 12 or<br>[41:13] 15.6 for small, 20.28 for medium, 26.36<br>[41:19] for large, and 34.27.<br>[41:22] So that's pretty large. And of course,<br>[41:25] if you have a lot of different text<br>[41:27] sizes you want to accommodate inside of<br>[41:29] your design or inside of your system,<br>[41:31] you might create<br>[41:33] 2 XS or the equivalent of XXS or 3 XS,<br>[41:38] which is the equivalent of X XS.<br>[41:43] It's hard to say. Um, or the same for<br>[41:45] the XL's. You could have 2 XL, 3XL.<br>[41:49] I probably wouldn't go beyond that. It's<br>[41:52] quite a lot of variety in there. Um<br>[41:54] could create quite confusion inside of<br>[41:57] your hierarchy if there are so many<br>[41:59] fonts in different sizes in there.<br>[42:03] So that is the basics of how you might<br>[42:06] want to create a proportional<br>[42:08] typographic scale. Do we have any<br>[42:12] questions about<br>[42:15] typographic scales or anything related<br>[42:17] to design t? You're a really quiet bunch<br>[42:20] today. Is anyone actually out there? If<br>[42:23] you are, um, let me know. Uh, give me a<br>[42:26] shout. Uh, let me know. Where are you?<br>[42:29] Where are you from? Um, what what kind<br>[42:32] of work do you do? Um, I'm in Ireland. I<br>[42:35] know that's really confusing because my<br>[42:36] accent isn't Irish, but that's where I<br>[42:38] am. That's where I live. Well, okay. I<br>[42:42] think let's jump into something else<br>[42:44] really exciting and new which is a bit<br>[42:46] of a bonus because I know that I said<br>[42:48] this was about typography tokens but why<br>[42:51] not let's have a look at shadow tokens.<br>[42:58] [music]<br>[43:03] So I'm going to make a little different<br>[43:05] object inside of my scratch.<br>[43:09] So shadow design tokens are exactly what<br>[43:12] you might think they are. They're<br>[43:14] another type of composite token. If you<br>[43:16] think about a shadow, if you create a<br>[43:17] shadow in pimpot, it has all of these<br>[43:22] different values that are made up to<br>[43:24] create a shadow. So of course it makes<br>[43:26] sense that we need a composite token for<br>[43:29] that. So I've just made a nice uh drop<br>[43:33] shadow going on there. You can also have<br>[43:36] inner shadows. And basically these are<br>[43:39] effects that you might use to mimic<br>[43:41] light in real life. And often you would<br>[43:44] use it to bring content forward away<br>[43:48] from the base level or push it backwards<br>[43:52] uh so it looks less important. Or you<br>[43:54] could use it for skephism if you wanted<br>[43:57] to make a button that really looked like<br>[43:59] something you could press in real life.<br>[44:01] Um I remember a phase when we all went<br>[44:03] through doing that in design maybe 15<br>[44:05] years ago. Oh, the things we did. Did<br>[44:08] you ever We had stitching effects on web<br>[44:12] pages so they look like they were sewn<br>[44:14] together. H the good old days, right?<br>[44:18] Tokens. Let's concentrate, Laura. Okay.<br>[44:21] So, we want to create a shadow token.<br>[44:25] This is very similar to these typography<br>[44:30] uh tokens. You have a shadow token name.<br>[44:32] And so [clears throat] maybe I will call<br>[44:33] this shadow dots<br>[44:36] uh outer because I might have a<br>[44:38] different inner and outer shadow. And<br>[44:41] then you can add the color. You can add<br>[44:44] the xaxis. So that is um the distance<br>[44:48] that the shadow is from your object in<br>[44:51] across the x-axis. So it can take<br>[44:53] negatives as well. And then for the<br>[44:55] Y-axis,<br>[44:57] uh the blur is how many uh pixels<br>[45:02] outside of the object does the shadow um<br>[45:07] expand or does it blur? The spread is<br>[45:10] how it expands. I hadn't thought ahead<br>[45:13] about explaining all of these<br>[45:14] individually, but we're we're making it<br>[45:16] through. So, uh I might decide I'm going<br>[45:20] to create I don't know. It's most<br>[45:22] shadows are fairly gray. Although in art<br>[45:25] school, they always taught me that a<br>[45:26] shadow is never black. It is the a<br>[45:29] darker version of the surface it is on<br>[45:31] with a little of the color of the<br>[45:33] objects that are alongside it. Uh so in<br>[45:37] that spirit, well, we're on a white<br>[45:39] canvas, so it's got to be gray. Um I<br>[45:43] tend to make most of my shadows come<br>[45:45] from the top. So, no X or Y positioning<br>[45:50] because it can get very quickly<br>[45:52] confusing otherwise. And then blur. Um I<br>[45:56] like a nice uh fuzzy blur so it feels<br>[46:00] quite far away uh from the object it's<br>[46:02] on and no spread uh because that can<br>[46:06] create a line effect around which is<br>[46:08] quite useful if you want to mimic a<br>[46:09] border using a shadow.<br>[46:14] And then I can apply my shadow by right<br>[46:17] clicking and selecting shadow like that.<br>[46:20] So you can see I've got this kind of<br>[46:22] fuzzy<br>[46:24] blurriness around my object. That might<br>[46:25] be easier to see if I make this a<br>[46:28] lighter color. There we go. And in the<br>[46:31] same way as with typography tokens, you<br>[46:35] can do things like I'm going to make a<br>[46:36] color token. I want all of my shadows to<br>[46:39] be across my whole design to be the same<br>[46:42] color. So that's a great thing to use a<br>[46:45] design token for to create that level of<br>[46:48] consistency. So I go for this grayish<br>[46:50] color. Um in fact I'm going to also give<br>[46:54] it an alpha value. Make it slightly<br>[46:57] have a lower opacity so that the<br>[47:00] background behind it color will come<br>[47:02] through. That's more realistic as well.<br>[47:05] And so now I've got my color. Let's come<br>[47:08] up here. And so now in shadow.outer<br>[47:11] outer. I'm going to reference my shadow<br>[47:14] dot color.<br>[47:17] I also think it would be really useful<br>[47:19] to add the X and Y values. I do those<br>[47:25] with number tokens, I think. So, my<br>[47:29] shadow<br>[47:32] X.<br>[47:34] Okay, maybe let's think about doing it<br>[47:37] from the top isn't very interesting.<br>[47:39] If you're using shadows to mimic the use<br>[47:42] of light inside of a design, it makes<br>[47:46] sense that you probably usually have one<br>[47:49] light source. So, one direction that the<br>[47:52] light is coming from, which throws the<br>[47:54] shadows in the opposite direction. And<br>[47:56] so, you want that to be consistent<br>[47:58] across all of your design because<br>[47:59] otherwise it's going to be very<br>[48:00] confusing to the eye. you're mimicking<br>[48:02] this very human effect that we used to<br>[48:05] seeing in real life and it's going to<br>[48:07] look odd if you're not using it in the<br>[48:09] same way in your design. And so maybe I<br>[48:13] decide that I want it to come from a<br>[48:14] corner and I'm going to give this X a<br>[48:19] value of five<br>[48:21] and I'm going to do Y a value of five.<br>[48:24] So creating these as number tokens means<br>[48:26] that I can change it later.<br>[48:29] And then I'm going to reference those<br>[48:32] tokens.<br>[48:35] Oh, not Z doesn't exist. X and shadow<br>[48:40] doy.<br>[48:43] And possibly the same for the blur as<br>[48:45] well.<br>[48:47] We want it to be our items to maybe on a<br>[48:49] similar plate. Maybe you create a scale<br>[48:51] for it. Maybe you create shadow depth<br>[48:56] um shallow.<br>[48:58] This is me completely improvising this.<br>[49:01] So five would be shallow, I suppose. Uh<br>[49:04] maybe I'm going to actually say close.<br>[49:07] Think that makes more sense. I'm not<br>[49:09] using the token yet, so it doesn't<br>[49:11] matter that I might break the reference.<br>[49:13] And shadow depth<br>[49:18] far.<br>[49:19] Okay, so that will suggest that the<br>[49:22] object is further away from the canvas.<br>[49:24] So, I make that really extreme.<br>[49:27] But maybe in my shadow.<br>[49:31] I'm going to use<br>[49:33] shadow.epth<br>[49:35] dot close.<br>[49:41] And you see that's now I've adjusted<br>[49:43] that shadow token. It has already<br>[49:45] updated the object that's using the<br>[49:47] shadow token on the canvas. That's kind<br>[49:50] of a fun effect, isn't it? I make that<br>[49:52] slightly different color so we can see<br>[49:54] it a little bit better.<br>[49:56] There we go.<br>[49:59] And then maybe if I created a inner<br>[50:02] shadow<br>[50:07] and I want that to use the same color.<br>[50:11] So that would be color dot shadow<br>[50:15] uh shadow color, wasn't it? That's why<br>[50:17] it's [snorts]<br>[50:19] can't even remember what I've named my<br>[50:20] tokens. Um, and<br>[50:24] let's just stick them with uh let's do<br>[50:26] some default values right now. Oh, you<br>[50:29] know what I didn't do? Uh, I didn't<br>[50:32] remember to choose inner shadow from the<br>[50:33] dropdown. And I can apply that inner<br>[50:36] shadow there as well. Oh, I'm That's the<br>[50:40] mistake. This is why I told you right<br>[50:42] click the tokens rather than<br>[50:43] conditioning yourself into just left<br>[50:45] clicking them because of course I just<br>[50:47] went and applied that to oh all of the<br>[50:50] properties. I actually want to like that<br>[50:53] as well.<br>[50:56] Oh right I'm it's cuz it's on the same<br>[50:57] object. Ignore me. Right. So I have an<br>[51:01] outer shadow there and an inner shadow.<br>[51:05] So I can choose between them. And maybe<br>[51:08] I actually did this in the right way<br>[51:09] because if you think about it, if the<br>[51:11] light direction was coming from there,<br>[51:12] the inner shadow would be on this side.<br>[51:16] And so I can use the same X and Y<br>[51:22] values.<br>[51:25] I think that should work<br>[51:31] as the other as the outer shadow. No,<br>[51:35] not blue. Blur.<br>[51:38] No depth.<br>[51:41] And this is why you name your tokens.<br>[51:43] Well, depth shallow.<br>[51:48] No. No.<br>[51:50] Uh, close.<br>[51:54] Right. She got there eventually. Okay.<br>[51:57] And so, yeah. So, now whether it's inner<br>[51:59] or outer, it feels real. In fact, I'm<br>[52:02] going to put two objects side by side<br>[52:03] using the different shadows so we can<br>[52:06] see them like that.<br>[52:08] Now, if we then decide, okay, well, I've<br>[52:12] got this kind of purpley color. Maybe I<br>[52:14] want to change the shadow color. I can<br>[52:16] go into shadow color<br>[52:19] and I can change that to maybe a more<br>[52:23] purpley gray. So, it's picking up a<br>[52:26] little bit of the color of the object.<br>[52:28] That'll especially look good for the<br>[52:29] inner.<br>[52:31] And so I've updated shadow color. And<br>[52:34] maybe I didn't change it to an extreme<br>[52:36] enough color. Okay. I'm going to do I I<br>[52:39] was trying to be subtle and clever and<br>[52:41] pretty, but for visibility sake, I'll<br>[52:44] make it a bit more extreme.<br>[52:46] Okay. So then I update the shadow color<br>[52:48] and it updates across all of my shadows.<br>[52:52] What you can also do in shadow tokens<br>[52:56] given that I have given these the same<br>[53:00] uh values if they were both also if I<br>[53:04] want to create another shadow<br>[53:07] um I'll give it a more semantic name. So<br>[53:10] maybe this is shadows for button. So<br>[53:13] it's shadow.button.<br>[53:14] And then I can use this here to<br>[53:17] reference another token. So to all of my<br>[53:20] button shadows, I want them to use the<br>[53:23] shadow outer style. And you see it's got<br>[53:25] a nice little preview of those styles<br>[53:27] that are going to be applied there. So<br>[53:29] that's also a really useful feature that<br>[53:31] you can reference other tokens, other<br>[53:34] composite tokens inside of your shadow<br>[53:39] composite tokens.<br>[53:41] Right. So let's get to the final Q&A.<br>[53:45] Come on, let's have some questions,<br>[53:47] please. Does anyone have any final<br>[53:50] questions for our final Q&A?<br>[53:58] Please, can I clip or mask a large bold<br>[54:02] text with an image to have an image<br>[54:05] fill? So, you want large bold text with<br>[54:07] an image fill. It's not related, but I<br>[54:10] can show you how. Okay. So, let me<br>[54:14] create I was actually just doing a demo<br>[54:16] that did this the other day,<br>[54:18] coincidentally.<br>[54:20] So, large bold text for the sake of<br>[54:24] relevance to design tokens. I'm going to<br>[54:27] use one of my design tokens<br>[54:30] for this. Oh, the font style does not<br>[54:32] exist in this current one. Uh, it's cuz<br>[54:35] I haven't applied. There we go.<br>[54:39] make it actually large by zooming in.<br>[54:42] Right, let's find an image. Uh, this is<br>[54:44] the plugins panel if you haven't used it<br>[54:46] before. Uh, good place to find some<br>[54:48] images. Um, I've got some plugins for<br>[54:51] this. Uh, free stock image search<br>[54:53] plugin. It's a handy one. Okay. What's a<br>[54:56] cool image? Let's look for a color<br>[54:59] palette related image. Let's put<br>[55:01] palette.<br>[55:02] See, we get some nice painty looking<br>[55:04] things. Okay. Makeup palette as well.<br>[55:07] Oh, that was a bad choice.<br>[55:09] I want something a bit more textured.<br>[55:11] Uh, how about rainforest?<br>[55:16] There we go. Okay. So, I'm going to grab<br>[55:20] this image<br>[55:22] and it should put it on the canvas. It's<br>[55:25] absolutely<br>[55:26] enormous.<br>[55:28] So, I'm going to shrink that down a<br>[55:30] little bit.<br>[55:32] So, it's roughly the size of my text.<br>[55:36] Make sure. Oh, I managed to get it<br>[55:37] twice. So much good. There we go.<br>[55:42] Shrink that down.<br>[55:46] Shrink it down so it just about covers<br>[55:49] the text.<br>[55:51] Okay. Now, there are a couple of ways<br>[55:53] that you could do this. Um, but I'm<br>[55:55] going to show you the way using masking.<br>[55:57] And so, I want to put that underneath<br>[56:00] and select both uh layers. And then I'm<br>[56:05] going to choose to mask. Oh, I always do<br>[56:08] that the wrong way around for some<br>[56:10] reason. There we go.<br>[56:13] So, I've used mask in the layers. It's<br>[56:16] maybe not the best image to show how you<br>[56:20] do that, but if you zoom in, you can see<br>[56:24] my text is being masked inside of the<br>[56:28] text. I hope that answered your<br>[56:30] question. Let me know if it didn't. Do<br>[56:33] we have any other questions?<br>[56:40] Can typography composite tokens<br>[56:42] reference other typography composite<br>[56:44] tokens? Hey, we can jump in and actually<br>[56:46] see. So, we go into the tokens panel and<br>[56:50] we'll go to our typography token. You<br>[56:53] see we have that button there the same<br>[56:56] as we do have in the composite shadows<br>[57:00] and we can reference another typography<br>[57:02] token in that way. So that's useful if<br>[57:06] you are<br>[57:08] you maybe have a text default theme but<br>[57:11] I want to create a typography for labels<br>[57:16] and so I might have text label. It uses<br>[57:19] the same style as text.default default<br>[57:21] for now. And so I reference<br>[57:24] text.default. And then maybe later on I<br>[57:26] decide that maybe I want to treat my<br>[57:28] labels differently. And then I can just<br>[57:31] edit that text.<br>[57:34] And I can break the reference to the<br>[57:38] text. Default. That was a lot of talking<br>[57:40] without showing. So I hope that made<br>[57:42] sense. Um great. Well, oh, does Pampot<br>[57:48] provide a font table so particular<br>[57:50] glyphs can be selected? That's a very<br>[57:51] similar question to what we had earlier.<br>[57:54] So, you can either rewind back, but I<br>[57:57] can tell you not right now. It doesn't.<br>[58:00] Um, but I do think that is a really cool<br>[58:02] feature request. It would make a lot of<br>[58:03] sense for folks working on the web. And<br>[58:07] so, if uh if you want to request that as<br>[58:11] a feature, like I'll plus one you on<br>[58:14] that one. If you go to the penot<br>[58:15] community, it's a really great place to<br>[58:17] share any feature requests you have. Um,<br>[58:21] anything that you're struggling to<br>[58:23] create in penot. I like to hang out<br>[58:25] there quite a lot as well. And so that's<br>[58:28] a great place to be able to share your<br>[58:30] use cases and a bit more information as<br>[58:32] well to help the team understand exactly<br>[58:35] what you need. So, um, that's time to<br>[58:40] wrap up, I suppose. Um, so don't forget<br>[58:42] to check out shadow tokens in pimple as<br>[58:45] well. Typography tokens have been in for<br>[58:47] a little bit, but shadow tokens, they<br>[58:49] are very, very new. Um, there is also,<br>[58:52] as I mentioned earlier, an update to the<br>[58:54] starter design tokens kit now in<br>[58:58] libraries and templates that now has<br>[58:59] typography tokens and it has shadow<br>[59:02] tokens as well. I've also created some<br>[59:05] starter kits for color tokens and color<br>[59:09] assets. You can find that there. And if<br>[59:11] you hop on over to the penot blog, you<br>[59:14] can find me doing a deep dive into what<br>[59:16] are the differences between color tokens<br>[59:19] and color assets. I know that's a common<br>[59:21] question in penot, so I've tried to<br>[59:23] answer it. I even did a nice comparison<br>[59:25] table for you. Uh the next hands-on will<br>[59:29] be next month, so you haven't got long<br>[59:31] to wait. Make sure that you follow us or<br>[59:34] subscribe to us or whatever you do on<br>[59:37] whatever platform you're watching this<br>[59:39] on. and you will be the first to know<br>[59:41] about the topic of the next section.<br>[59:44] Thank you so much for joining me. Thank<br>[59:46] you to those of us who joined us live<br>[59:48] and ask questions. I really appreciate<br>[59:50] it. You mean that I'm not just sitting<br>[59:52] here talking to myself. Have a great<br>[59:55] rest of your week. Goodbye. <!-- deep-read:sections end -->