@codenhub/styles 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/NOTICE +18 -16
  2. package/README.es.md +62 -0
  3. package/README.md +28 -22
  4. package/README.pt-BR.md +62 -0
  5. package/dist/aesthetics/chunky-tile.css +1 -1
  6. package/dist/aesthetics/cyber.css +1 -1
  7. package/dist/aesthetics/glass.css +1 -1
  8. package/dist/aesthetics/index.css +2 -2
  9. package/dist/aesthetics/neobrutalism.css +1 -1
  10. package/dist/aesthetics/pixel.css +1 -1
  11. package/dist/aesthetics/sketch.css +1 -1
  12. package/dist/cli.js +189 -0
  13. package/dist/components.css +2 -2
  14. package/dist/index.css +2 -2
  15. package/dist/index.d.ts +1 -0
  16. package/dist/native.css +2 -2
  17. package/dist/palette.css +1 -1
  18. package/dist/theme.css +2 -2
  19. package/docs/accessibility.md +108 -60
  20. package/docs/changelog/0.1.1.md +1 -0
  21. package/docs/changelog/0.2.0.md +1 -0
  22. package/docs/changelog/0.3.0.md +1 -0
  23. package/docs/changelog/0.4.0.md +1 -0
  24. package/docs/changelog/0.5.0.md +8 -3
  25. package/docs/changelog/0.6.0.md +2 -1
  26. package/docs/changelog/0.7.0.md +50 -0
  27. package/docs/changelog/0.8.0.md +70 -0
  28. package/docs/changelog/index.md +2 -0
  29. package/docs/concepts.md +188 -46
  30. package/docs/es/accessibility.md +169 -0
  31. package/docs/es/concepts.md +212 -0
  32. package/docs/es/index.md +105 -0
  33. package/docs/es/integrating/astro.md +35 -0
  34. package/docs/es/integrating/index.md +75 -0
  35. package/docs/es/integrating/nextjs.md +67 -0
  36. package/docs/es/integrating/svelte.md +45 -0
  37. package/docs/es/integrating/tailwind.md +148 -0
  38. package/docs/es/integrating/vue.md +31 -0
  39. package/docs/es/integrating/without-a-bundler.md +238 -0
  40. package/docs/es/setup.md +188 -0
  41. package/docs/es/usage/aesthetics.md +282 -0
  42. package/docs/es/usage/buttons.md +135 -0
  43. package/docs/es/usage/composing.md +168 -0
  44. package/docs/es/usage/content-and-layout.md +219 -0
  45. package/docs/es/usage/customizing.md +304 -0
  46. package/docs/es/usage/feedback.md +157 -0
  47. package/docs/es/usage/forms.md +256 -0
  48. package/docs/es/usage/index.md +33 -0
  49. package/docs/es/usage/presets.md +92 -0
  50. package/docs/es/usage/solo.md +86 -0
  51. package/docs/es/usage/theming.md +309 -0
  52. package/docs/es/usage/tooltips.md +127 -0
  53. package/docs/index.md +86 -26
  54. package/docs/integrating/astro.md +3 -4
  55. package/docs/integrating/index.md +46 -13
  56. package/docs/integrating/nextjs.md +3 -4
  57. package/docs/integrating/svelte.md +5 -4
  58. package/docs/integrating/tailwind.md +89 -6
  59. package/docs/integrating/vue.md +3 -4
  60. package/docs/integrating/without-a-bundler.md +237 -0
  61. package/docs/pt-BR/accessibility.md +169 -0
  62. package/docs/pt-BR/concepts.md +212 -0
  63. package/docs/pt-BR/index.md +105 -0
  64. package/docs/pt-BR/integrating/astro.md +35 -0
  65. package/docs/pt-BR/integrating/index.md +75 -0
  66. package/docs/pt-BR/integrating/nextjs.md +67 -0
  67. package/docs/pt-BR/integrating/svelte.md +45 -0
  68. package/docs/pt-BR/integrating/tailwind.md +148 -0
  69. package/docs/pt-BR/integrating/vue.md +31 -0
  70. package/docs/pt-BR/integrating/without-a-bundler.md +238 -0
  71. package/docs/pt-BR/setup.md +188 -0
  72. package/docs/pt-BR/usage/aesthetics.md +282 -0
  73. package/docs/pt-BR/usage/buttons.md +135 -0
  74. package/docs/pt-BR/usage/composing.md +168 -0
  75. package/docs/pt-BR/usage/content-and-layout.md +219 -0
  76. package/docs/pt-BR/usage/customizing.md +304 -0
  77. package/docs/pt-BR/usage/feedback.md +157 -0
  78. package/docs/pt-BR/usage/forms.md +256 -0
  79. package/docs/pt-BR/usage/index.md +33 -0
  80. package/docs/pt-BR/usage/presets.md +92 -0
  81. package/docs/pt-BR/usage/solo.md +86 -0
  82. package/docs/pt-BR/usage/theming.md +309 -0
  83. package/docs/pt-BR/usage/tooltips.md +127 -0
  84. package/docs/setup.md +142 -91
  85. package/docs/usage/aesthetics.md +89 -73
  86. package/docs/usage/buttons.md +112 -40
  87. package/docs/usage/composing.md +109 -92
  88. package/docs/usage/content-and-layout.md +160 -125
  89. package/docs/usage/customizing.md +117 -41
  90. package/docs/usage/feedback.md +138 -71
  91. package/docs/usage/forms.md +201 -107
  92. package/docs/usage/index.md +22 -14
  93. package/docs/usage/presets.md +91 -0
  94. package/docs/usage/solo.md +85 -0
  95. package/docs/usage/theming.md +273 -118
  96. package/docs/usage/tooltips.md +90 -49
  97. package/llms-full.txt +2820 -1298
  98. package/llms.txt +24 -22
  99. package/package.json +134 -91
  100. package/{dist/tw → tw}/aesthetics/chunky-tile.css +107 -29
  101. package/{dist/tw → tw}/aesthetics/cyber.css +88 -40
  102. package/{dist/tw → tw}/aesthetics/glass.css +257 -61
  103. package/{dist/tw → tw}/aesthetics/neobrutalism.css +113 -20
  104. package/{dist/tw → tw}/aesthetics/pixel.css +93 -8
  105. package/tw/aesthetics/sketch.css +417 -0
  106. package/{dist/tw → tw}/box.css +105 -9
  107. package/tw/components/button.css +11 -0
  108. package/tw/components/button.rules.css +187 -0
  109. package/tw/components/feedback.css +11 -0
  110. package/{dist/tw/components/feedback.css → tw/components/feedback.rules.css} +136 -32
  111. package/tw/components/form.css +11 -0
  112. package/{dist/tw/components/form.css → tw/components/form.rules.css} +577 -125
  113. package/tw/components/index.css +16 -0
  114. package/tw/components/rules.css +41 -0
  115. package/tw/components/surface.css +11 -0
  116. package/tw/components/surface.rules.css +222 -0
  117. package/tw/components/tooltip.css +11 -0
  118. package/{dist/tw/components/tooltip.css → tw/components/tooltip.rules.css} +43 -27
  119. package/{dist/tw → tw}/corner.css +18 -12
  120. package/{dist/tw → tw}/elevation.css +23 -17
  121. package/{dist/tw → tw}/index.css +12 -10
  122. package/tw/index.d.ts +1 -0
  123. package/tw/intent.css +312 -0
  124. package/tw/modifiers.css +127 -0
  125. package/tw/native.css +320 -0
  126. package/tw/presentation.css +139 -0
  127. package/tw/reset.css +10 -0
  128. package/{dist/tw/reset.css → tw/reset.rules.css} +21 -22
  129. package/tw/size.css +34 -0
  130. package/tw/surface.css +9 -0
  131. package/tw/surface.rules.css +212 -0
  132. package/{dist/tw → tw}/theme.css +121 -45
  133. package/tw/typography.css +8 -0
  134. package/{dist/tw/typography.css → tw/typography.rules.css} +0 -3
  135. package/{dist/tw → tw}/utilities/content.css +212 -50
  136. package/tw/utilities/index.css +11 -0
  137. package/tw/utilities/layout.css +208 -0
  138. package/tw/utilities/rules.css +8 -0
  139. package/dist/tw/aesthetics/sketch.css +0 -333
  140. package/dist/tw/components/button.css +0 -139
  141. package/dist/tw/components/index.css +0 -36
  142. package/dist/tw/components/loader.css +0 -116
  143. package/dist/tw/components/surface.css +0 -175
  144. package/dist/tw/intent.css +0 -228
  145. package/dist/tw/native.css +0 -203
  146. package/dist/tw/palette.css +0 -460
  147. package/dist/tw/presentation.css +0 -68
  148. package/dist/tw/surface.css +0 -61
  149. package/dist/tw/utilities/index.css +0 -6
  150. package/dist/tw/utilities/layout.css +0 -130
  151. /package/{dist/tw → tw}/aesthetics/index.css +0 -0
@@ -0,0 +1,135 @@
1
+ ---
2
+ title: Botões
3
+ description: Ações destrutivas e secundárias, botões de ícone, tamanhos, links com cara de botão, estados desabilitados e como carregar ícones.
4
+ order: 1
5
+ source: 54f7c8a1eee5a0f696dc60b9f60f42026d49c5d5
6
+ ---
7
+
8
+ # Botões
9
+
10
+ A tela de configurações tem um botão de salvar e um de cancelar. Esta página acrescenta o resto das ações: uma zona de perigo com um botão destrutivo de excluir, um botão de ícone que copia uma chave de API e botões menores para uma linha mais densa. Ela também trata de botões desabilitados e de como carregar os ícones usados aqui e nas próximas páginas.
11
+
12
+ ## Adicione uma zona de perigo
13
+
14
+ Uma ação destrutiva fica num card próprio, no fim da tela. O card é soft e destrutivo, para ser lido como um aviso; o botão é sólido, para ser o elemento que mais chama atenção naquele card:
15
+
16
+ ```html
17
+ <section class="card soft destructive stack" aria-labelledby="danger-title">
18
+ <h2 class="text-title-sm" id="danger-title">Delete account</h2>
19
+ <p>This removes your projects, invoices, and API keys. It cannot be undone.</p>
20
+ <div class="cluster">
21
+ <button class="btn destructive" type="button">Delete account</button>
22
+ <button class="btn ghost" type="button">Export data first</button>
23
+ </div>
24
+ </section>
25
+ ```
26
+
27
+ O card e o botão declaram `.destructive` cada um, porque [a intenção não é herdada](../concepts.md#intenção-qual-cor). Pelo mesmo motivo, o botão de exportar mantém a cor neutra dentro do card vermelho.
28
+
29
+ ## Escolha um preenchimento e uma borda
30
+
31
+ Um botão aceita uma intenção, uma classe de preenchimento e uma classe de borda, todas opcionais. Sem nenhuma, o botão é sólido e sem borda:
32
+
33
+ ```html
34
+ <button class="btn primary">Save changes</button>
35
+ <button class="btn secondary">Preview</button>
36
+ <button class="btn primary soft">Invite member</button>
37
+ <button class="btn destructive ghost edged">Revoke key</button>
38
+ <button class="btn ghost">Cancel</button>
39
+ ```
40
+
41
+ Um botão **neutro** nunca é preenchido por completo. A cor dele é a própria cor do texto da página, então um preenchimento total seria um bloco preto ou branco, o elemento que mais chama atenção na página justamente para a intenção que não significa nada em particular. Em vez disso, um botão neutro `.solid` para em 20% de preenchimento, um cinza discreto um tom mais escuro que o `.soft`. Toda intenção com nome preenche até 100%.
42
+
43
+ No hover, o preenchimento de um botão aumenta em `--hover-step` (14%), então um botão `.ghost` ganha um tom e um `.solid` muda para a cor de hover da sua intenção. Ao ser pressionado, ele encolhe um pouco (`scale(0.97)`); uma [estética](./aesthetics.md) pode trocar isso pelo seu próprio efeito de clique, e, com a preferência do usuário por movimento reduzido, ele ainda acontece, de imediato.
44
+
45
+ Um botão neutro `.soft` ou `.ghost` dentro de uma superfície preenchida, como um botão Cancelar num `.card.solid.primary` ou num `.alert.solid.destructive`, imprime o rótulo e a linha na cor de texto dessa superfície, então continua legível sobre o preenchimento. Um campo de texto faz o mesmo. Um botão com intenção mantém a própria cor, e um neutro `.solid` também, porque fica sobre um preenchimento próprio.
46
+
47
+ Quando um botão preenchido tem o foco do teclado, uma linha de 2px da cor da página corre por dentro do anel de foco, então o anel continua visível sobre um botão preenchido da mesma cor, como `.solid.primary`.
48
+
49
+ ## Tamanhos e formatos
50
+
51
+ | Classe | Efeito |
52
+ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
53
+ | _nenhuma_ | Pelo menos 2.5rem de altura (`--control-height`), 1rem de padding lateral e o mesmo tamanho de fonte do texto ao redor. |
54
+ | `.sm` | Pelo menos 2rem de altura, 0.75rem de padding lateral, texto de 0.875rem. |
55
+ | `.lg` | Pelo menos 3rem de altura, 1.25rem de padding lateral, texto de 1.0625rem. |
56
+ | `.pill` | Extremidades totalmente arredondadas. |
57
+ | `.icon` | Quadrado. Pelo menos 2.5rem de cada lado, 2rem com `.sm`, 3rem com `.lg`. |
58
+ | `.p-xs` | O padding mais justo (0.5rem nas laterais, 0.125rem em cima e embaixo). Também remove a altura mínima, para que o botão caiba numa célula de tabela ou numa toolbar densa. |
59
+ | `.p-sm` | Padding compacto (0.625rem nas laterais, 0.25rem em cima e embaixo). |
60
+ | `.p-lg` | Padding espaçoso (1.5rem nas laterais, 0.75rem em cima e embaixo). |
61
+
62
+ Uma classe de tamanho e uma de padding podem ser combinadas. Só o `.p-xs` remove a altura mínima de um botão com rótulo; todas as outras combinações a mantêm. Num botão de ícone, qualquer classe `.p-*` remove o tamanho mínimo, e o botão passa a ter o tamanho do ícone mais esse padding: 0.125rem, 0.25rem ou 0.75rem ao redor.
63
+
64
+ O visual base desenha cantos que acompanham o tamanho: um botão `.sm` ou `.p-sm` tem cantos um pouco menores que o padrão, e um `.lg`, um pouco maiores.
65
+
66
+ ## Botões de ícone
67
+
68
+ A lista de chaves de API da tela de configurações tem um botão de copiar ao lado de cada chave. Um botão só com ícone precisa de um nome acessível, porque o ícone não tem texto que um leitor de tela consiga ler:
69
+
70
+ ```html
71
+ <button class="btn icon ghost" type="button" aria-label="Copy API key">
72
+ <i class="ic-lucide-copy" aria-hidden="true"></i>
73
+ </button>
74
+ <button class="btn ghost sm" type="button">
75
+ <i class="ic-lucide-download" aria-hidden="true"></i>
76
+ Download invoice
77
+ </button>
78
+ ```
79
+
80
+ Um botão é uma linha flex com espaçamento de 0.5rem, então um ícone ao lado de um rótulo fica espaçado sem markup extra.
81
+
82
+ ### Carregando ícones
83
+
84
+ Este pacote não entrega ícones. Os exemplos desta documentação usam o `@codenhub/icons` com a família Lucide, e os nomes de classe dele sempre incluem a família, como `ic-lucide-copy`. Instale e carregue uma vez, ao lado deste pacote:
85
+
86
+ ```sh
87
+ pnpm add @codenhub/icons
88
+ ```
89
+
90
+ Com CSS compilado, importe as regras base e cada família que você usa:
91
+
92
+ ```css
93
+ @import "@codenhub/styles";
94
+ @import "@codenhub/icons";
95
+ @import "@codenhub/icons/lucide";
96
+ ```
97
+
98
+ Com o código-fonte do Tailwind, importe o entrypoint de Tailwind dele depois do deste pacote:
99
+
100
+ ```css
101
+ @import "@codenhub/styles/tw";
102
+ @import "@codenhub/icons/tw";
103
+ ```
104
+
105
+ Qualquer outro ícone também funciona: um `<svg>` inline com `stroke="currentColor"` ou `fill="currentColor"` pega a cor do texto do botão da mesma forma.
106
+
107
+ ## Links com cara de botão
108
+
109
+ Um link que navega, como "View billing history", continua sendo um link. Escreva-o como `<a href>` com `.btn`, e ele ganha o mesmo visual:
110
+
111
+ ```html
112
+ <a class="btn secondary ghost edged" href="/settings/billing">View billing history</a>
113
+ ```
114
+
115
+ Não use `<div class="btn">` nem `<span class="btn">`: eles parecem botões, mas não podem receber foco nem ser acionados pelo teclado. Use `<button>` para ações e `<a href>` para navegação.
116
+
117
+ ## Botões desabilitados
118
+
119
+ Qualquer um destes deixa um botão com aparência de desabilitado: o atributo `disabled`, `.disabled`, `aria-disabled="true"` ou `data-disabled`. Um botão desabilitado é desenhado com 58% de opacidade e cursor de não permitido, e não muda no hover nem ao ser pressionado.
120
+
121
+ ```html
122
+ <button class="btn primary" type="submit" disabled>Save changes</button>
123
+
124
+ <a class="btn ghost" aria-disabled="true">Download invoice</a>
125
+ ```
126
+
127
+ Só o atributo `disabled` impede o botão de funcionar. `.disabled`, `aria-disabled` e `data-disabled` mudam apenas a aparência: um clique ou a tecla Enter ainda o acionam, então o seu código precisa ignorá-lo. `aria-disabled` é a escolha certa quando o botão deve continuar focável, por exemplo para que um tooltip explique por que ele está desabilitado. Um link não tem atributo `disabled`, então remova também o `href` dele quando ele não deve navegar.
128
+
129
+ ## Estado de carregamento
130
+
131
+ Não existe classe de carregamento. Um botão carregando é um botão desabilitado com um ícone de spinner que você fornece, e a página de [Feedback](./feedback.md#mostre-que-o-formulário-está-salvando) monta isso para o botão de salvar. Desabilite o botão para que um segundo clique não envie o formulário duas vezes.
132
+
133
+ ## A seguir
134
+
135
+ Os botões estão prontos; o card que eles salvam ainda não tem nada para salvar. [Formulários](./forms.md) acrescenta os campos do perfil.
@@ -0,0 +1,168 @@
1
+ ---
2
+ title: Composição
3
+ description: Consulta sobre como intenção, apresentação, estética e elevação se combinam, o visual padrão de cada componente e quais classes cada componente lê.
4
+ order: 8
5
+ source: 2493c7c14124565b565b1226e99d4b3de3b087b2
6
+ ---
7
+
8
+ # Composição
9
+
10
+ Esta é uma página de consulta. [Montando uma tela](../concepts.md) apresenta intenção, apresentação e estética; esta página tem as regras completas para combiná-las, o visual padrão de cada componente, quais classes cada componente lê e a elevação.
11
+
12
+ ## Combinando classes
13
+
14
+ ```html
15
+ <div class="soft">
16
+ <button class="btn primary">Soft primary button</button>
17
+ <span class="badge success">Soft success badge</span>
18
+ <button class="btn primary ghost edged">Outlined: the class on the element wins</button>
19
+ </div>
20
+ ```
21
+
22
+ - **A apresentação é herdada.** `.solid`, `.soft`, `.ghost`, `.edged` e `.edgeless` funcionam no componente ou em qualquer contêiner, e uma classe no elemento vence uma herdada de um contêiner. Um contêiner define o visual de tudo dentro dele, e qualquer elemento pode escolher o seu.
23
+ - **Estéticas e [tokens de material](./customizing.md#tokens-de-material) são herdados** da mesma forma.
24
+ - **A intenção não é herdada.** `.primary` e as outras classes de intenção colorem só o elemento em que estão. Um contêiner que recolorisse silenciosamente tudo dentro dele deixaria vermelho o botão neutro de cancelar de um card vermelho de zona de perigo. `.neutral` dá nome ao padrão; use-o onde um elemento receberia uma intenção, como uma linha de tabela dentro de uma tabela `.success`. Veja [Temas → Tokens de intenção](./theming.md#tokens-de-intenção).
25
+ - **A elevação não é herdada.** `.raised` eleva só o elemento em que está; veja [Elevação](#elevação).
26
+ - **O tamanho não é herdado.** `.sm` e `.lg` mudam o tamanho só do botão ou do controle em que estão, então um formulário `.sm` não encolhe os campos dentro dele. Veja [Botões → Tamanhos e formatos](./buttons.md#tamanhos-e-formatos) e [Formulários → Tamanhos](./forms.md#tamanhos).
27
+
28
+ Com os entrypoints de código-fonte do Tailwind, cada classe acima, exceto as classes de estética, também é um utilitário do Tailwind, então variantes como `md:lg` e `dark:solid` funcionam e `@apply btn primary soft sm` dá a uma classe sua a combinação inteira. Os modificadores documentados com cada componente, como `.tight` ou `.interactive`, também são utilitários, então `@apply stack tight` funciona. As classes de estética, como `.glass`, continuam sendo CSS puro, então `@apply glass` e `md:glass` não funcionam; escreva a classe no markup. Veja [Tailwind CSS v4 → Construa seus próprios componentes com `@apply`](../integrating/tailwind.md#construa-seus-próprios-componentes-com-apply), e a página de [Predefinições](./presets.md) para saber quando usar isso.
29
+
30
+ ## Padrões dos componentes
31
+
32
+ Sem nenhuma classe de apresentação nele ou em volta dele, cada componente tem o seu próprio visual. "Elevação em repouso" é quanta profundidade ele recebe quando uma [estética](./aesthetics.md) desenha profundidade; sem estética, nada tem sombra.
33
+
34
+ | Componente | Preenchimento | Borda | Elevação em repouso |
35
+ | -------------------------------- | ------------- | --------- | ------------------- |
36
+ | `.btn` | `.solid` | sem borda | 1 |
37
+ | `.card` | `.ghost` | com borda | 1 |
38
+ | `.panel` | `.soft` | sem borda | 0 |
39
+ | `.alert` | `.soft` | com borda | 0 |
40
+ | `.badge` | `.soft` | sem borda | 0 |
41
+ | `.ipt`, `.textarea`, `.select` | `.ghost` | com borda | 0 |
42
+ | `.input-group` | `.ghost` | com borda | 0 |
43
+ | `.checkbox`, `.radio`, `.switch` | `.soft` | com borda | 0 |
44
+ | `.kbd` | `.soft` | com borda | 0 |
45
+ | `.code`, `.pre` | `.soft` | sem borda | 0 |
46
+ | `.data-table` | `.soft` | sem borda | 0 |
47
+ | `.progress` (o trilho) | `.soft` | sem borda | 0 |
48
+ | `.tooltip-bubble` | `.solid` | com borda | 0 |
49
+ | `.quote` | `.ghost` | com borda | 0 |
50
+ | `.skeleton`, `.divider` | Só a intenção | Nenhuma | 0 |
51
+
52
+ Um `.solid` neutro preenche só até 20%; veja [Temas → Tokens de intenção](./theming.md#tokens-de-intenção). As exceções neutras a esses preenchimentos estão em [Apresentação](#apresentação).
53
+
54
+ ## Apresentação
55
+
56
+ A apresentação são duas escolhas separadas. `.solid`, `.soft` e `.ghost` definem quanto da cor da intenção preenche um componente. `.edged` e `.edgeless` definem se ele desenha uma borda. Elas definem [tokens de apresentação](./customizing.md#tokens-de-apresentação) e nada mais.
57
+
58
+ | Classe | Visual | `--ui-fill` | `--ui-fg-on-fill` | `--ui-border` |
59
+ | ----------- | ------------------------------------------------------------------ | ----------- | ----------------- | ------------- |
60
+ | `.solid` | Preenchido com a cor da intenção, com texto em contraste. | `100%` | `100%` | |
61
+ | `.soft` | Um tom claro, com texto na cor da intenção. | `12%` | `0%` | |
62
+ | `.ghost` | Sem preenchimento em repouso, com texto na cor da intenção. | `0%` | `0%` | |
63
+ | `.edged` | Uma borda na cor da intenção, tão grossa quanto a estética define. | | | `100%` |
64
+ | `.edgeless` | Sem borda. | | | `0%` |
65
+
66
+ ```html
67
+ <button class="btn primary">Solid, the button default</button>
68
+ <button class="btn soft edged">Tinted, with a border</button>
69
+ <button class="btn primary ghost edged">Outline</button>
70
+ <button class="btn ghost">Ghost: picks up a tint on hover</button>
71
+ <input class="ipt soft edgeless" aria-label="Search" />
72
+ ```
73
+
74
+ Uma classe de preenchimento nunca define a borda, e uma classe de borda nunca define o preenchimento. `.solid.edged` tem o mesmo visual que `.solid.edgeless`, porque a borda some à medida que o preenchimento aumenta.
75
+
76
+ A borda é o contorno do componente e nada mais. Linhas dentro de um componente, como as linhas divisórias entre as linhas de uma tabela, são um controle separado; veja [Conteúdo e layout → Linhas divisórias de tabela](./content-and-layout.md#linhas-divisórias-de-tabela).
77
+
78
+ ### Superfícies neutras ficam sem tom em repouso
79
+
80
+ Um `.card.soft`, um `.panel` e um `.alert` neutros não mostram tom em repouso. Em vez disso, eles usam o tom de fundo discreto um passo distante da página (`--color-foreground`), porque um tom cinza em toda caixa neutra parece sujo, e não discreto.
81
+
82
+ - Um `.card.soft` com `.interactive` ou `.hoverable` mostra o tom no hover. Um `.card.soft` simples e um `.panel` não têm estado de hover.
83
+ - A apresentação pode vir do elemento ou de um contêiner: `<div class="soft"><div class="card">` fica em repouso como `.card.soft`, e um contêiner `.ghost` ou `.solid` dá a um `.panel` ou `.alert` a placa que a própria classe daria.
84
+ - Com uma das seis intenções embutidas, os três mantêm o tom comum de 12%, e um card o aprofunda no hover. Uma intenção definida por você é tratada como neutra aqui; veja [Temas → Sua própria intenção](./theming.md#sua-própria-intenção).
85
+ - Um `.badge` mantém o seu tom de 12% mesmo quando neutro. Ele não tem borda, então, sem o tom, sumiria no texto em volta.
86
+
87
+ `.kbd`, `.code` e `.pre` funcionam de outro jeito. Eles ficam sobre o tom suave da sua intenção, `--intent-subtle`, que é `--color-surface` no neutro, e uma intenção embutida adiciona 12% da sua cor por cima. Uma intenção definida por você mostra o seu próprio tom `--intent-subtle`, sem esses 12% a mais.
88
+
89
+ ### Controles de texto e toggles
90
+
91
+ - **Controles de texto** limitam o seu preenchimento para que o texto digitado continue legível: no máximo 6% vindo de um contêiner, 12% com o seu próprio `.soft` e 20% com o seu próprio `.solid`. Eles ignoram um `.edgeless` vindo de um contêiner e respeitam o seu próprio. Veja [Formulários → Preenchimento e borda em controles de texto](./forms.md#preenchimento-e-borda-em-controles-de-texto).
92
+ - **Toggles** limitam o preenchimento desmarcado a 40% e preenchem até 100% quando marcados. `.checkbox` e `.radio` sempre desenham a sua borda, assim como `.switch.ghost`. Veja [Formulários → Cores de marcado e desmarcado](./forms.md#cores-de-marcado-e-desmarcado).
93
+
94
+ ### Balões de tooltip
95
+
96
+ Um balão de tooltip é sempre preenchido e opaco, e desenha uma borda fina que só o seu próprio `.edgeless` remove. Sem intenção, ele usa `--color-tooltip`; uma intenção o preenche com a cor dela. [Tooltips → Como o balão aparece](./tooltips.md#como-o-balão-aparece) traz as cores.
97
+
98
+ ### Trilhos de progresso
99
+
100
+ `.progress` lê as duas escolhas no seu trilho. A parte preenchida é sempre a cor da intenção com força total. `.solid` não é suportado no trilho, porque o trilho e a parte preenchida ficariam da mesma cor. `.ghost.edgeless` renderiza, mas deixa o trilho sem moldura visível; `.ghost.edged` desenha um contorno em volta dele.
101
+
102
+ ### Combinações não suportadas
103
+
104
+ | Componente | Classe | O que acontece |
105
+ | ----------------------- | ----------- | ----------------------------------------------------------------------------------- |
106
+ | `.kbd`, `.code`, `.pre` | `.ghost` | O chip ainda desenha o seu fundo tingido, porque é esse fundo que faz dele um chip. |
107
+ | `.progress` | `.solid` | O trilho e a parte preenchida ficam da mesma cor, então não dá para ver o valor. |
108
+ | `.checkbox`, `.radio` | `.edgeless` | Ignorado: a borda é sempre desenhada. |
109
+
110
+ ## Referência de eixos por componente
111
+
112
+ Quais classes mudam cada componente. "Material" é o que uma [estética](./aesthetics.md) pode mudar nele: "Formato" significa canto, espessura da borda, sombra, hover e contorno; as entradas mais restritas listam o que se aplica.
113
+
114
+ | Componentes | Intenção | Preenchimento | Borda | Material |
115
+ | ------------------------------------------------------------- | -------- | ------------- | ----- | ------------------ |
116
+ | `.btn`, `.alert`, `.badge`, `.card`, `.panel` | Sim | Sim | Sim | Formato |
117
+ | `.kbd`, `.data-table` | Sim | Sim | Sim | Canto e borda |
118
+ | `.quote` | Sim | Sim | Sim | Espessura da borda |
119
+ | `.divider`, `.skeleton` | Sim | Não | Não | Não |
120
+ | `.ipt`, `.textarea`, `.select`, `.text-control` | Sim | Sim | Sim | Formato |
121
+ | `.input-group` | Sim | Sim | Sim | Formato |
122
+ | `.surface` | Sim | Sim | Sim | Formato |
123
+ | `.checkbox`, `.radio` | Sim | Sim | Não | Canto e borda |
124
+ | `.switch` | Sim | Sim | Sim | Canto e borda |
125
+ | `.progress` | Sim | Sim | Sim | Canto e borda |
126
+ | `.code`, `.pre` | Sim | Sim | Sim | Canto e contorno |
127
+ | `.tooltip-bubble` | Sim | Sim | Sim | Formato e desfoque |
128
+ | `.table-wrap`, `.quote-inline`, utilitários de layout e texto | Não | Não | Não | Não |
129
+
130
+ "Sim" significa que a classe muda o componente, e "Não" que não muda; os testes do pacote conferem os dois. O que cada componente faz com uma classe:
131
+
132
+ | Componente | Lê |
133
+ | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
134
+ | `.btn`, `.alert`, `.badge`, `.card`, `.panel` | Preenchimento, cor do texto, borda e espessura da borda. |
135
+ | `.kbd` | Preenchimento, cor do texto, borda e espessura da borda. |
136
+ | `.data-table` | Preenchimento e cor do texto do cabeçalho, borda e espessura da borda. |
137
+ | `.ipt`, `.textarea`, `.select`, `.text-control` | Borda, espessura da borda e um preenchimento limitado. |
138
+ | `.input-group` | Borda, espessura da borda e um preenchimento limitado. |
139
+ | `.checkbox`, `.radio` | Um preenchimento limitado, marcado e desmarcado. |
140
+ | `.switch` | Borda, espessura da borda e um preenchimento limitado. |
141
+ | `.quote` | Preenchimento, cor do texto, borda e espessura da borda. |
142
+ | `.code`, `.pre`, `.tooltip-bubble` | Preenchimento, cor do texto, borda e material. |
143
+ | `.progress` | Preenchimento do trilho, borda e espessura da borda. A parte preenchida é sempre a cor cheia da intenção. |
144
+ | `.skeleton`, `.divider` | Só a intenção. |
145
+
146
+ Classes de estado e modificadoras, como `.interactive`, `.hoverable`, `.pressable`, `.p-sm` e `.vertical`, são documentadas junto com o seu componente. Cada uma tem efeito nos componentes que a leem, e no `/tw` são utilitários, então `@apply card interactive` funciona. Um controle inválido é marcado com `aria-invalid="true"`, e não com uma classe; veja [Formulários](./forms.md#mostre-um-erro-de-validação).
147
+
148
+ ## Elevação
149
+
150
+ Elevação é quanta profundidade um componente recebe. Nada tem sombra até que uma [estética](./aesthetics.md) desenhe profundidade ou uma destas classes a peça.
151
+
152
+ | Classe | Profundidade |
153
+ | ----------- | ------------------------------------------------------------------------------------------------ |
154
+ | `.flat` | Nenhuma. As superfícies de vidro mantêm a sua sombra, porque ela faz parte do material do glass. |
155
+ | `.raised` | Um passo da profundidade em vigor: cards e blocos que ficam perto da página. |
156
+ | `.floating` | Dois passos: menus e popovers. |
157
+
158
+ ```html
159
+ <article class="card raised">Lifted</article>
160
+ <div class="floating panel">A menu</div>
161
+ <article class="card flat">Flat, whatever the aesthetic says</article>
162
+ ```
163
+
164
+ Cada classe multiplica a sombra da estética em vigor. O mesmo `.raised` é um desfoque suave numa página simples e uma sombra dura deslocada sob `.neobrutalism`: a estética decide como a profundidade parece, e a classe decide quanto dela esse elemento recebe.
165
+
166
+ A classe não é herdada. Ela eleva ou achata só o elemento em que está, e um elemento dentro dele não recebe profundidade dela. Dê a cada elemento que precisa de profundidade a sua própria classe. O espalhamento (spread) de uma sombra não é multiplicado, porque uma estética que desenha a borda como sombra interna usa o espalhamento para essa borda.
167
+
168
+ Essas classes são separadas dos tokens de sombra `--elevation-*` em [Temas → Tokens fundamentais](./theming.md#tokens-fundamentais), que são sombras fixas para elementos que você mesmo estiliza.
@@ -0,0 +1,219 @@
1
+ ---
2
+ title: Conteúdo e layout
3
+ description: Consulta de todos os helpers de layout com os seus espaçamentos, a escala tipográfica com os seus tamanhos, cards e painéis com o seu padding, tabelas, citações, código e teclas.
4
+ order: 10
5
+ source: 19c4b12f34054533e56cbc1edbefff908c48a1e7
6
+ ---
7
+
8
+ # Conteúdo e layout
9
+
10
+ Esta é uma página de consulta para as classes que organizam uma página e definem o seu conteúdo: helpers de layout, a escala tipográfica, cards e painéis, tabelas e os pequenos chips de conteúdo. [Montando uma tela](../concepts.md#organize-o-layout-da-página) mostra essas classes em uso.
11
+
12
+ ## Layout
13
+
14
+ O espaçamento de todo helper de layout é `--layout-gap`, `1rem` por padrão. Definir `--layout-gap` num elemento muda o espaçamento de todos os layouts dentro dele. `.tight` e `.loose` mudam só o layout em que estão; um layout aninhado dentro dele mantém o seu próprio espaçamento.
15
+
16
+ | Classe | Layout | Espaçamento |
17
+ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
18
+ | `.stack` | Uma coluna vertical. | `--layout-gap`, `.tight` 0.5rem, `.loose` 1.5rem |
19
+ | `.cluster` | Uma linha que quebra, com os itens centralizados na vertical. `.between` espalha os itens até as duas pontas. | Igual |
20
+ | `.view` | Um contêiner flex. `.vertical` o transforma numa coluna; `.horizontal`, numa linha que quebra, com itens centralizados. | Igual |
21
+ | `.auto-grid` | Um grid de colunas iguais, cada uma com pelo menos `--layout-grid-min` (16rem) de largura, quantas couberem. | Igual |
22
+ | `.section` | Padding em volta de uma seção da página: `--layout-gutter` nas laterais, `--layout-section-block` em cima e embaixo. | Nenhum |
23
+ | `.section-content` | Centraliza o seu conteúdo numa largura de `--container-max` (80rem). `.narrow` usa 48rem, `.wide` 90rem. | Nenhum |
24
+ | `.divider` | Uma linha horizontal, tão larga quanto o seu contêiner. `.vertical` a transforma numa linha vertical tão alta quanto a linha do layout. | Nenhum |
25
+ | `.visually-hidden` | Esconde o conteúdo na tela e o mantém para leitores de tela. | Nenhum |
26
+
27
+ `.auto-grid` acomoda duas colunas de 16rem quando o seu contêiner tem 32rem mais o espaçamento de largura, três com 48rem mais dois espaçamentos, e assim por diante. Abaixo da largura de uma coluna, a coluna encolhe para caber. Defina `--layout-grid-min` no grid para mudar a largura das colunas.
28
+
29
+ `--layout-gutter` é `clamp(1rem, 4vw, 2rem)` e `--layout-section-block` é `clamp(4rem, 9vw, 7rem)`: os dois crescem com a janela entre esses limites. A lista completa dos tokens fundamentais está em [Temas → Tokens fundamentais](./theming.md#tokens-fundamentais).
30
+
31
+ Um `.divider` aceita uma intenção, que o colore, e ignora as classes de apresentação, então um contêiner `.ghost.edgeless` não esconde os divisores dentro dele. A espessura dele é a espessura de borda da estética.
32
+
33
+ `.visually-hidden` não se chama `.sr-only` porque o Tailwind entrega um `.sr-only` próprio, e duas classes com o mesmo nome entrariam em conflito.
34
+
35
+ ## Tipografia
36
+
37
+ | Classe | Tamanho | Peso | Espaçamento entre letras |
38
+ | ---------------- | ------------------------------------------ | ----------- | ------------------------ |
39
+ | `.text-display` | 3.75rem, 6rem a partir de 48rem de largura | Negrito | Justo |
40
+ | `.text-title-lg` | 3rem, 3.75rem a partir de 48rem de largura | Negrito | Justo |
41
+ | `.text-title` | 1.875rem | Negrito | Justo |
42
+ | `.text-title-sm` | 1.25rem | Seminegrito | Justo |
43
+ | `.text-label-lg` | 1.125rem | Médio | Largo |
44
+ | `.text-label` | 1rem | Médio | Largo |
45
+ | `.text-body` | 0.875rem | Normal | Mais largo |
46
+
47
+ Os dois maiores tamanhos crescem no breakpoint `md` do Tailwind, 48rem por padrão. Com os entrypoints de código-fonte do Tailwind, vale o seu próprio breakpoint `md`. O pacote não define tamanho para texto sem classe: o texto do corpo e os títulos sem classe recebem o tamanho do navegador, ou o tamanho do texto em volta sob o reset; veja [Configuração → HTML sem classes](../setup.md#html-sem-classes) para o mapeamento sem classes.
48
+
49
+ `.text-body` tem 0.875rem, menor que o texto de 1rem da página; use-o para texto secundário ou denso, não para o texto principal da página. O `/native` é a exceção: ele aplica `.text-body` ao `body`, então lá ele é o texto da página, e parágrafos e itens de lista o herdam do elemento em que estiverem. Veja [HTML sem classes](../setup.md#html-sem-classes).
50
+
51
+ `.selection-contrast` num elemento troca as cores do texto selecionado dentro dele para `--color-primary` sobre `--color-primary-contrast`. Use-o numa área `.solid.primary`, onde a cor de seleção padrão seria igual ao fundo.
52
+
53
+ ## Superfícies
54
+
55
+ `.card` e `.panel` são os dois contêineres. Os dois aceitam intenção, [apresentação](./composing.md#apresentação) e [tokens de material](./customizing.md#tokens-de-material).
56
+
57
+ | Classe | Visual padrão | Padding padrão |
58
+ | -------- | ----------------------------------------------------------------------------------- | -------------- |
59
+ | `.card` | Sem preenchimento, com borda, o canto de superfície e uma elevação em repouso de 1. | 1.25rem |
60
+ | `.panel` | O tom de fundo discreto, sem borda, o canto de superfície e sem elevação. | 1rem |
61
+
62
+ Uma elevação em repouso de 1 não mostra sombra sozinha. Um card só tem sombra sob uma [estética](./aesthetics.md) que desenha profundidade, ou com `.raised` ou `.floating`; veja [Composição → Elevação](./composing.md#elevação).
63
+
64
+ Classes de padding:
65
+
66
+ | Classe | Num `.card` | Num `.panel` |
67
+ | --------- | ----------- | ------------ |
68
+ | `.p-xs` | 0.5rem | 0.25rem |
69
+ | `.p-sm` | 0.75rem | 0.5rem |
70
+ | _nenhuma_ | 1.25rem | 1rem |
71
+ | `.p-lg` | 2rem | 1.5rem |
72
+ | `.flush` | 0 | 0 |
73
+
74
+ `.flush` é para conteúdo que vai de ponta a ponta, como uma imagem ou uma tabela dentro de um card.
75
+
76
+ Uma classe de padding só se aplica ao card ou painel em que está. Um card ou painel aninhado dentro dele mantém o seu próprio padding, então um `.card.flush` que contém um `.panel` ainda aplica 1rem de padding ao painel.
77
+
78
+ Um painel é para barras laterais, barras de ferramentas e áreas rebaixadas: áreas que fazem parte da página, e não objetos sobre ela. Um card é um objeto autocontido, como o card de perfil ou o card do plano na tela de configurações.
79
+
80
+ ### Cards e painéis neutros
81
+
82
+ Um `.card.soft` neutro e um `.panel` neutro não mostram tom: eles ficam sobre o tom de fundo discreto um passo distante da página, então aparecem como uma área separada sem chamar atenção. Com uma intenção embutida, eles recebem o tom comum. [Composição → Superfícies neutras ficam sem tom em repouso](./composing.md#superfícies-neutras-ficam-sem-tom-em-repouso) traz os detalhes, incluindo o hover.
83
+
84
+ ### Cards clicáveis
85
+
86
+ | Classe | Efeito |
87
+ | -------------- | ----------------------------------------------------------------------------------------------------------- |
88
+ | `.interactive` | Cursor de ponteiro, cor de hover, clique e um anel de foco. O mesmo que `.hoverable` e `.pressable` juntos. |
89
+ | `.hoverable` | Só a cor de hover, sem cursor de ponteiro. |
90
+ | `.pressable` | Só o clique e o cursor de ponteiro. |
91
+
92
+ No visual padrão, um clique reduz levemente o card (`scale(0.97)`); uma estética pode substituir isso pelo seu próprio clique, e, com a preferência por movimento reduzido, ele ainda acontece, de imediato.
93
+
94
+ Use uma das metades num card que responde a um só gesto. Um card que contém o seu próprio botão recebe `.hoverable`, para que clicar no botão não clique o card inteiro.
95
+
96
+ ```html
97
+ <article class="card">Neutral card</article>
98
+ <article class="card success solid">Filled success card</article>
99
+ <article class="card primary ghost edged">Intent border, no fill</article>
100
+ <a class="card success soft interactive" href="/settings/billing">Billing: tinted at rest, deeper on hover</a>
101
+ <article class="card hoverable">Tinted on hover; the action is a nested button</article>
102
+ <aside class="panel">A sidebar</aside>
103
+ ```
104
+
105
+ Essas classes só estilizam. Coloque-as num link ou botão de verdade e dê a ele um nome acessível; um `<div class="card interactive">` não pode receber foco nem ser usado pelo teclado.
106
+
107
+ Um card `.interactive` ou `.pressable` desabilitado mostra o cursor de não permitido em vez do ponteiro, seja um `<button>` com `disabled`, seja um elemento com `.disabled`, `aria-disabled="true"` ou `data-disabled`.
108
+
109
+ ## Tabelas
110
+
111
+ A tela de configurações lista as chaves de API numa tabela:
112
+
113
+ ```html
114
+ <div class="table-wrap">
115
+ <table class="data-table">
116
+ <caption class="visually-hidden">
117
+ API keys
118
+ </caption>
119
+ <thead>
120
+ <tr>
121
+ <th scope="col">Name</th>
122
+ <th scope="col">Created</th>
123
+ <th scope="col">Status</th>
124
+ </tr>
125
+ </thead>
126
+ <tbody>
127
+ <tr>
128
+ <td>Deploy bot</td>
129
+ <td>3 March 2026</td>
130
+ <td>Active</td>
131
+ </tr>
132
+ <tr class="destructive">
133
+ <td>Old laptop</td>
134
+ <td>12 June 2024</td>
135
+ <td>Revoked</td>
136
+ </tr>
137
+ </tbody>
138
+ </table>
139
+ </div>
140
+ ```
141
+
142
+ | Classe | Efeito |
143
+ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
144
+ | `.data-table` | Estiliza uma `<table>`: largura total, texto `.text-body`, um fundo no cabeçalho, o canto de superfície, padding nas células e uma cor de hover nas linhas do corpo. |
145
+ | `.table-wrap` | Rola a tabela para os lados quando ela é mais larga que o seu contêiner. |
146
+ | `.ruled` | Num `.data-table`. Desenha uma linha entre as linhas do corpo. |
147
+ | `.ruleless` | Num `.data-table`. Não desenha nenhuma linha dentro da tabela. |
148
+
149
+ ### Intenção das linhas
150
+
151
+ As linhas de uma tabela recebem a intenção da tabela, então `.data-table.success` deixa o cabeçalho e as linhas divisórias verdes. Uma linha com a sua própria classe de intenção usa essa, como faz o `<tr class="destructive">` da chave revogada. `<tr class="neutral">` volta uma linha para neutro dentro de uma tabela colorida. Numa tabela `.solid`, uma linha com a sua própria intenção mantém a cor de texto da tabela, para continuar legível sobre o preenchimento da tabela, e mostra a sua intenção pela linha divisória e pelo hover. Este é o único lugar em que uma intenção é herdada, porque as linhas são partes da tabela, e não componentes separados.
152
+
153
+ Só as seis intenções embutidas e `.neutral` mudam a cor de uma linha do corpo. Uma linha com uma intenção que você mesmo definiu, como `<tr class="beta">`, fica igual ao resto da tabela: o texto, a linha divisória e o hover vêm da intenção da tabela. Para marcar essa linha, escreva nela uma classe de intenção embutida e troque, na própria linha, a família de cores dessa intenção, como descreve [Temas → Sua própria intenção](./theming.md#sua-própria-intenção), ou pinte a linha com os seus próprios utilitários.
154
+
155
+ ### Linhas divisórias de tabela
156
+
157
+ Uma tabela desenha linhas embaixo do cabeçalho e em cima do rodapé. `.ruled` e `.ruleless` as mudam junto com as linhas entre as linhas do corpo:
158
+
159
+ | Classe | Embaixo do cabeçalho e em cima do rodapé | Entre as linhas do corpo |
160
+ | ----------- | ---------------------------------------- | ------------------------ |
161
+ | `.ruleless` | Não | Não |
162
+ | _nenhuma_ | Sim | Não |
163
+ | `.ruled` | Sim | Sim |
164
+
165
+ `--ui-rule` é o token por trás das duas classes, então um contêiner pode adicionar linhas divisórias a todas as tabelas dentro dele: `style="--ui-rule: 100%"` funciona como `.ruled`, e `0%` como `.ruleless`.
166
+
167
+ A moldura em volta da tabela é separada: uma tabela não tem borda por padrão, e `.edged` adiciona uma. As três escolhas não afetam umas às outras, então `.data-table.ruleless.edged` é uma tabela com moldura e sem linhas dentro, e `.data-table.ruled` tem todas as linhas separadas e nenhuma moldura.
168
+
169
+ ### Apresentação em tabelas
170
+
171
+ Uma tabela lê a [apresentação](./composing.md#apresentação) no seu cabeçalho, nas suas linhas divisórias e na sua borda:
172
+
173
+ ```html
174
+ <table class="data-table success soft edged">
175
+ …
176
+ </table>
177
+ <table class="data-table ghost">
178
+ <!-- No header background: only lines and text -->
179
+ </table>
180
+ ```
181
+
182
+ - `.soft`, o padrão, dá ao cabeçalho o tom de fundo discreto, `--color-foreground`, em todas as intenções. Uma tabela não tem estado de hover para um tom, então um `.data-table.success.soft` não fica verde; as linhas divisórias e a borda dele ficam.
183
+ - `.ghost` remove o fundo do cabeçalho, deixando as linhas divisórias e o texto.
184
+ - `.solid` preenche o cabeçalho com a cor da intenção.
185
+
186
+ ### Cantos e rolagem
187
+
188
+ Uma tabela recebe o canto de superfície, como um card ao lado dela. As células dos cantos carregam os cantos, então uma `<caption>` acima da tabela não é cortada em nenhum navegador. Uma célula que ocupa várias linhas até um canto inferior deixa esse canto reto.
189
+
190
+ `.table-wrap` rola, e um elemento com rolagem corta o que é desenhado fora dele, incluindo um tooltip numa célula; veja [Tooltips → Onde um tooltip é cortado](./tooltips.md#onde-um-tooltip-é-cortado).
191
+
192
+ - Sob uma estética que desenha um brilho em volta dos componentes, como `.cyber`, o wrapper abre espaço para o brilho, para que ele não seja cortado. O wrapper então se estende até essa distância além do seu pai, o que só aparece quando o pai encosta na borda da janela.
193
+ - O wrapper só consegue abrir espaço para o brilho de uma estética em volta dele. Coloque a classe de estética no `.table-wrap` ou num elemento acima dele, e não só na tabela.
194
+ - Sombras, como a de uma tabela `.raised`, não ganham espaço e são cortadas.
195
+
196
+ Mantenha o wrapper em qualquer tabela que possa ficar mais larga que o seu contêiner; sem ele, uma tabela larga alarga a página inteira.
197
+
198
+ ## Citações, código e teclas
199
+
200
+ | Classe | Uso | Visual padrão | Cores da intenção |
201
+ | --------------- | -------------------------------------------------------------------------------------- | -------------------------------------- | ------------------- |
202
+ | `.quote` | Um `<blockquote>`. Um `<cite>` dentro dele fica sem itálico e recebe a cor da citação. | Uma barra no início, sem preenchimento | Barra, fundo, texto |
203
+ | `.quote-inline` | Uma citação `<q>` inline. | Só o estilo de citação | Nada |
204
+ | `.kbd` | Uma tecla que o usuário pressiona, como <kbd>Ctrl</kbd>. | Um chip tingido com borda | Fundo, borda, texto |
205
+ | `.code` | Código inline. | Um chip tingido sem borda | Fundo, texto |
206
+ | `.pre` | Um bloco de código. Ele rola para os lados quando uma linha é longa demais. | Um bloco tingido sem borda | Fundo, texto |
207
+
208
+ ```html
209
+ <p>Press <kbd class="kbd">Ctrl</kbd> + <kbd class="kbd">K</kbd> to search members.</p>
210
+ <p>Use the <code class="code">Authorization</code> header with your API key.</p>
211
+ <kbd class="kbd primary solid">Ctrl</kbd>
212
+ <kbd class="kbd primary soft edged">Shift</kbd>
213
+ ```
214
+
215
+ Um `.kbd`, `.code` ou `.pre` fica sobre o tom suave da sua intenção, `--color-surface` no neutro, e uma classe de intenção embutida adiciona 12% da sua cor por cima. `.ghost` não é suportado nesses três: o fundo tingido é o que faz deles chips, então eles o mantêm e `.ghost` não muda nada. A fonte deles é `--font-mono`; veja [Temas → Fontes](./theming.md#fontes).
216
+
217
+ ## A seguir
218
+
219
+ A página de [Predefinições](./presets.md) mostra como definir um visual uma única vez, em vez de em cada elemento. [Acessibilidade](../accessibility.md) lista o que o CSS faz pelos seus usuários e o que a sua aplicação ainda deve a eles.