@inchurch/matcha-theme 20.0.8 → 20.276.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 (99) hide show
  1. package/abstracts/_colors.scss +404 -404
  2. package/abstracts/_elevation.scss +102 -102
  3. package/abstracts/_functions.scss +1212 -1212
  4. package/abstracts/_media-breakpoint.scss +23 -23
  5. package/abstracts/_typography.scss +127 -127
  6. package/base/_reset.scss +438 -438
  7. package/components/app-page-header.scss +260 -0
  8. package/components/matcha-accordion.scss +294 -157
  9. package/components/matcha-avatar.scss +171 -31
  10. package/components/matcha-badge.scss +4 -4
  11. package/components/matcha-breadcrumb.scss +232 -126
  12. package/components/matcha-button-toggle.scss +44 -0
  13. package/components/matcha-buttons.scss +908 -784
  14. package/components/matcha-calendar.scss +70 -2
  15. package/components/matcha-cards.scss +28 -2
  16. package/components/matcha-checkbox.scss +191 -490
  17. package/components/matcha-chip.scss +297 -212
  18. package/components/matcha-command-palette.scss +291 -63
  19. package/components/matcha-crop.scss +407 -172
  20. package/components/matcha-date.scss +81 -81
  21. package/components/matcha-divider.scss +86 -31
  22. package/components/matcha-drawer.scss +201 -50
  23. package/components/matcha-drop-image.scss +14 -0
  24. package/components/matcha-drop-list.scss +42 -1
  25. package/components/matcha-empty-state.scss +195 -83
  26. package/components/matcha-flag.scss +93 -52
  27. package/components/matcha-footer.scss +68 -164
  28. package/components/matcha-form-field.scss +52 -0
  29. package/components/matcha-form-section.scss +101 -101
  30. package/components/matcha-header.scss +135 -325
  31. package/components/matcha-highlight.scss +65 -197
  32. package/components/matcha-hint-text.scss +21 -0
  33. package/components/matcha-horizontal-tree.scss +317 -317
  34. package/components/matcha-icon.scss +17 -25
  35. package/components/matcha-list.scss +5 -5
  36. package/components/matcha-menu.scss +13 -0
  37. package/components/matcha-modal.scss +58 -84
  38. package/components/matcha-nav.scss +361 -230
  39. package/components/matcha-notification.scss +413 -197
  40. package/components/matcha-option.scss +79 -23
  41. package/components/matcha-paginator.scss +689 -235
  42. package/components/matcha-panel.scss +42 -26
  43. package/components/matcha-profile-card.scss +50 -50
  44. package/components/matcha-progress-bar.scss +257 -153
  45. package/components/matcha-radio.scss +244 -452
  46. package/components/matcha-scrollbox-shadow.scss +122 -122
  47. package/components/matcha-select.scss +3 -3
  48. package/components/matcha-skeleton.scss +18 -0
  49. package/components/matcha-slide-toggle.scss +47 -2
  50. package/components/matcha-slider.scss +172 -75
  51. package/components/matcha-snack-bar.scss +114 -121
  52. package/components/matcha-spinner.scss +76 -57
  53. package/components/matcha-status-pill.scss +82 -0
  54. package/components/matcha-stepper.scss +377 -177
  55. package/components/matcha-table.scss +569 -785
  56. package/components/matcha-tabs.scss +624 -469
  57. package/components/matcha-text-editor.scss +98 -144
  58. package/components/matcha-toolbar.scss +359 -206
  59. package/components/matcha-tooltip.scss +156 -62
  60. package/components/matcha-tree-view.scss +189 -0
  61. package/components/matcha-uploader.scss +240 -62
  62. package/fonts/manrope/manrope-latin-ext.woff2 +0 -0
  63. package/fonts/manrope/manrope-latin.woff2 +0 -0
  64. package/layout/matcha-page-layout.scss +776 -0
  65. package/main.scss +232 -261
  66. package/package.json +1 -1
  67. package/tokens/_animations-tokens.scss +37 -37
  68. package/tokens/_breakpoints-tokens.scss +35 -26
  69. package/tokens/_color-tokens.scss +1152 -1152
  70. package/tokens/_css-custom-properties.scss +650 -568
  71. package/tokens/_spacing-tokens.scss +94 -94
  72. package/vendors/angular-editor.scss +56 -56
  73. package/vendors/angular-material-fixes.scss +297 -297
  74. package/vendors/charts.scss +92 -92
  75. package/vendors/ng5-slider.scss +56 -56
  76. package/vendors/ngx-material-timepicker.scss +50 -50
  77. package/fonts/CircularStd-Black.eot +0 -0
  78. package/fonts/CircularStd-Black.svg +0 -3426
  79. package/fonts/CircularStd-Black.ttf +0 -0
  80. package/fonts/CircularStd-Black.woff +0 -0
  81. package/fonts/CircularStd-Black.woff2 +0 -0
  82. package/fonts/CircularStd-Bold.eot +0 -0
  83. package/fonts/CircularStd-Bold.otf +0 -0
  84. package/fonts/CircularStd-Bold.svg +0 -13532
  85. package/fonts/CircularStd-Bold.ttf +0 -0
  86. package/fonts/CircularStd-Bold.woff +0 -0
  87. package/fonts/CircularStd-Bold.woff2 +0 -0
  88. package/fonts/CircularStd-Medium.eot +0 -0
  89. package/fonts/CircularStd-Medium.otf +0 -0
  90. package/fonts/CircularStd-Medium.svg +0 -13511
  91. package/fonts/CircularStd-Medium.ttf +0 -0
  92. package/fonts/CircularStd-Medium.woff +0 -0
  93. package/fonts/CircularStd-Medium.woff2 +0 -0
  94. package/fonts/CircularStd-Regular.eot +0 -0
  95. package/fonts/CircularStd-Regular.otf +0 -0
  96. package/fonts/CircularStd-Regular.svg +0 -2378
  97. package/fonts/CircularStd-Regular.ttf +0 -0
  98. package/fonts/CircularStd-Regular.woff +0 -0
  99. package/fonts/CircularStd-Regular.woff2 +0 -0
@@ -1,206 +1,359 @@
1
- @use "sass:map";
2
-
3
- // =============================================================================
4
- // matcha-toolbar.scss Page toolbar + Settings toolbar item
5
- // Aligned with Figma matcha/toolbar (3 tipos) + matcha/toolbar/item (3 tipos)
6
- // Angular: matcha-toolbar, matcha-toolbar-button, matcha-toolbar-main-button,
7
- // matcha-toolbar-content, matcha-toolbar-custom-button
8
- // =============================================================================
9
-
10
- @mixin matcha-toolbar-theme($theme) {
11
- $is-dark: map.get($theme, is-dark);
12
-
13
- // ── Page Toolbar Container ──
14
- matcha-toolbar {
15
- .matcha-toolbar-container {
16
- background: var(--matcha-color-surface, #{getSurface($theme)});
17
- border-radius: var(--matcha-radius-lg, 8px);
18
- }
19
- }
20
-
21
- // ── Toolbar Button (icon, outline, grey) ──
22
- matcha-toolbar-button {
23
- button {
24
- color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
25
-
26
- &:hover:not(:disabled) {
27
- background: var(--matcha-color-surface-hover, #{getBackgroundAlpha($theme)});
28
- }
29
-
30
- &:focus-visible {
31
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
32
- outline-offset: var(--matcha-state-focus-ring-offset, 2px);
33
- }
34
- }
35
- }
36
-
37
- // ── Main Button (accent) ──
38
- matcha-toolbar-main-button {
39
- button {
40
- background: var(--matcha-color-accent, #{getAccent($theme)});
41
- color: var(--matcha-color-accent-contrast, #{getAccentContrast($theme)});
42
-
43
- &:hover:not(:disabled) {
44
- opacity: 0.9;
45
- }
46
-
47
- &:focus-visible {
48
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
49
- outline-offset: var(--matcha-state-focus-ring-offset, 2px);
50
- }
51
- }
52
- }
53
-
54
- // ── Settings Toolbar Item ──
55
- .matcha-toolbar-item {
56
- .toolbar-item-title {
57
- color: var(--matcha-color-fg, #{getForeground($theme)});
58
- }
59
-
60
- .toolbar-item-description {
61
- color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
62
- }
63
-
64
- .toolbar-item-hint {
65
- color: var(--matcha-color-text-placeholder, #{getBlueGrey($theme)});
66
- }
67
- }
68
- }
69
-
70
- // ── Layout ──────────────────────────────────────────────────────────────────
71
-
72
- matcha-toolbar {
73
- display: block;
74
- width: 100%;
75
-
76
- .matcha-toolbar-container {
77
- display: flex;
78
- flex-wrap: wrap;
79
- align-items: center;
80
- justify-content: space-between;
81
- // Figma matcha/toolbar: h 64, pad 16, gap 8, radius 8
82
- padding: var(--matcha-space-200, 16px);
83
- gap: var(--matcha-space-100, 8px);
84
- min-height: 64px;
85
- border-radius: var(--matcha-radius-lg, 8px);
86
- }
87
-
88
- .matcha-toolbar-title {
89
- display: flex;
90
- align-items: center;
91
- min-height: 32px;
92
- flex: 1;
93
- min-width: 0;
94
- }
95
-
96
- .matcha-toolbar-actions {
97
- display: flex;
98
- align-items: center;
99
- gap: var(--matcha-space-100, 8px);
100
- flex-wrap: wrap;
101
- }
102
- }
103
-
104
- // ── Toolbar Button ──
105
- matcha-toolbar-button {
106
- display: inline-flex;
107
- }
108
-
109
- // ── Main Button ──
110
- matcha-toolbar-main-button {
111
- display: inline-flex;
112
-
113
- button {
114
- border: none;
115
- border-radius: var(--matcha-radius-lg, 8px);
116
- padding: var(--matcha-space-100, 8px) var(--matcha-space-200, 16px);
117
- font-family: var(--matcha-font-family);
118
- font-size: var(--matcha-text-label-md, 14px);
119
- font-weight: var(--matcha-weight-medium, 500);
120
- cursor: pointer;
121
- display: flex;
122
- align-items: center;
123
- gap: var(--matcha-space-100, 8px);
124
- min-height: 40px;
125
- }
126
- }
127
-
128
- // ── Toolbar Content ──
129
- matcha-toolbar-content {
130
- display: flex;
131
- flex-wrap: wrap;
132
- gap: var(--matcha-space-100, 8px);
133
- }
134
-
135
- // ── Settings Toolbar Item ──
136
- .matcha-toolbar-item {
137
- display: flex;
138
- flex-direction: column;
139
- gap: var(--matcha-space-200, 16px);
140
- width: 100%;
141
-
142
- .toolbar-item-header {
143
- display: flex;
144
- align-items: center;
145
- justify-content: space-between;
146
- gap: var(--matcha-space-200, 16px);
147
- }
148
-
149
- .toolbar-item-dropdowns {
150
- display: flex;
151
- align-items: center;
152
- gap: var(--matcha-space-100, 8px);
153
- flex-wrap: wrap;
154
- }
155
-
156
- .toolbar-item-description {
157
- font-family: var(--matcha-font-family);
158
- font-size: var(--matcha-text-body-md, 14px);
159
- line-height: var(--matcha-leading-body-md, 20px);
160
- }
161
-
162
- .toolbar-item-chips {
163
- display: flex;
164
- flex-wrap: wrap;
165
- gap: var(--matcha-space-100, 8px);
166
- }
167
-
168
- .toolbar-item-hint {
169
- font-family: var(--matcha-font-family);
170
- font-size: var(--matcha-text-body-md, 14px);
171
- line-height: var(--matcha-leading-body-md, 20px);
172
- }
173
- }
174
-
175
- // ── Responsive ──
176
- @include media-breakpoint('lt-md') {
177
- matcha-toolbar {
178
- .matcha-toolbar-container {
179
- flex-direction: column;
180
- align-items: stretch;
181
- }
182
-
183
- .matcha-toolbar-title {
184
- width: 100%;
185
- justify-content: space-between;
186
- }
187
-
188
- .matcha-toolbar-actions {
189
- width: 100%;
190
- }
191
- }
192
-
193
- .matcha-toolbar-item {
194
- .toolbar-item-header {
195
- flex-direction: column;
196
- align-items: flex-start;
197
- }
198
- }
199
- }
200
-
201
- // ── Reduced motion ──
202
- @media (prefers-reduced-motion: reduce) {
203
- matcha-toolbar-main-button button {
204
- transition: none;
205
- }
206
- }
1
+ // =============================================================================
2
+ // matcha-toolbar — flex row + slot único (1:1 Figma DSV3 15866:92)
3
+ //
4
+ // Canon Figma: 1 slot `content` (flex gap-100 items-center p-200 radius-lg).
5
+ // Consumer compõe Title + Actions + CTA livremente no slot default.
6
+ // Slots nomeados (title/actions/primary) preservados pra back-compat com
7
+ // consumers anteriores ao realinhamento Figma.
8
+ //
9
+ // Modifiers via host data-attrs:
10
+ // data-layout — horizontal | stack
11
+ // data-size — compact | comfortable | spacious
12
+ // data-color — accent | success | warn | danger | info (sem 'default')
13
+ // data-elevation — 1 | 2 | 3 (sem 0)
14
+ // data-bordered — outline 1px
15
+ // data-sticky — position sticky top
16
+ // data-collapse-search — search vira icon-button em stack mode
17
+ //
18
+ // Zero hardcoded fora do bloco de vars no topo.
19
+ // =============================================================================
20
+
21
+ @mixin matcha-toolbar($theme) {
22
+
23
+ // ── CSS vars (single source of truth) ─────────────────────────────────
24
+ matcha-toolbar {
25
+ // Spacing — alinhado ao Figma DSV3 15866:92.
26
+ // Toolbar padding 16px simétrico, gap entre groups 12px (Figma Frame interno),
27
+ // gap interno de actions group 8px. Height 68 = 16+36+16.
28
+ // Consumer pode override per-side via --matcha-toolbar-padding-left/right.
29
+ --matcha-toolbar-padding-y: var(--matcha-space-200, 16px);
30
+ --matcha-toolbar-padding-x: var(--matcha-space-200, 16px);
31
+ --matcha-toolbar-padding-left: var(--matcha-toolbar-padding-x);
32
+ --matcha-toolbar-padding-right: var(--matcha-toolbar-padding-x);
33
+ --matcha-toolbar-gap: var(--matcha-space-150, 12px);
34
+ --matcha-toolbar-actions-gap: var(--matcha-space-100, 8px);
35
+ --matcha-toolbar-min-height: 68px;
36
+
37
+ // Item max-widths UX guardrails canon DSV3.
38
+ // Title NÃO tem cap por default (flex: 1 1 auto cresce até preencher
39
+ // o espaço disponível). Consumer pode aplicar max-width localmente se
40
+ // precisar (raro — só pra casos com title gigante por i18n).
41
+ // Search: 320px = Figma 280 + buffer. Acima disso vira "barrão" desproporcional.
42
+ --matcha-toolbar-search-max-width: 320px;
43
+
44
+ // Breakpoint pra auto-stack (mobile). Default 768px = md Tailwind / matcha bp-md.
45
+ --matcha-toolbar-stack-breakpoint: 768px;
46
+
47
+ // Size variants — padding/min-height (consumer override no escopo).
48
+ --matcha-toolbar-padding-y-compact: var(--matcha-space-150, 12px);
49
+ --matcha-toolbar-padding-x-compact: var(--matcha-space-150, 12px);
50
+ --matcha-toolbar-min-height-compact: var(--matcha-space-600, 48px);
51
+ --matcha-toolbar-padding-y-spacious: var(--matcha-space-300, 24px);
52
+ --matcha-toolbar-padding-x-spacious: var(--matcha-space-300, 24px);
53
+ --matcha-toolbar-min-height-spacious: var(--matcha-space-900, 72px);
54
+
55
+ // Surface
56
+ --matcha-toolbar-bg: var(--matcha-color-surface-card);
57
+ --matcha-toolbar-radius: var(--matcha-radius-lg, 8px);
58
+ --matcha-toolbar-border-color: var(--matcha-color-surface-border);
59
+ --matcha-toolbar-border-width: var(--matcha-border-hairline, 1px);
60
+
61
+ // Elevation (3 níveis canon)
62
+ --matcha-toolbar-shadow-1: var(--matcha-shadow-1);
63
+ --matcha-toolbar-shadow-2: var(--matcha-shadow-2);
64
+ --matcha-toolbar-shadow-3: var(--matcha-shadow-3);
65
+
66
+ // Sticky
67
+ --matcha-toolbar-sticky-z: var(--matcha-z-sticky, 10);
68
+
69
+ // Transition
70
+ --matcha-toolbar-transition-duration: var(--matcha-duration-fast, 200ms);
71
+ }
72
+
73
+ // ── Container — flex row (1:1 Figma DSV3 15866:92) ────────────────────
74
+ matcha-toolbar {
75
+ display: flex;
76
+ flex-direction: row;
77
+ align-items: center;
78
+ flex-wrap: nowrap;
79
+ gap: var(--matcha-toolbar-gap);
80
+ padding:
81
+ var(--matcha-toolbar-padding-y)
82
+ var(--matcha-toolbar-padding-right)
83
+ var(--matcha-toolbar-padding-y)
84
+ var(--matcha-toolbar-padding-left);
85
+ background: var(--matcha-toolbar-bg);
86
+ border-radius: var(--matcha-toolbar-radius);
87
+ min-height: var(--matcha-toolbar-min-height);
88
+ box-sizing: border-box;
89
+ width: 100%;
90
+
91
+ transition:
92
+ padding var(--matcha-toolbar-transition-duration) ease,
93
+ gap var(--matcha-toolbar-transition-duration) ease,
94
+ box-shadow var(--matcha-toolbar-transition-duration) ease;
95
+
96
+ // ── Layout pattern canon: título CRESCE, empurra resto pra direita ──
97
+ // Regra única e simples: matcha-title é o único flex-grow do toolbar.
98
+ // Ele se expande pra ocupar todo o leftover space, empurrando search/
99
+ // actions/CTA naturalmente pra direita. Sem ml-auto, sem spacer manual.
100
+ //
101
+ // Comportamento:
102
+ // - Title curto ("Igrejas"): cresce até o limite, todo o resto à direita
103
+ // - Title longo ("Configurações de Membros"): cresce até o cap natural,
104
+ // trunca com ellipsis se passar (via matcha-title__text rules abaixo)
105
+ //
106
+ // Consumer NUNCA deve aplicar .ml-auto ou margin: auto em flex children
107
+ // do toolbar — quebra a regra e gera inconsistência visual entre telas.
108
+ > matcha-title {
109
+ flex: 1 1 auto;
110
+ min-width: 0;
111
+ }
112
+
113
+ matcha-title[type="icon"] {
114
+ --matcha-title-fill: var(--matcha-color-text-secondary,
115
+ rgba(getForeground($theme), 0.55));
116
+ }
117
+
118
+ matcha-title .matcha-title__text {
119
+ white-space: nowrap;
120
+ overflow: hidden;
121
+ text-overflow: ellipsis;
122
+ }
123
+
124
+ // Search field tem cap pra não virar "barrão" em wide screens.
125
+ // Figma desktop = 280px. Cap 320px = buffer pra labels longos.
126
+ > matcha-field[type="search"],
127
+ [matcha-toolbar-actions] > matcha-field[type="search"] {
128
+ max-width: var(--matcha-toolbar-search-max-width);
129
+ }
130
+
131
+ // Icon-buttons NUNCA deformam — flex:0 0 auto preserva 1:1 quadrado
132
+ // independente do espaço disponível. Aplica em qualquer profundidade
133
+ // dentro do toolbar (direto ou em [matcha-toolbar-actions]).
134
+ button[matcha-icon-button],
135
+ [matcha-icon-button] {
136
+ flex: 0 0 auto;
137
+ }
138
+
139
+ // Defensiva contra "gap fantasma": custom elements popover (matcha-menu)
140
+ // e seu matcha-panel interno são display:inline default → flex items invisíveis.
141
+ // Dentro do toolbar consumem 12px de column-gap cada um, criando respiro
142
+ // não-intencional entre o último item visível e a borda direita.
143
+ //
144
+ // Solução ideal: consumer move `<matcha-menu>` pra FORA do `<matcha-toolbar>`
145
+ // (referência via template variable continua funcionando). Esta regra é
146
+ // defesa em profundidade pra legacy que ainda tem matcha-menu dentro.
147
+ //
148
+ // display:contents tira o host do layout sem afetar a popover (matcha-panel
149
+ // interno usa position:fixed/absolute via overlay).
150
+ > matcha-menu,
151
+ > matcha-menu > matcha-panel {
152
+ display: contents;
153
+ }
154
+
155
+ // Botão CTA principal também não shrinka (mantém label legível).
156
+ > button[matcha-button],
157
+ > [matcha-button] {
158
+ flex: 0 0 auto;
159
+ }
160
+
161
+ // ── Back-compat: atributos legacy [matcha-toolbar-*] ──────────────────
162
+ // Não são mais ng-content selectors — viram hints de layout via CSS:
163
+ // [matcha-toolbar-actions] → flex inline group com gap (mesmo padding visual)
164
+ // [matcha-toolbar-primary] → fica naturalmente à direita (último child)
165
+ // [matcha-toolbar-title] → idêntico a matcha-title:first-child
166
+ [matcha-toolbar-actions] {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: var(--matcha-toolbar-actions-gap);
170
+ }
171
+
172
+ // ── Layout: stack — flex-wrap + order (1:1 Figma Mobile 15870:84) ────
173
+ // Estratégia: mantém flex-direction:row mas habilita flex-wrap. Search
174
+ // recebe order:99 + flex-basis:100% → wrappa pra row 2 com full-width.
175
+ // Title + actions + CTA continuam na row 1 com fluxo natural.
176
+ //
177
+ // Vantagem vs Grid: zero overlap. Funciona com qualquer combinação de
178
+ // children (search direto OU dentro de actions, CTA direto OU dentro de actions).
179
+ //
180
+ // Aplicado em 2 contextos: [data-layout="stack"] explícito ou auto-stack
181
+ // via media query <768px (a menos que [data-no-auto-stack] esteja setado).
182
+ &[data-layout="stack"] {
183
+ flex-wrap: wrap;
184
+ row-gap: var(--matcha-space-100, 8px);
185
+
186
+ > * {
187
+ margin-left: 0;
188
+ min-width: 0; // permite shrink
189
+ }
190
+
191
+ // Search vai pra row 2 full-width (independente de estar direto ou em actions).
192
+ > matcha-field[type="search"],
193
+ [matcha-toolbar-actions] {
194
+ // Actions div como um todo wrappa pra row 2 se contém search inside
195
+ // (caso de members-list legacy onde search vive dentro do actions).
196
+ // Pra evitar quebra de outros casos, só wrappamos se o consumer
197
+ // declarou estrutura legacy. Default: actions stay row 1.
198
+ }
199
+
200
+ > matcha-field[type="search"] {
201
+ flex: 1 1 100%;
202
+ order: 99;
203
+ max-width: 100%;
204
+ width: 100%;
205
+ }
206
+
207
+ // Title cresce mas com cap pra não empurrar actions pra row 2 sozinho.
208
+ > matcha-title {
209
+ flex: 1 1 auto;
210
+ max-width: 100%;
211
+ }
212
+
213
+ // Actions div + CTA standalone ficam row 1 com fluxo natural.
214
+ > [matcha-toolbar-actions] {
215
+ flex: 0 0 auto;
216
+ }
217
+
218
+ > button[matcha-button],
219
+ > [matcha-button] {
220
+ flex: 0 0 auto;
221
+ }
222
+ }
223
+
224
+ // Auto-stack em mobile (viewport <768px) — sem precisar setar [layout="stack"]
225
+ // manualmente. Consumer pode opt-out via [data-no-auto-stack].
226
+ @media (max-width: 768px) {
227
+ &:not([data-no-auto-stack]) {
228
+ flex-wrap: wrap;
229
+ row-gap: var(--matcha-space-100, 8px);
230
+
231
+ > * {
232
+ margin-left: 0;
233
+ min-width: 0;
234
+ }
235
+
236
+ > matcha-field[type="search"] {
237
+ flex: 1 1 100%;
238
+ order: 99;
239
+ max-width: 100%;
240
+ width: 100%;
241
+ }
242
+
243
+ > matcha-title {
244
+ flex: 1 1 auto;
245
+ max-width: 100%;
246
+ }
247
+
248
+ > [matcha-toolbar-actions] {
249
+ flex: 0 0 auto;
250
+ }
251
+
252
+ > button[matcha-button],
253
+ > [matcha-button] {
254
+ flex: 0 0 auto;
255
+ }
256
+ }
257
+ }
258
+
259
+ // ── Viewport extra-narrow (<480px) — actions também wrappa ───────────
260
+ // Quando tela muito apertada (~iPhone SE 1ª gen, browsers com sidebar
261
+ // dev-tools aberta), até title + actions juntos não cabem. Permite que
262
+ // actions wrappe pra sua própria row 3, mantendo CTA legível.
263
+ @media (max-width: 479px) {
264
+ &:not([data-no-auto-stack]) {
265
+ > [matcha-toolbar-actions] {
266
+ flex: 1 1 100%;
267
+ order: 50; // depois do title (0), antes do search (99)
268
+ justify-content: flex-end;
269
+ }
270
+
271
+ > button[matcha-button],
272
+ > [matcha-button] {
273
+ flex: 1 1 auto;
274
+ order: 60;
275
+ }
276
+ }
277
+ }
278
+
279
+ // ── Size: compact ────────────────────────────────────────────────────
280
+ &[data-size="compact"] {
281
+ padding: var(--matcha-toolbar-padding-y-compact) var(--matcha-toolbar-padding-x-compact);
282
+ min-height: var(--matcha-toolbar-min-height-compact);
283
+ }
284
+
285
+ // ── Size: spacious ───────────────────────────────────────────────────
286
+ &[data-size="spacious"] {
287
+ padding: var(--matcha-toolbar-padding-y-spacious) var(--matcha-toolbar-padding-x-spacious);
288
+ min-height: var(--matcha-toolbar-min-height-spacious);
289
+ }
290
+
291
+ // ── Color variants — accent border-left + bg tint ────────────────────
292
+ // Pattern Material/Polaris status bar. Border 4px na esquerda + bg alpha.
293
+ &[data-color] {
294
+ position: relative;
295
+ overflow: hidden;
296
+
297
+ &::before {
298
+ content: '';
299
+ position: absolute;
300
+ left: 0;
301
+ top: 0;
302
+ bottom: 0;
303
+ width: var(--matcha-space-050, 4px);
304
+ background: var(--matcha-toolbar-accent-color, var(--matcha-color-accent));
305
+ pointer-events: none;
306
+ }
307
+ }
308
+ &[data-color="accent"] { --matcha-toolbar-accent-color: var(--matcha-color-accent); }
309
+ &[data-color="success"] { --matcha-toolbar-accent-color: var(--matcha-color-success); }
310
+ &[data-color="warn"] { --matcha-toolbar-accent-color: var(--matcha-color-warn); }
311
+ &[data-color="danger"] { --matcha-toolbar-accent-color: var(--matcha-color-danger); }
312
+ &[data-color="info"] { --matcha-toolbar-accent-color: var(--matcha-color-info); }
313
+
314
+ // ── Elevation 1-3 (Material-like progressive shadows) ────────────────
315
+ &[data-elevation="1"] { box-shadow: var(--matcha-toolbar-shadow-1); }
316
+ &[data-elevation="2"] { box-shadow: var(--matcha-toolbar-shadow-2); }
317
+ &[data-elevation="3"] { box-shadow: var(--matcha-toolbar-shadow-3); }
318
+
319
+ // ── Bordered — outline 1px sobre flat surface ────────────────────────
320
+ &[data-bordered] {
321
+ border: var(--matcha-toolbar-border-width) solid var(--matcha-toolbar-border-color);
322
+ }
323
+
324
+ // ── Sticky — gruda no topo do scroll container ──────────────────────
325
+ &[data-sticky] {
326
+ position: sticky;
327
+ top: 0;
328
+ z-index: var(--matcha-toolbar-sticky-z);
329
+ }
330
+
331
+ // ── Auto-collapse search em stack mode (CSS-only via :focus-within) ──
332
+ // matcha-field type=search vira icon-button (32x32) por default.
333
+ // Click/focus expande pro tamanho natural (flex:1).
334
+ &[data-collapse-search][data-layout="stack"] {
335
+ [matcha-toolbar-actions] matcha-field,
336
+ > matcha-field {
337
+ flex: 0 0 auto;
338
+ width: var(--matcha-space-800, 32px);
339
+ transition: width var(--matcha-toolbar-transition-duration) ease,
340
+ flex var(--matcha-toolbar-transition-duration) ease;
341
+
342
+ // Foco expande pra row inteira
343
+ &:focus-within {
344
+ flex: 1 1 0;
345
+ width: 100%;
346
+ }
347
+ }
348
+ }
349
+ }
350
+
351
+ // ── Reduced motion ────────────────────────────────────────────────────
352
+ @media (prefers-reduced-motion: reduce) {
353
+ matcha-toolbar {
354
+ transition: none;
355
+ [matcha-toolbar-actions] matcha-field { transition: none; }
356
+ > matcha-field { transition: none; }
357
+ }
358
+ }
359
+ }