@primer/brand-css 0.63.0 → 0.64.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.
@@ -2694,7 +2694,19 @@
2694
2694
  }
2695
2695
 
2696
2696
  /*
2697
- * 13. Border Width
2697
+ * 13. Border Style (must come before width so width can override)
2698
+ */
2699
+ .Box-borderStyle--solid {
2700
+ border-style: solid;
2701
+ border-width: 0; /* Reset all sides so individual side props work correctly */
2702
+ }
2703
+
2704
+ .Box-borderStyle--none {
2705
+ border-style: none;
2706
+ }
2707
+
2708
+ /*
2709
+ * 14. Border Width
2698
2710
  */
2699
2711
  .Box-borderWidth--thin {
2700
2712
  border-width: var(--brand-borderWidth-thin);
@@ -2709,63 +2721,274 @@
2709
2721
  }
2710
2722
 
2711
2723
  .Box-borderBlockStartWidth--thin {
2712
- border-width: 0;
2713
2724
  border-block-start-width: var(--brand-borderWidth-thin);
2714
2725
  }
2715
2726
 
2716
2727
  .Box-borderBlockStartWidth--thick {
2717
- border-width: 0;
2718
2728
  border-block-start-width: var(--brand-borderWidth-thick);
2719
2729
  }
2720
2730
 
2721
2731
  .Box-borderBlockStartWidth--thicker {
2722
- border-width: 0;
2723
2732
  border-block-start-width: var(--brand-borderWidth-thicker);
2724
2733
  }
2725
2734
 
2726
2735
  .Box-borderInlineEndWidth--thin {
2727
- border-width: 0;
2728
- border-right-width: var(--brand-borderWidth-thin);
2736
+ border-inline-end-width: var(--brand-borderWidth-thin);
2729
2737
  }
2730
2738
 
2731
2739
  .Box-borderInlineEndWidth--thick {
2732
- border-width: 0;
2733
- border-right-width: var(--brand-borderWidth-thick);
2740
+ border-inline-end-width: var(--brand-borderWidth-thick);
2734
2741
  }
2735
2742
 
2736
2743
  .Box-borderInlineEndWidth--thicker {
2737
- border-width: 0;
2738
- border-right-width: var(--brand-borderWidth-thicker);
2744
+ border-inline-end-width: var(--brand-borderWidth-thicker);
2739
2745
  }
2740
2746
 
2741
2747
  .Box-borderBlockEndWidth--thin {
2742
- border-width: 0;
2743
- border-bottom-width: var(--brand-borderWidth-thin);
2748
+ border-block-end-width: var(--brand-borderWidth-thin);
2744
2749
  }
2745
2750
 
2746
2751
  .Box-borderBlockEndWidth--thick {
2747
- border-width: 0;
2748
- border-bottom-width: var(--brand-borderWidth-thick);
2752
+ border-block-end-width: var(--brand-borderWidth-thick);
2749
2753
  }
2750
2754
 
2751
2755
  .Box-borderBlockEndWidth--thicker {
2752
- border-width: 0;
2753
- border-bottom-width: var(--brand-borderWidth-thicker);
2756
+ border-block-end-width: var(--brand-borderWidth-thicker);
2754
2757
  }
2755
2758
 
2756
2759
  .Box-borderInlineStartWidth--thin {
2757
- border-width: 0;
2758
- border-left-width: var(--brand-borderWidth-thin);
2760
+ border-inline-start-width: var(--brand-borderWidth-thin);
2759
2761
  }
2760
2762
 
2761
2763
  .Box-borderInlineStartWidth--thick {
2762
- border-width: 0;
2763
- border-left-width: var(--brand-borderWidth-thick);
2764
+ border-inline-start-width: var(--brand-borderWidth-thick);
2764
2765
  }
2765
2766
 
2766
2767
  .Box-borderInlineStartWidth--thicker {
2768
+ border-inline-start-width: var(--brand-borderWidth-thicker);
2769
+ }
2770
+
2771
+ /* Border width: none options */
2772
+ .Box-borderWidth--none {
2767
2773
  border-width: 0;
2768
- border-left-width: var(--brand-borderWidth-thicker);
2774
+ }
2775
+
2776
+ .Box-borderBlockStartWidth--none {
2777
+ border-block-start-width: 0;
2778
+ }
2779
+
2780
+ .Box-borderInlineEndWidth--none {
2781
+ border-inline-end-width: 0;
2782
+ }
2783
+
2784
+ .Box-borderBlockEndWidth--none {
2785
+ border-block-end-width: 0;
2786
+ }
2787
+
2788
+ .Box-borderInlineStartWidth--none {
2789
+ border-inline-start-width: 0;
2790
+ }
2791
+
2792
+ /* Responsive border width: narrow (mobile-first, no media query) */
2793
+ .Box-narrow-borderWidth--none {
2794
+ border-width: 0;
2795
+ }
2796
+ .Box-narrow-borderWidth--thin {
2797
+ border-width: var(--brand-borderWidth-thin);
2798
+ }
2799
+ .Box-narrow-borderWidth--thick {
2800
+ border-width: var(--brand-borderWidth-thick);
2801
+ }
2802
+ .Box-narrow-borderWidth--thicker {
2803
+ border-width: var(--brand-borderWidth-thicker);
2804
+ }
2805
+
2806
+ .Box-narrow-borderBlockStartWidth--none {
2807
+ border-block-start-width: 0;
2808
+ }
2809
+ .Box-narrow-borderBlockStartWidth--thin {
2810
+ border-block-start-width: var(--brand-borderWidth-thin);
2811
+ }
2812
+ .Box-narrow-borderBlockStartWidth--thick {
2813
+ border-block-start-width: var(--brand-borderWidth-thick);
2814
+ }
2815
+ .Box-narrow-borderBlockStartWidth--thicker {
2816
+ border-block-start-width: var(--brand-borderWidth-thicker);
2817
+ }
2818
+
2819
+ .Box-narrow-borderInlineEndWidth--none {
2820
+ border-inline-end-width: 0;
2821
+ }
2822
+ .Box-narrow-borderInlineEndWidth--thin {
2823
+ border-inline-end-width: var(--brand-borderWidth-thin);
2824
+ }
2825
+ .Box-narrow-borderInlineEndWidth--thick {
2826
+ border-inline-end-width: var(--brand-borderWidth-thick);
2827
+ }
2828
+ .Box-narrow-borderInlineEndWidth--thicker {
2829
+ border-inline-end-width: var(--brand-borderWidth-thicker);
2830
+ }
2831
+
2832
+ .Box-narrow-borderBlockEndWidth--none {
2833
+ border-block-end-width: 0;
2834
+ }
2835
+ .Box-narrow-borderBlockEndWidth--thin {
2836
+ border-block-end-width: var(--brand-borderWidth-thin);
2837
+ }
2838
+ .Box-narrow-borderBlockEndWidth--thick {
2839
+ border-block-end-width: var(--brand-borderWidth-thick);
2840
+ }
2841
+ .Box-narrow-borderBlockEndWidth--thicker {
2842
+ border-block-end-width: var(--brand-borderWidth-thicker);
2843
+ }
2844
+
2845
+ .Box-narrow-borderInlineStartWidth--none {
2846
+ border-inline-start-width: 0;
2847
+ }
2848
+ .Box-narrow-borderInlineStartWidth--thin {
2849
+ border-inline-start-width: var(--brand-borderWidth-thin);
2850
+ }
2851
+ .Box-narrow-borderInlineStartWidth--thick {
2852
+ border-inline-start-width: var(--brand-borderWidth-thick);
2853
+ }
2854
+ .Box-narrow-borderInlineStartWidth--thicker {
2855
+ border-inline-start-width: var(--brand-borderWidth-thicker);
2856
+ }
2857
+
2858
+ /* Responsive border width: regular (tablet+) */
2859
+ @media screen and (min-width: 48rem) {
2860
+ .Box-regular-borderWidth--none {
2861
+ border-width: 0;
2862
+ }
2863
+ .Box-regular-borderWidth--thin {
2864
+ border-width: var(--brand-borderWidth-thin);
2865
+ }
2866
+ .Box-regular-borderWidth--thick {
2867
+ border-width: var(--brand-borderWidth-thick);
2868
+ }
2869
+ .Box-regular-borderWidth--thicker {
2870
+ border-width: var(--brand-borderWidth-thicker);
2871
+ }
2872
+
2873
+ .Box-regular-borderBlockStartWidth--none {
2874
+ border-block-start-width: 0;
2875
+ }
2876
+ .Box-regular-borderBlockStartWidth--thin {
2877
+ border-block-start-width: var(--brand-borderWidth-thin);
2878
+ }
2879
+ .Box-regular-borderBlockStartWidth--thick {
2880
+ border-block-start-width: var(--brand-borderWidth-thick);
2881
+ }
2882
+ .Box-regular-borderBlockStartWidth--thicker {
2883
+ border-block-start-width: var(--brand-borderWidth-thicker);
2884
+ }
2885
+
2886
+ .Box-regular-borderInlineEndWidth--none {
2887
+ border-inline-end-width: 0;
2888
+ }
2889
+ .Box-regular-borderInlineEndWidth--thin {
2890
+ border-inline-end-width: var(--brand-borderWidth-thin);
2891
+ }
2892
+ .Box-regular-borderInlineEndWidth--thick {
2893
+ border-inline-end-width: var(--brand-borderWidth-thick);
2894
+ }
2895
+ .Box-regular-borderInlineEndWidth--thicker {
2896
+ border-inline-end-width: var(--brand-borderWidth-thicker);
2897
+ }
2898
+
2899
+ .Box-regular-borderBlockEndWidth--none {
2900
+ border-block-end-width: 0;
2901
+ }
2902
+ .Box-regular-borderBlockEndWidth--thin {
2903
+ border-block-end-width: var(--brand-borderWidth-thin);
2904
+ }
2905
+ .Box-regular-borderBlockEndWidth--thick {
2906
+ border-block-end-width: var(--brand-borderWidth-thick);
2907
+ }
2908
+ .Box-regular-borderBlockEndWidth--thicker {
2909
+ border-block-end-width: var(--brand-borderWidth-thicker);
2910
+ }
2911
+
2912
+ .Box-regular-borderInlineStartWidth--none {
2913
+ border-inline-start-width: 0;
2914
+ }
2915
+ .Box-regular-borderInlineStartWidth--thin {
2916
+ border-inline-start-width: var(--brand-borderWidth-thin);
2917
+ }
2918
+ .Box-regular-borderInlineStartWidth--thick {
2919
+ border-inline-start-width: var(--brand-borderWidth-thick);
2920
+ }
2921
+ .Box-regular-borderInlineStartWidth--thicker {
2922
+ border-inline-start-width: var(--brand-borderWidth-thicker);
2923
+ }
2924
+ }
2925
+
2926
+ /* Responsive border width: wide (desktop+) */
2927
+ @media screen and (min-width: 64rem) {
2928
+ .Box-wide-borderWidth--none {
2929
+ border-width: 0;
2930
+ }
2931
+ .Box-wide-borderWidth--thin {
2932
+ border-width: var(--brand-borderWidth-thin);
2933
+ }
2934
+ .Box-wide-borderWidth--thick {
2935
+ border-width: var(--brand-borderWidth-thick);
2936
+ }
2937
+ .Box-wide-borderWidth--thicker {
2938
+ border-width: var(--brand-borderWidth-thicker);
2939
+ }
2940
+
2941
+ .Box-wide-borderBlockStartWidth--none {
2942
+ border-block-start-width: 0;
2943
+ }
2944
+ .Box-wide-borderBlockStartWidth--thin {
2945
+ border-block-start-width: var(--brand-borderWidth-thin);
2946
+ }
2947
+ .Box-wide-borderBlockStartWidth--thick {
2948
+ border-block-start-width: var(--brand-borderWidth-thick);
2949
+ }
2950
+ .Box-wide-borderBlockStartWidth--thicker {
2951
+ border-block-start-width: var(--brand-borderWidth-thicker);
2952
+ }
2953
+
2954
+ .Box-wide-borderInlineEndWidth--none {
2955
+ border-inline-end-width: 0;
2956
+ }
2957
+ .Box-wide-borderInlineEndWidth--thin {
2958
+ border-inline-end-width: var(--brand-borderWidth-thin);
2959
+ }
2960
+ .Box-wide-borderInlineEndWidth--thick {
2961
+ border-inline-end-width: var(--brand-borderWidth-thick);
2962
+ }
2963
+ .Box-wide-borderInlineEndWidth--thicker {
2964
+ border-inline-end-width: var(--brand-borderWidth-thicker);
2965
+ }
2966
+
2967
+ .Box-wide-borderBlockEndWidth--none {
2968
+ border-block-end-width: 0;
2969
+ }
2970
+ .Box-wide-borderBlockEndWidth--thin {
2971
+ border-block-end-width: var(--brand-borderWidth-thin);
2972
+ }
2973
+ .Box-wide-borderBlockEndWidth--thick {
2974
+ border-block-end-width: var(--brand-borderWidth-thick);
2975
+ }
2976
+ .Box-wide-borderBlockEndWidth--thicker {
2977
+ border-block-end-width: var(--brand-borderWidth-thicker);
2978
+ }
2979
+
2980
+ .Box-wide-borderInlineStartWidth--none {
2981
+ border-inline-start-width: 0;
2982
+ }
2983
+ .Box-wide-borderInlineStartWidth--thin {
2984
+ border-inline-start-width: var(--brand-borderWidth-thin);
2985
+ }
2986
+ .Box-wide-borderInlineStartWidth--thick {
2987
+ border-inline-start-width: var(--brand-borderWidth-thick);
2988
+ }
2989
+ .Box-wide-borderInlineStartWidth--thicker {
2990
+ border-inline-start-width: var(--brand-borderWidth-thicker);
2991
+ }
2769
2992
  }
2770
2993
 
2771
2994
  /*
@@ -2782,14 +3005,3 @@
2782
3005
  .Box-borderColor--subtle {
2783
3006
  border-color: var(--brand-color-border-subtle);
2784
3007
  }
2785
-
2786
- /*
2787
- * 15. Border Style
2788
- */
2789
- .Box-borderStyle--solid {
2790
- border-style: solid;
2791
- }
2792
-
2793
- .Box-borderStyle--none {
2794
- border-style: none;
2795
- }
@@ -42,6 +42,32 @@
42
42
  justify-items: center;
43
43
  }
44
44
 
45
+ /** Block end image position option */
46
+ .Card--imagePos-block-end {
47
+ grid-template-areas:
48
+ 'icon icon'
49
+ 'label label'
50
+ 'heading heading'
51
+ 'description description'
52
+ 'action action'
53
+ 'image image';
54
+ }
55
+
56
+ .Card--align-center .Card--imagePos-block-end {
57
+ grid-template-areas:
58
+ 'icon'
59
+ 'label'
60
+ 'heading'
61
+ 'description'
62
+ 'action'
63
+ 'image';
64
+ }
65
+
66
+ .Card--imagePos-block-end .Card__image {
67
+ margin-bottom: 0;
68
+ margin-top: var(--base-size-28);
69
+ }
70
+
45
71
  .Card--maxWidth {
46
72
  max-width: var(--brand-Card-maxWidth);
47
73
  }
@@ -54,6 +80,10 @@
54
80
  padding: 0;
55
81
  }
56
82
 
83
+ .Card--align-center .Card--variant-minimal {
84
+ padding: 0;
85
+ }
86
+
57
87
  .Card--variant-default,
58
88
  .Card--variant-torchlight.Card--colorMode-light {
59
89
  background-color: var(--brand-Card-background-default);
@@ -1,9 +1,12 @@
1
1
  .Hero {
2
- padding: var(--brand-Hero-narrow-padding);
3
2
  display: flex;
4
3
  flex-direction: column;
5
4
  }
6
5
 
6
+ .Hero--variant-default {
7
+ padding: var(--brand-Hero-narrow-padding);
8
+ }
9
+
7
10
  .Hero--align-start {
8
11
  align-items: flex-start;
9
12
  text-align: left;
@@ -19,12 +22,31 @@
19
22
  --brand-Grid-spacing-margin: 0;
20
23
  }
21
24
 
25
+ .Hero-grid--contained {
26
+ width: 100%;
27
+ max-width: 1280px;
28
+ margin-inline: auto;
29
+ padding: var(--base-size-32);
30
+ background-color: var(--brand-Hero-bgColor-gridlineGridInner); /* Unset by default - users can override if needed */
31
+ }
32
+
33
+ /* Prevents double-borders. We only apply the inline borders when the parent container is wide enough to show the full width. */
34
+ @container (min-width: 1280px) {
35
+ .Hero-grid--contained {
36
+ border-inline: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
37
+ }
38
+ }
39
+
22
40
  .Hero-grid--block-end,
23
41
  .Hero-grid--inline-end {
24
42
  --brand-Grid-spacing-row: var(--base-size-40);
25
43
  }
26
44
 
27
- @media screen and (min-width: 48rem) {
45
+ @media screen and (min-width: 63.25rem) {
46
+ .Hero-grid--contained {
47
+ padding: var(--base-size-64);
48
+ }
49
+
28
50
  .Hero-grid--block-end {
29
51
  --brand-Grid-spacing-row: var(--base-size-80);
30
52
  }
@@ -41,18 +63,192 @@
41
63
  }
42
64
 
43
65
  .Hero-image {
44
- border-radius: var(--brand-borderRadius-large);
66
+ border-radius: var(--brand-borderRadius-medium);
67
+ width: 100%;
68
+ }
69
+
70
+ .Hero-mediaContainer {
71
+ width: 100%;
72
+ height: 100%;
73
+ display: flex;
74
+ flex: 1;
75
+ }
76
+
77
+ .Hero-imageContainer--bg-subtle {
78
+ background-color: var(--brand-color-canvas-subtle);
79
+ padding: var(--base-size-32) var(--base-size-32) 0;
80
+ }
81
+
82
+ .Hero-imageContainer--inline-bg-padded {
83
+ padding: var(--base-size-32);
84
+ background-color: var(--brand-color-canvas-subtle);
85
+ }
86
+
87
+ .Hero-imageWrapper {
88
+ width: 100%;
89
+ display: flex;
90
+ justify-content: center;
91
+ }
92
+
93
+ .Hero-imageWrapper--bg-subtle {
94
+ border-block: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
95
+ background-color: var(--brand-color-canvas-subtle);
96
+ padding: var(--base-size-32) var(--base-size-32) 0;
97
+ }
98
+
99
+ .Hero-imageContainer--inline-bordered {
100
+ background-color: var(--brand-color-canvas-subtle);
101
+ display: flex;
102
+ align-items: stretch;
103
+ }
104
+
105
+ @media screen and (min-width: 63.25rem) {
106
+ .Hero-imageContainer--inline-bordered {
107
+ min-height: calc(600px - var(--base-size-24));
108
+ }
109
+
110
+ .Hero-imageWrapper--bg-subtle {
111
+ padding: var(--base-size-64) var(--base-size-64) 0;
112
+ }
113
+
114
+ .Hero-imageContainer--inline-bg-padded {
115
+ padding: var(--base-size-64);
116
+ }
117
+ }
118
+
119
+ .Hero--variant-gridline {
120
+ container-type: inline-size;
121
+ width: 100%;
122
+ }
123
+
124
+ /* Shared media styles for images and videos */
125
+ .Hero--variant-gridline .Hero-media {
126
+ max-width: 1176px;
127
+ margin-inline: auto;
128
+ display: block;
129
+ overflow: hidden;
130
+ }
131
+
132
+ .Hero--variant-gridline .Hero-media--pos-block-end {
133
+ border-radius: var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0;
134
+ }
135
+
136
+ /* Applied directly to video/iframe elements for block-end position */
137
+ .Hero-media-item--block-end {
138
+ border-radius: var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0;
139
+ }
140
+
141
+ .Hero--variant-gridline .Hero-imageWrapper {
142
+ border-block: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
143
+ background-color: var(--brand-color-canvas-subtle);
144
+ width: 100%;
145
+ }
146
+
147
+ .Hero--variant-gridline .Hero-imageWrapper-inner {
148
+ width: 100%;
149
+ max-width: 1280px;
150
+ margin-inline: auto;
151
+ padding: var(--base-size-32) var(--base-size-32) 0;
152
+ }
153
+
154
+ @container (min-width: 1280px) {
155
+ .Hero--variant-gridline .Hero-imageWrapper-inner--with-gridline {
156
+ border-inline: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
157
+ }
158
+ }
159
+
160
+ .Hero--variant-gridline .Hero-imageWrapper-inner--padded {
161
+ padding: var(--base-size-32);
162
+ }
163
+
164
+ .Hero-media--pos-block-end-padded {
165
+ border-radius: var(--brand-borderRadius-medium);
166
+ }
167
+
168
+ @media screen and (min-width: 63.25rem) {
169
+ .Hero--variant-gridline .Hero-imageWrapper-inner {
170
+ padding: var(--base-size-64) var(--base-size-64) 0;
171
+ }
172
+
173
+ .Hero--variant-gridline .Hero-imageWrapper-inner--padded {
174
+ padding: var(--base-size-64);
175
+ }
176
+ }
177
+
178
+ /* GridLine variant with inline (side-by-side) layout */
179
+ .Hero-grid--bordered-inline {
180
+ width: 100%;
181
+ max-width: 1280px;
182
+ margin-inline: auto;
183
+ }
184
+
185
+ @media screen and (min-width: 63.25rem) {
186
+ .Hero-grid--bordered-inline {
187
+ min-height: 440px;
188
+ }
189
+ }
190
+
191
+ @container (min-width: 1280px) {
192
+ .Hero-grid--bordered-inline {
193
+ border-inline: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
194
+ }
195
+ }
196
+
197
+ .Hero--variant-gridline.Hero--image-pos-inline {
198
+ border-block-end: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
199
+ }
200
+
201
+ /* Text column styling for gridline inline positions */
202
+ .Hero-contentColumn--bordered-inline {
203
+ padding: var(--base-size-32);
204
+ display: flex;
205
+ flex-direction: column;
206
+ justify-content: center;
207
+ }
208
+
209
+ @media screen and (min-width: 63.25rem) {
210
+ .Hero-contentColumn--bordered-inline {
211
+ padding: var(--base-size-64);
212
+ }
213
+ }
214
+
215
+ /* Media styling for gridline inline positions */
216
+
217
+ /* Edge-to-edge inline media (no padding) - remove border radius */
218
+ .Hero--variant-gridline .Hero-media--pos-inline:not(.Hero-media--pos-inline-padded) {
219
+ border-radius: 0;
220
+ }
221
+
222
+ /* Applied directly to video/iframe elements for inline position */
223
+ .Hero-media-item--inline {
224
+ border-radius: 0;
225
+ }
226
+
227
+ /* Padded inline media - constrain size and center */
228
+ .Hero--variant-gridline .Hero-media--pos-inline-padded {
229
+ max-width: 100%;
230
+ height: auto;
231
+ align-self: center;
232
+ }
233
+
234
+ /* Image column styling now handled by .Hero-imageContainer--inline-bordered */
235
+
236
+ .Hero-video {
45
237
  width: 100%;
46
238
  }
47
239
 
48
- .Hero-video video,
49
- .Hero-video iframe {
240
+ /* Base styles for video/iframe media elements */
241
+ .Hero-media-item {
50
242
  width: 100%;
51
243
  border-radius: var(--brand-borderRadius-large);
52
244
  }
53
245
 
54
246
  .Hero-label {
247
+ text-transform: uppercase;
248
+ letter-spacing: 1px;
55
249
  margin-block-end: var(--base-size-24);
250
+ display: flex;
251
+ align-items: center;
56
252
  }
57
253
 
58
254
  .Hero-heading {
@@ -64,11 +260,20 @@
64
260
  max-width: unset;
65
261
  }
66
262
 
263
+ .Hero-text-column--inline-gridline {
264
+ height: 100%;
265
+ }
266
+
67
267
  .Hero-description {
68
268
  margin: var(--base-size-24) 0 0;
69
269
  max-width: 600px;
70
270
  }
71
271
 
272
+ .Hero--variant-inline-gridline .Hero-description {
273
+ padding-block-start: var(--base-size-24);
274
+ margin-block-start: auto;
275
+ }
276
+
72
277
  .Hero-actions {
73
278
  margin-block-start: var(--base-size-32);
74
279
  display: flex;
@@ -77,6 +282,11 @@
77
282
  gap: var(--base-size-8) var(--base-size-16);
78
283
  }
79
284
 
285
+ .Hero--variant-gridline-expressive .Hero-actions {
286
+ align-items: stretch;
287
+ gap: var(--base-size-8) var(--base-size-12);
288
+ }
289
+
80
290
  .Hero-trailing {
81
291
  margin-block-start: var(--base-size-32);
82
292
  }
@@ -87,7 +297,177 @@
87
297
 
88
298
  /* Small breakpoint and up */
89
299
  @media screen and (min-width: 34rem) {
90
- .Hero {
300
+ .Hero--variant-default {
91
301
  padding: var(--brand-Hero-regular-padding);
92
302
  }
93
303
  }
304
+
305
+ .Hero-video-poster-button {
306
+ padding: 0;
307
+ border: none;
308
+ background: none;
309
+ cursor: pointer;
310
+ display: block;
311
+ height: 100%;
312
+ position: relative;
313
+ line-height: 0;
314
+ font-size: 0;
315
+ width: 100%;
316
+ }
317
+
318
+ .Hero-video-poster-image {
319
+ display: block;
320
+ height: auto;
321
+ width: 100%;
322
+ }
323
+
324
+ .Hero-video-poster-icon {
325
+ position: absolute;
326
+ top: 50%;
327
+ left: 50%;
328
+ transform: translate(-50%, -50%);
329
+ width: var(--base-size-96);
330
+ height: var(--base-size-96);
331
+ z-index: 1;
332
+ color: var(--base-color-scale-white-0);
333
+ }
334
+
335
+ .Hero-video-poster-header {
336
+ position: absolute;
337
+ inset: 0 0 auto;
338
+ padding: var(--base-size-16) var(--base-size-24);
339
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 60%, rgba(0, 0, 0, 0));
340
+ display: flex;
341
+ align-items: center;
342
+ gap: var(--base-size-16);
343
+ height: var(--base-size-80);
344
+ }
345
+
346
+ .Hero-video-header-poster-icon,
347
+ .Hero-video-poster-text {
348
+ color: var(--base-color-scale-white-0);
349
+ }
350
+
351
+ /* ========================================
352
+ Gridline-Expressive Variant
353
+ ======================================== */
354
+
355
+ .Hero--variant-gridline-expressive {
356
+ container-type: inline-size;
357
+ width: 100%;
358
+ }
359
+
360
+ /* Grid container for expressive variant */
361
+ .Hero-grid--expressive {
362
+ width: 100%;
363
+ max-width: 1280px;
364
+ margin-inline: auto;
365
+ gap: 0;
366
+ --brand-Grid-spacing-row: 0;
367
+ }
368
+
369
+ @container (min-width: 1280px) {
370
+ .Hero-grid--expressive {
371
+ border-inline: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
372
+ }
373
+ }
374
+
375
+ /* Header column (eyebrow, heading) */
376
+ .Hero-expressive-header-column {
377
+ padding: var(--base-size-32);
378
+ padding-block-end: var(--base-size-24);
379
+ border-block-end: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
380
+ display: flex;
381
+ align-items: center;
382
+ }
383
+
384
+ /* Body column (description, actions, trailing) */
385
+ .Hero-expressive-body-column {
386
+ padding: var(--base-size-32);
387
+ padding-block-start: var(--base-size-24);
388
+ }
389
+
390
+ .Hero--variant-gridline-expressive .Hero-description {
391
+ margin-block-start: 0;
392
+ }
393
+
394
+ .Hero--variant-gridline-expressive .Hero-actions {
395
+ margin-block-start: var(--base-size-24);
396
+ }
397
+
398
+ .Hero--variant-gridline-expressive .Hero-trailing {
399
+ margin-block-start: var(--base-size-24);
400
+ }
401
+
402
+ /* Desktop: Side-by-side layout with vertical divider */
403
+ @media screen and (min-width: 63.25rem) {
404
+ .Hero-expressive-header-column {
405
+ padding: var(--base-size-64);
406
+ padding-inline-end: var(--base-size-64);
407
+ border-block-end: none;
408
+ border-inline-end: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
409
+ }
410
+
411
+ .Hero-expressive-body-column {
412
+ padding: var(--base-size-64);
413
+ padding-inline-start: var(--base-size-64);
414
+ display: flex;
415
+ flex-direction: column;
416
+ justify-content: flex-end;
417
+ }
418
+
419
+ .Hero--variant-gridline-expressive .Hero-actions {
420
+ margin-block-start: var(--base-size-32);
421
+ }
422
+
423
+ .Hero--variant-gridline-expressive .Hero-trailing {
424
+ margin-block-start: var(--base-size-32);
425
+ }
426
+ }
427
+
428
+ /* Media wrapper styles for gridline-expressive (same as gridline) */
429
+ .Hero--variant-gridline-expressive .Hero-imageWrapper {
430
+ border-block: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
431
+ background-color: var(--brand-color-canvas-subtle);
432
+ width: 100%;
433
+ }
434
+
435
+ .Hero--variant-gridline-expressive .Hero-imageWrapper-inner {
436
+ width: 100%;
437
+ max-width: 1280px;
438
+ margin-inline: auto;
439
+ padding: var(--base-size-32) var(--base-size-32) 0;
440
+ }
441
+
442
+ @container (min-width: 1280px) {
443
+ .Hero--variant-gridline-expressive .Hero-imageWrapper-inner--with-gridline {
444
+ border-inline: var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);
445
+ }
446
+ }
447
+
448
+ .Hero--variant-gridline-expressive .Hero-imageWrapper-inner--padded {
449
+ padding: var(--base-size-32);
450
+ }
451
+
452
+ @media screen and (min-width: 63.25rem) {
453
+ .Hero--variant-gridline-expressive .Hero-imageWrapper-inner {
454
+ padding: var(--base-size-64) var(--base-size-64) 0;
455
+ }
456
+
457
+ .Hero--variant-gridline-expressive .Hero-imageWrapper-inner--padded {
458
+ padding: var(--base-size-64);
459
+ }
460
+ }
461
+
462
+ /* Shared media styles for gridline-expressive */
463
+ .Hero--variant-gridline-expressive .Hero-media {
464
+ max-width: 1176px;
465
+ margin-inline: auto;
466
+ display: block;
467
+ overflow: hidden;
468
+ }
469
+
470
+ .Hero--variant-gridline-expressive .Hero-media--pos-block-end,
471
+ .Hero--variant-gridline-expressive .Hero-image:not(.Hero-media--pos-block-end-padded) {
472
+ border-radius: var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0;
473
+ }
@@ -0,0 +1,40 @@
1
+ .TextCursorAnimation {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ }
5
+
6
+ .TextCursorAnimation-inner {
7
+ position: relative;
8
+ display: inline-flex;
9
+ align-items: center;
10
+ }
11
+
12
+ .TextCursorAnimation-text {
13
+ text-transform: uppercase;
14
+ font-weight: var(--brand-text-weight-500);
15
+ clip-path: inset(0 calc((1 - var(--brand-TextCursorAnimation-reveal-progress, 1)) * 100%) 0 0);
16
+ white-space: pre;
17
+ }
18
+
19
+ .TextCursorAnimation-cursor {
20
+ position: absolute;
21
+ left: calc((var(--brand-TextCursorAnimation-reveal-progress, 1) * 100%) + var(--base-size-6));
22
+ top: calc((1lh - 0.3cap) / 2 - 0.5cap);
23
+ width: var(--base-size-8);
24
+ height: 1cap;
25
+ background-color: color-mix(
26
+ in srgb,
27
+ var(--brand-color-canvas-subtle) calc((1 - var(--brand-TextCursorAnimation-cursor-progress, 0)) * 100%),
28
+ var(--brand-color-accent-primary) calc(var(--brand-TextCursorAnimation-cursor-progress, 0) * 100%)
29
+ );
30
+ }
31
+
32
+ @media (prefers-reduced-motion: reduce) {
33
+ .TextCursorAnimation-cursor {
34
+ display: none;
35
+ }
36
+
37
+ .TextCursorAnimation-text {
38
+ clip-path: none;
39
+ }
40
+ }
@@ -296,6 +296,7 @@
296
296
  background: transparent;
297
297
  position: absolute;
298
298
  top: 0;
299
+ left: 0;
299
300
  opacity: 0;
300
301
  }
301
302
 
@@ -327,6 +328,7 @@
327
328
  position: absolute;
328
329
  height: var(--brand-VideoPlayer-range-height);
329
330
  top: 0;
331
+ left: 0;
330
332
  }
331
333
 
332
334
  .VideoPlayer__rangeProgress::-webkit-progress-bar {
@@ -191,6 +191,21 @@
191
191
  transform: scaleY(1);
192
192
  }
193
193
 
194
+ /**
195
+ * Wipe in up
196
+ */
197
+ .Animation--reveal-in-up {
198
+ transform: translateY(100%);
199
+ clip-path: inset(-100% 0 100% 0);
200
+ transition: transform var(--brand-animation-duration-default) var(--brand-animation-easing-default),
201
+ clip-path var(--brand-animation-duration-default) var(--brand-animation-easing-default);
202
+ }
203
+
204
+ .Animation--reveal-in-up.Animation--active {
205
+ transform: translateY(0);
206
+ clip-path: inset(0 0 -0.2em 0); /* includs some offset to account for descenders */
207
+ }
208
+
194
209
  /* Remove all animations, transitions and smooth scroll for people that prefer not to see them */
195
210
  @media (prefers-reduced-motion: reduce) {
196
211
  .Animation,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/brand-css",
3
- "version": "0.63.0",
3
+ "version": "0.64.0",
4
4
  "description": "CSS stylesheets for Primer Brand components",
5
5
  "keywords": [
6
6
  "primer",