@gemboss/website-ui 0.9.0 → 0.11.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.
- package/CHANGELOG.md +109 -0
- package/README.md +2 -2
- package/bin/lib/check.mjs +6 -2
- package/css/base.css +2 -1
- package/css/effects.css +1 -1
- package/css/footer.css +74 -58
- package/css/header.css +347 -115
- package/css/tokens.css +24 -5
- package/demo/article.html +58 -70
- package/demo/blog.html +58 -70
- package/demo/brand-profiles.html +57 -27
- package/demo/footer.html +59 -71
- package/demo/forms.html +58 -70
- package/demo/header.html +58 -108
- package/demo/index.html +58 -70
- package/demo/spotlight.html +58 -71
- package/demo/theme-example.html +1 -1
- package/docs/components.md +31 -21
- package/docs/markup-contract.md +53 -22
- package/js/website.js +285 -42
- package/js/website.mjs +319 -47
- package/package.json +1 -1
- package/system.json +23 -8
- package/templates/footer.html +11 -9
- package/templates/header.html +47 -24
- package/templates/page.html +54 -20
- package/website.css +449 -181
- package/website.min.css +1 -1
package/website.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @gemboss/website-ui 0.
|
|
1
|
+
/*! @gemboss/website-ui 0.11.0 | generated by scripts/build.mjs from the files in css/. Edit those and not this file */
|
|
2
2
|
/* @gemboss/website-ui tokens. GENERATED from system.json by scripts/build.mjs: do not edit by hand. */
|
|
3
3
|
:root {
|
|
4
4
|
color-scheme: light;
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
--gw-space-120: 120px;
|
|
43
43
|
--gw-space-section: clamp(56px, 38px + 5vw, 110px);
|
|
44
44
|
--gw-radius-0: 0;
|
|
45
|
+
--gw-radius-2: 2px;
|
|
45
46
|
--gw-radius-4: 4px;
|
|
46
47
|
--gw-radius-6: 6px;
|
|
47
48
|
--gw-radius-8: 8px;
|
|
@@ -58,6 +59,7 @@
|
|
|
58
59
|
--gw-shadow: 0 1px 2px rgba(31,30,29,.04), 0 2px 6px rgba(31,30,29,.06);
|
|
59
60
|
--gw-shadow-sm: 0 1px 2px rgba(31,30,29,.04);
|
|
60
61
|
--gw-shadow-raised: 0 4px 16px rgba(31,30,29,.10);
|
|
62
|
+
--gw-shadow-lift: 0 16px 32px -12px rgba(4,5,26,.72), 0 4px 8px -2px rgba(4,5,26,.36);
|
|
61
63
|
--gw-wrap: 1120px;
|
|
62
64
|
--gw-wrap-narrow: 780px;
|
|
63
65
|
--gw-gutter: 22px;
|
|
@@ -81,6 +83,12 @@
|
|
|
81
83
|
--gw-wash-violet: #7c8af7;
|
|
82
84
|
--gw-wash-sky: #43b0ff;
|
|
83
85
|
--gw-wash-mint: #1fcf9f;
|
|
86
|
+
--gw-stage-glow: rgba(139, 147, 255, 0.5);
|
|
87
|
+
--gw-stage-glow-2: rgba(86, 97, 245, 0.34);
|
|
88
|
+
--gw-stage-top: #1d2058;
|
|
89
|
+
--gw-stage-bottom: #0d0f2e;
|
|
90
|
+
--gw-stage-dot: rgba(255, 255, 255, 0.1);
|
|
91
|
+
--gw-stage-ink: #ffffff;
|
|
84
92
|
/* accent primitives: the only colours a brand overrides (docs/theming.md) */
|
|
85
93
|
--gw-accent-light: #5661f5;
|
|
86
94
|
--gw-accent-strong-light: #3a44de;
|
|
@@ -95,7 +103,7 @@
|
|
|
95
103
|
--gw-surface: #ffffff;
|
|
96
104
|
--gw-ink: #1b1c1e;
|
|
97
105
|
--gw-ink-2: #3b3d42;
|
|
98
|
-
--gw-muted: #
|
|
106
|
+
--gw-muted: #6a6d73;
|
|
99
107
|
--gw-line: #e5e7ea;
|
|
100
108
|
--gw-line-strong: #d5d8dd;
|
|
101
109
|
--gw-line-control: #85888e;
|
|
@@ -117,6 +125,7 @@
|
|
|
117
125
|
--gw-night-2: #141722;
|
|
118
126
|
--gw-on-night: #e3e4e8;
|
|
119
127
|
--gw-on-night-muted: #9aa3ff;
|
|
128
|
+
--gw-scrim: rgba(12, 14, 18, 0.12);
|
|
120
129
|
}
|
|
121
130
|
@media (prefers-color-scheme: dark) {
|
|
122
131
|
:root:not([data-theme="light"]) {
|
|
@@ -130,7 +139,7 @@
|
|
|
130
139
|
--gw-line: #2a2b33;
|
|
131
140
|
--gw-line-strong: #383944;
|
|
132
141
|
--gw-line-control: #6a6d78;
|
|
133
|
-
--gw-action: #
|
|
142
|
+
--gw-action: #e3e4e8;
|
|
134
143
|
--gw-action-hover: #ffffff;
|
|
135
144
|
--gw-on-action: #0d0d12;
|
|
136
145
|
--gw-accent: var(--gw-accent-dark);
|
|
@@ -148,6 +157,10 @@
|
|
|
148
157
|
--gw-night-2: #12141c;
|
|
149
158
|
--gw-on-night: #e3e4e8;
|
|
150
159
|
--gw-on-night-muted: #9aa3ff;
|
|
160
|
+
--gw-scrim: rgba(0, 0, 0, 0.35);
|
|
161
|
+
--gw-shadow: 0 1px 0 rgba(0,0,0,.3);
|
|
162
|
+
--gw-shadow-sm: 0 1px 0 rgba(0,0,0,.25);
|
|
163
|
+
--gw-shadow-raised: 0 4px 16px rgba(0,0,0,.5);
|
|
151
164
|
}
|
|
152
165
|
}
|
|
153
166
|
:root[data-theme="dark"] {
|
|
@@ -161,7 +174,7 @@
|
|
|
161
174
|
--gw-line: #2a2b33;
|
|
162
175
|
--gw-line-strong: #383944;
|
|
163
176
|
--gw-line-control: #6a6d78;
|
|
164
|
-
--gw-action: #
|
|
177
|
+
--gw-action: #e3e4e8;
|
|
165
178
|
--gw-action-hover: #ffffff;
|
|
166
179
|
--gw-on-action: #0d0d12;
|
|
167
180
|
--gw-accent: var(--gw-accent-dark);
|
|
@@ -179,6 +192,10 @@
|
|
|
179
192
|
--gw-night-2: #12141c;
|
|
180
193
|
--gw-on-night: #e3e4e8;
|
|
181
194
|
--gw-on-night-muted: #9aa3ff;
|
|
195
|
+
--gw-scrim: rgba(0, 0, 0, 0.35);
|
|
196
|
+
--gw-shadow: 0 1px 0 rgba(0,0,0,.3);
|
|
197
|
+
--gw-shadow-sm: 0 1px 0 rgba(0,0,0,.25);
|
|
198
|
+
--gw-shadow-raised: 0 4px 16px rgba(0,0,0,.5);
|
|
182
199
|
}
|
|
183
200
|
:root[data-theme="light"] {
|
|
184
201
|
color-scheme: light;
|
|
@@ -187,7 +204,7 @@
|
|
|
187
204
|
--gw-surface: #ffffff;
|
|
188
205
|
--gw-ink: #1b1c1e;
|
|
189
206
|
--gw-ink-2: #3b3d42;
|
|
190
|
-
--gw-muted: #
|
|
207
|
+
--gw-muted: #6a6d73;
|
|
191
208
|
--gw-line: #e5e7ea;
|
|
192
209
|
--gw-line-strong: #d5d8dd;
|
|
193
210
|
--gw-line-control: #85888e;
|
|
@@ -209,6 +226,7 @@
|
|
|
209
226
|
--gw-night-2: #141722;
|
|
210
227
|
--gw-on-night: #e3e4e8;
|
|
211
228
|
--gw-on-night-muted: #9aa3ff;
|
|
229
|
+
--gw-scrim: rgba(12, 14, 18, 0.12);
|
|
212
230
|
}
|
|
213
231
|
/* night band: the dark palette inside, on the night ground, in both themes */
|
|
214
232
|
.gw-band--night, .gw-showcase {
|
|
@@ -222,7 +240,7 @@
|
|
|
222
240
|
--gw-line: #2a2b33;
|
|
223
241
|
--gw-line-strong: #383944;
|
|
224
242
|
--gw-line-control: #6a6d78;
|
|
225
|
-
--gw-action: #
|
|
243
|
+
--gw-action: #e3e4e8;
|
|
226
244
|
--gw-action-hover: #ffffff;
|
|
227
245
|
--gw-on-action: #0d0d12;
|
|
228
246
|
--gw-accent: var(--gw-accent-dark);
|
|
@@ -236,6 +254,7 @@
|
|
|
236
254
|
--gw-danger: #ff6b5a;
|
|
237
255
|
--gw-danger-soft: #2e1714;
|
|
238
256
|
--gw-on-danger: #0d0d12;
|
|
257
|
+
--gw-scrim: rgba(0, 0, 0, 0.35);
|
|
239
258
|
}
|
|
240
259
|
/* action profile "accent": data-gw-action="accent" on <html>. In night bands too, where the dark palette applies. */
|
|
241
260
|
:root[data-gw-action="accent"],
|
|
@@ -328,7 +347,8 @@ h5, h6 { font-size: 16px; font-weight: 600; letter-spacing: 0; }
|
|
|
328
347
|
:where(p, dd, td, figcaption, .gw-list--check li, .gw-prose) a:not([class]):hover,
|
|
329
348
|
.gw-link:hover { text-decoration-color: currentColor; }
|
|
330
349
|
|
|
331
|
-
|
|
350
|
+
/* the focus ring, as gemboss.ai draws it (0.11.0): 2px of accent, 3px out, 4px corners */
|
|
351
|
+
:focus-visible { border-radius: var(--gw-radius-4); outline: 2px solid var(--gw-accent); outline-offset: 3px; }
|
|
332
352
|
[id] { scroll-margin-top: calc(var(--gw-header-height) + 16px); }
|
|
333
353
|
|
|
334
354
|
.gw-skip {
|
|
@@ -782,9 +802,9 @@ h5, h6 { font-size: 16px; font-weight: 600; letter-spacing: 0; }
|
|
|
782
802
|
.gw-segmented > button { height: auto; min-height: var(--gw-tap-min); padding-block: 8px; white-space: normal; text-wrap: balance; }
|
|
783
803
|
}
|
|
784
804
|
|
|
785
|
-
/* header: announcement, a flat 64px bar with one hairline, mega menu, mobile menu
|
|
805
|
+
/* header: announcement, a flat 64px bar with one hairline, mega menu, mobile menu up to 1080px.
|
|
786
806
|
Not a floating pill: no radius, no blur, no shadow on the bar. Nothing tucks under it. A brand may choose the one
|
|
787
|
-
other shape, .gw-header--float (an inset card from
|
|
807
|
+
other shape, .gw-header--float (an inset card from 1081px, at the end of this file). */
|
|
788
808
|
.gw-announce {
|
|
789
809
|
padding: 8px var(--gw-gutter);
|
|
790
810
|
border-bottom: 1px solid var(--gw-line);
|
|
@@ -804,47 +824,54 @@ h5, h6 { font-size: 16px; font-weight: 600; letter-spacing: 0; }
|
|
|
804
824
|
background: var(--gw-surface);
|
|
805
825
|
}
|
|
806
826
|
.gw-header.is-scrolled { border-bottom-color: var(--gw-line-strong); }
|
|
807
|
-
|
|
827
|
+
/* the bar is 12px wider than the page's wrap with 24px inside, as gemboss.ai draws it (1132px; its content starts
|
|
828
|
+
18px in from the page's), 6px inside up to 640px. Its own width, whatever order the stylesheets load in: a bar that
|
|
829
|
+
also carries .gw-wrap (0.10.0 markup) still takes this one. */
|
|
830
|
+
.gw-header__bar { display: flex; align-items: center; gap: 32px; height: var(--gw-header-height); }
|
|
831
|
+
.gw-header > .gw-header__bar { width: min(100% - 32px, var(--gw-wrap) + 12px); margin-inline: auto; padding-inline: 24px; }
|
|
832
|
+
@media (max-width: 640px) { .gw-header > .gw-header__bar { padding-inline: 6px; } }
|
|
808
833
|
|
|
809
834
|
.gw-brand {
|
|
810
835
|
display: inline-flex;
|
|
811
836
|
align-items: center;
|
|
812
837
|
gap: 8px;
|
|
813
838
|
flex: none;
|
|
814
|
-
min-height: 44px;
|
|
815
839
|
color: var(--gw-ink);
|
|
816
840
|
font-size: 18px;
|
|
817
841
|
font-weight: 700;
|
|
818
842
|
letter-spacing: -0.01em;
|
|
843
|
+
line-height: 1.6;
|
|
819
844
|
white-space: nowrap;
|
|
820
845
|
}
|
|
821
|
-
|
|
822
|
-
.gw-
|
|
846
|
+
/* the mark: 34px, its corners clipped at 8px, as gemboss.ai (0.11.0; was 26px); a 44px row up to 768px */
|
|
847
|
+
.gw-brand__mark { flex: none; width: 34px; height: 34px; border-radius: var(--gw-radius-8); }
|
|
848
|
+
@media (max-width: 768px) { .gw-brand { min-height: 44px; } }
|
|
849
|
+
.gw-brand__name { line-height: inherit; }
|
|
823
850
|
|
|
824
851
|
/* desktop nav */
|
|
825
|
-
.gw-nav { display: none; }
|
|
852
|
+
.gw-nav { display: none; margin-left: 6px; }
|
|
826
853
|
.gw-nav__list { display: flex; align-items: center; gap: 4px; margin: 0; padding: 0; list-style: none; }
|
|
827
854
|
.gw-nav__trigger,
|
|
828
855
|
.gw-nav__link {
|
|
829
856
|
display: inline-flex;
|
|
830
857
|
align-items: center;
|
|
831
858
|
gap: 6px;
|
|
832
|
-
|
|
833
|
-
padding: 0 12px;
|
|
859
|
+
padding: 8px 12px;
|
|
834
860
|
border: 0;
|
|
835
861
|
border-radius: var(--gw-radius-action);
|
|
836
862
|
background: transparent;
|
|
837
863
|
color: var(--gw-ink-2);
|
|
838
864
|
font-size: 14px;
|
|
839
865
|
font-weight: 500;
|
|
840
|
-
line-height: 1.
|
|
866
|
+
line-height: 1.6;
|
|
841
867
|
white-space: nowrap;
|
|
842
868
|
cursor: pointer;
|
|
843
869
|
}
|
|
844
870
|
.gw-nav__trigger:hover,
|
|
845
871
|
.gw-nav__link:hover,
|
|
846
872
|
.gw-nav__item.is-open > .gw-nav__trigger { background: var(--gw-bg-soft); color: var(--gw-ink); }
|
|
847
|
-
/* the chevron:
|
|
873
|
+
/* the chevron: gemboss.ai's own 24px path (2.6 stroke, square ends) at 12px and 55%, drawn as a mask so it takes
|
|
874
|
+
currentColor */
|
|
848
875
|
.gw-nav__trigger::after,
|
|
849
876
|
.gw-mobile-menu__group > summary::after {
|
|
850
877
|
content: "";
|
|
@@ -852,97 +879,281 @@ h5, h6 { font-size: 16px; font-weight: 600; letter-spacing: 0; }
|
|
|
852
879
|
width: 12px;
|
|
853
880
|
height: 12px;
|
|
854
881
|
background: currentColor;
|
|
855
|
-
opacity: 0.
|
|
856
|
-
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6' fill='none' stroke='%23000' stroke-width='2.6'
|
|
857
|
-
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6' fill='none' stroke='%23000' stroke-width='2.6'
|
|
882
|
+
opacity: 0.55;
|
|
883
|
+
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6' fill='none' stroke='%23000' stroke-width='2.6'/%3E%3C/svg%3E") center / 12px no-repeat;
|
|
884
|
+
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 9l6 6 6-6' fill='none' stroke='%23000' stroke-width='2.6'/%3E%3C/svg%3E") center / 12px no-repeat;
|
|
858
885
|
transition: transform 0.18s var(--gw-ease);
|
|
859
886
|
}
|
|
860
887
|
.gw-nav__trigger[aria-expanded="true"]::after,
|
|
861
888
|
.gw-mobile-menu__group[open] > summary::after { transform: rotate(180deg); }
|
|
862
|
-
.
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
889
|
+
/* the menu's own words are drawn 0.005em tighter (a text action in the bar keeps its tracking); the page you are on,
|
|
890
|
+
or the section it belongs to (aria-current on the section's name), is named in the accent's strong ink, weight 600,
|
|
891
|
+
as gemboss.ai (0.11.0; was ink with an underline) */
|
|
892
|
+
.gw-nav .gw-nav__trigger,
|
|
893
|
+
.gw-nav .gw-nav__link { letter-spacing: -0.005em; }
|
|
894
|
+
.gw-nav__link[aria-current="page"],
|
|
895
|
+
.gw-nav__trigger[aria-current] { color: var(--gw-accent-strong); font-weight: 600; }
|
|
896
|
+
|
|
897
|
+
/* mega menu (0.11.0): gemboss.ai's own, 1:1 (Chris 26/10/2026). A section's name is a link to its page that opens its
|
|
898
|
+
panel: after the pointer rests 200ms, at once from the keyboard, ArrowDown steps into the first row. From 1081px the
|
|
899
|
+
script draws ONE surface (.gw-mega-surface) that morphs to the open panel's size and place, the panels crossfade on
|
|
900
|
+
it, clipped to its outline while it moves, a caret points at the open name, a pill glides under the hovered name and
|
|
901
|
+
a highlight under the hovered row, and the preview pane follows the row. The page behind dims and blurs (.gw-scrim).
|
|
902
|
+
A panel: .gw-mega__body (columns of rows, then an aside of pictures) and an optional .gw-mega__foot strip. Its width
|
|
903
|
+
and its aside's width are the markup's (--gw-mega-w, --gw-mega-pv; 1000 and 320 when it says nothing), its columns
|
|
904
|
+
too (--gw-mega-cols, 3). Without the script the panels stay hidden and every name is still its page's link. */
|
|
905
|
+
.gw-header { --gw-mega-ease: cubic-bezier(0.25, 1, 0.5, 1); --gw-mega-t: 0.36s; --gw-mega-glide: 0.26s; }
|
|
906
|
+
.gw-nav__item { display: flex; }
|
|
907
|
+
/* gemboss.ai's chevron is an inline 12px SVG after the name (.gw-nav__chev); a name without one keeps the drawn mask */
|
|
908
|
+
.gw-nav__chev { flex: none; opacity: 0.55; transition: transform 0.18s; }
|
|
909
|
+
.gw-nav__trigger:has(> .gw-nav__chev)::after { content: none; }
|
|
910
|
+
.gw-nav__trigger[aria-expanded="true"] > .gw-nav__chev { transform: rotate(180deg); }
|
|
911
|
+
.gw-mega-surface,
|
|
912
|
+
.gw-mega-caret,
|
|
913
|
+
.gw-nav__pill,
|
|
914
|
+
.gw-mega__hl { display: none; }
|
|
915
|
+
.gw-scrim {
|
|
916
|
+
position: fixed;
|
|
917
|
+
inset: 0;
|
|
918
|
+
z-index: 40;
|
|
919
|
+
pointer-events: none;
|
|
920
|
+
opacity: 0;
|
|
921
|
+
background: var(--gw-scrim);
|
|
922
|
+
-webkit-backdrop-filter: blur(4px);
|
|
923
|
+
backdrop-filter: blur(4px);
|
|
924
|
+
transition: opacity 0.24s;
|
|
925
|
+
}
|
|
926
|
+
.gw-scrim.is-on { opacity: 1; }
|
|
927
|
+
/* a link in a panel sets its words at 16px, weight 500, 0.005em tighter, as gemboss.ai; its parts size themselves and
|
|
928
|
+
inherit the rest (a row's line is weight 500, its tracking the 16px one) */
|
|
929
|
+
.gw-mega a { font-size: 16px; font-weight: 500; letter-spacing: -0.005em; }
|
|
930
|
+
.gw-mega__link b { display: block; }
|
|
931
|
+
.gw-mega__link i { display: block; font-style: normal; }
|
|
932
|
+
@media (min-width: 1081px) {
|
|
933
|
+
.gw-header.has-mega .gw-nav__trigger,
|
|
934
|
+
.gw-header.has-mega .gw-nav__link { position: relative; z-index: 1; background: none; }
|
|
935
|
+
.gw-header.has-mega .gw-nav__trigger:hover,
|
|
936
|
+
.gw-header.has-mega .gw-nav__link:hover,
|
|
937
|
+
.gw-header.has-mega .gw-nav__item:hover > .gw-nav__trigger,
|
|
938
|
+
.gw-header.has-mega .gw-nav__item:focus-within > .gw-nav__trigger { background: none; color: var(--gw-ink); }
|
|
939
|
+
.gw-header.has-mega .gw-nav__chev { transform: none; transition: transform 0.2s var(--gw-mega-ease); }
|
|
940
|
+
.gw-header.has-mega .gw-nav__trigger[aria-expanded="true"] > .gw-nav__chev { transform: rotate(180deg); }
|
|
941
|
+
.gw-nav__pill {
|
|
942
|
+
display: block;
|
|
943
|
+
position: absolute;
|
|
944
|
+
left: 0;
|
|
945
|
+
top: 0;
|
|
946
|
+
z-index: 0;
|
|
947
|
+
width: 0;
|
|
948
|
+
height: 0;
|
|
949
|
+
border-radius: var(--gw-radius-action);
|
|
950
|
+
pointer-events: none;
|
|
951
|
+
opacity: 0;
|
|
952
|
+
background: color-mix(in srgb, var(--gw-ink) 6%, transparent);
|
|
953
|
+
transition: translate var(--gw-mega-glide) var(--gw-mega-ease), width var(--gw-mega-glide) var(--gw-mega-ease), opacity 0.2s ease;
|
|
954
|
+
}
|
|
955
|
+
.gw-nav__pill.is-on { opacity: 1; }
|
|
956
|
+
.gw-mega-surface {
|
|
957
|
+
display: block;
|
|
958
|
+
position: absolute;
|
|
959
|
+
left: 0;
|
|
960
|
+
top: var(--gw-mega-top, 73px);
|
|
961
|
+
z-index: 88;
|
|
962
|
+
width: 0;
|
|
963
|
+
height: 0;
|
|
964
|
+
pointer-events: none;
|
|
965
|
+
border: 1px solid var(--gw-line);
|
|
966
|
+
border-radius: var(--gw-radius-popover);
|
|
967
|
+
background: var(--gw-surface);
|
|
968
|
+
box-shadow: var(--gw-shadow-raised);
|
|
969
|
+
opacity: 0;
|
|
970
|
+
translate: 0 -6px;
|
|
971
|
+
transition: opacity 0.22s ease, translate var(--gw-mega-t) var(--gw-mega-ease), left var(--gw-mega-t) var(--gw-mega-ease), width var(--gw-mega-t) var(--gw-mega-ease), height var(--gw-mega-t) var(--gw-mega-ease);
|
|
972
|
+
}
|
|
973
|
+
.gw-mega-caret {
|
|
974
|
+
display: block;
|
|
975
|
+
position: absolute;
|
|
976
|
+
left: 0;
|
|
977
|
+
top: calc(var(--gw-mega-top, 73px) - 5px);
|
|
978
|
+
z-index: 89;
|
|
979
|
+
width: 12px;
|
|
980
|
+
height: 12px;
|
|
981
|
+
pointer-events: none;
|
|
982
|
+
border-top: 1px solid var(--gw-line);
|
|
983
|
+
border-left: 1px solid var(--gw-line);
|
|
984
|
+
border-radius: var(--gw-radius-2) 0 0 0;
|
|
985
|
+
background: var(--gw-surface);
|
|
986
|
+
rotate: 45deg;
|
|
987
|
+
opacity: 0;
|
|
988
|
+
transition: opacity 0.22s ease, translate var(--gw-mega-t) var(--gw-mega-ease);
|
|
989
|
+
}
|
|
990
|
+
.gw-header.is-mega-open .gw-mega-surface,
|
|
991
|
+
.gw-header.is-mega-open .gw-mega-caret { opacity: 1; }
|
|
992
|
+
.gw-header.has-mega .gw-mega {
|
|
993
|
+
position: absolute;
|
|
994
|
+
top: var(--gw-mega-top, 73px);
|
|
995
|
+
left: 0;
|
|
996
|
+
z-index: 90;
|
|
997
|
+
width: var(--gw-mega-w, 1000px);
|
|
998
|
+
max-width: calc(100vw - 48px);
|
|
999
|
+
border-radius: var(--gw-radius-popover);
|
|
1000
|
+
opacity: 0;
|
|
1001
|
+
visibility: hidden;
|
|
1002
|
+
pointer-events: none;
|
|
1003
|
+
translate: 0 -6px;
|
|
1004
|
+
transition: opacity 0.14s ease, translate var(--gw-mega-t) var(--gw-mega-ease), clip-path var(--gw-mega-t) var(--gw-mega-ease), visibility 0s linear var(--gw-mega-t);
|
|
1005
|
+
}
|
|
1006
|
+
.gw-header.has-mega.is-mega-open .gw-mega { translate: 0 0; }
|
|
1007
|
+
.gw-header.has-mega.is-mega-open .gw-nav__item.is-open > .gw-mega {
|
|
1008
|
+
opacity: 1;
|
|
1009
|
+
visibility: visible;
|
|
1010
|
+
pointer-events: auto;
|
|
1011
|
+
transition: opacity 0.24s var(--gw-mega-ease) 0.05s, translate var(--gw-mega-t) var(--gw-mega-ease), clip-path var(--gw-mega-t) var(--gw-mega-ease), visibility 0s;
|
|
1012
|
+
}
|
|
1013
|
+
.gw-mega__body,
|
|
1014
|
+
.gw-mega__foot { translate: var(--gw-mega-dx, 0px) 0; transition: translate var(--gw-mega-t) var(--gw-mega-ease); }
|
|
1015
|
+
.gw-mega__body { display: grid; grid-template-columns: minmax(0, 1fr) var(--gw-mega-pv, 320px); gap: 16px; padding: 12px; }
|
|
1016
|
+
.gw-mega__body:not(:has(> .gw-mega__aside)) { grid-template-columns: minmax(0, 1fr); }
|
|
1017
|
+
.gw-mega__grid { position: relative; display: grid; grid-template-columns: repeat(var(--gw-mega-cols, 3), minmax(0, 1fr)); gap: 0 12px; padding: 12px 0 0; align-content: start; }
|
|
1018
|
+
.gw-mega__col { display: flex; flex-direction: column; gap: 2px; }
|
|
1019
|
+
.gw-mega__heading { position: relative; z-index: 1; margin: 0; padding: 0 12px 8px; color: var(--gw-muted); font-size: 12px; font-weight: 500; line-height: 16px; }
|
|
1020
|
+
.gw-mega__link { position: relative; z-index: 1; display: block; padding: 12px; border-radius: var(--gw-radius-action); color: var(--gw-ink); }
|
|
1021
|
+
.gw-mega__link:focus-visible { outline: 2px solid var(--gw-accent); outline-offset: -2px; }
|
|
1022
|
+
.gw-mega__link b { color: var(--gw-ink); font-size: 14px; font-weight: 500; letter-spacing: 0; line-height: 20px; }
|
|
1023
|
+
.gw-mega__link i { margin-top: 2px; color: var(--gw-muted); font-size: 13px; line-height: 18px; }
|
|
1024
|
+
.gw-mega__link > .gw-mega__icon,
|
|
1025
|
+
.gw-mega__link > img { display: none; }
|
|
1026
|
+
.gw-mega__hl {
|
|
1027
|
+
display: block;
|
|
1028
|
+
position: absolute;
|
|
1029
|
+
left: 0;
|
|
1030
|
+
top: 0;
|
|
1031
|
+
z-index: 0;
|
|
1032
|
+
width: 0;
|
|
1033
|
+
height: 0;
|
|
1034
|
+
border-radius: var(--gw-radius-action);
|
|
1035
|
+
pointer-events: none;
|
|
1036
|
+
opacity: 0;
|
|
1037
|
+
background: color-mix(in srgb, var(--gw-ink) 5%, transparent);
|
|
1038
|
+
transition: translate var(--gw-mega-glide) var(--gw-mega-ease), width var(--gw-mega-glide) var(--gw-mega-ease), height var(--gw-mega-glide) var(--gw-mega-ease), opacity 0.2s ease;
|
|
1039
|
+
}
|
|
1040
|
+
.gw-mega__hl.is-on { opacity: 1; }
|
|
1041
|
+
/* the aside: one card shows at a time, the panel's own (in the markup) or a row's preview (from its <template>) */
|
|
1042
|
+
.gw-mega__aside { position: relative; display: block; min-height: 296px; border-radius: var(--gw-radius-card); overflow: hidden; }
|
|
1043
|
+
.gw-mega__card {
|
|
1044
|
+
position: absolute;
|
|
1045
|
+
inset: 0;
|
|
1046
|
+
display: flex;
|
|
1047
|
+
flex-direction: column;
|
|
1048
|
+
gap: 12px;
|
|
1049
|
+
padding: 0 0 4px;
|
|
1050
|
+
color: var(--gw-ink);
|
|
1051
|
+
opacity: 0;
|
|
1052
|
+
pointer-events: none;
|
|
1053
|
+
transition: opacity 0.24s ease;
|
|
1054
|
+
}
|
|
1055
|
+
.gw-mega__card[aria-hidden="true"] { visibility: hidden; transition: opacity 0.24s ease, visibility 0s linear 0.24s; }
|
|
1056
|
+
.gw-mega__card.is-on { opacity: 1; visibility: visible; pointer-events: auto; transition: opacity 0.28s ease, visibility 0s; }
|
|
1057
|
+
.gw-mega__card:focus-visible { border-radius: var(--gw-radius-card); outline: 2px solid var(--gw-accent); outline-offset: -2px; }
|
|
1058
|
+
.gw-mega__foot {
|
|
1059
|
+
display: flex;
|
|
1060
|
+
align-items: center;
|
|
1061
|
+
justify-content: space-between;
|
|
1062
|
+
gap: 16px;
|
|
1063
|
+
padding: 16px 24px;
|
|
1064
|
+
border-top: 1px solid var(--gw-line);
|
|
1065
|
+
font-size: 13px;
|
|
1066
|
+
}
|
|
1067
|
+
.gw-mega__foot-start,
|
|
1068
|
+
.gw-mega__foot-end { display: flex; align-items: center; gap: 24px; }
|
|
1069
|
+
.gw-mega__foot a { color: var(--gw-muted); font-size: 13px; font-weight: 500; transition: color 0.15s; }
|
|
1070
|
+
.gw-mega__foot a:hover { color: var(--gw-ink); }
|
|
1071
|
+
.gw-mega__foot a.gw-mega__cta { color: var(--gw-ink); font-weight: 600; }
|
|
1072
|
+
}
|
|
1073
|
+
/* the Stage under a card's picture: a deep iris ground lit from two corners, in the desktop pane a faint dot grid
|
|
1074
|
+
fading out to the lower left. What sits on it (a page, a screen, a photo, a drawing) is the site's: it lifts objects with --gw-shadow-lift. */
|
|
1075
|
+
.gw-mega__art {
|
|
1076
|
+
--gw-lift: var(--gw-shadow-lift);
|
|
1077
|
+
position: relative;
|
|
1078
|
+
display: block;
|
|
1079
|
+
overflow: hidden;
|
|
1080
|
+
border-radius: var(--gw-radius-card);
|
|
1081
|
+
background:
|
|
1082
|
+
radial-gradient(130% 90% at 100% 0%, var(--gw-stage-glow), transparent 55%),
|
|
1083
|
+
radial-gradient(90% 80% at 0% 100%, var(--gw-stage-glow-2), transparent 60%),
|
|
1084
|
+
linear-gradient(160deg, var(--gw-stage-top), var(--gw-stage-bottom));
|
|
1085
|
+
color: var(--gw-stage-ink);
|
|
869
1086
|
}
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
(::before) keeps the pointer inside while it crosses the 8px gap from the trigger. */
|
|
874
|
-
.gw-mega {
|
|
1087
|
+
/* the dots: in the desktop pane only (a phone level's card has none, as gemboss.ai) */
|
|
1088
|
+
.gw-mega__aside .gw-mega__art::before {
|
|
1089
|
+
content: "";
|
|
875
1090
|
position: absolute;
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
.gw-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
.gw-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
.gw-
|
|
895
|
-
.gw-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
}
|
|
904
|
-
.gw-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
background: var(--gw-surface);
|
|
916
|
-
color: var(--gw-muted);
|
|
1091
|
+
inset: 0;
|
|
1092
|
+
pointer-events: none;
|
|
1093
|
+
background-image: radial-gradient(var(--gw-stage-dot) 1px, transparent 1.5px);
|
|
1094
|
+
background-size: 16px 16px;
|
|
1095
|
+
-webkit-mask-image: linear-gradient(170deg, #000, transparent 70%);
|
|
1096
|
+
mask-image: linear-gradient(170deg, #000, transparent 70%);
|
|
1097
|
+
}
|
|
1098
|
+
/* what sits on the Stage stacks above its dots; a site's own position for it wins (no specificity here) */
|
|
1099
|
+
:where(.gw-mega__art > *) { position: relative; }
|
|
1100
|
+
/* a picture straight on the Stage (an <img> child) fills it, like a photo (gemboss.ai draws its team and its lounge so) */
|
|
1101
|
+
:where(.gw-mega__art) > img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: cover; }
|
|
1102
|
+
/* in the desktop pane the picture fills what the words leave (its parts size to it: a size container) */
|
|
1103
|
+
.gw-mega__aside .gw-mega__art { flex: 1 1 auto; min-height: 0; container-type: size; }
|
|
1104
|
+
.gw-mega__card-text { display: block; padding: 0 4px; }
|
|
1105
|
+
.gw-mega__card-text b { display: flex; align-items: center; gap: 8px; color: var(--gw-ink); font-size: 14px; font-weight: 600; line-height: 20px; }
|
|
1106
|
+
.gw-mega__card-text i { display: block; margin-top: 2px; color: var(--gw-muted); font-size: 13px; font-style: normal; line-height: 18px; }
|
|
1107
|
+
/* a level of the phone menu ends with its panel's own card, as gemboss.ai: 24px above, the picture on the Stage as
|
|
1108
|
+
tall as what it holds, 16px inside; the words under it */
|
|
1109
|
+
.gw-mobile-menu .gw-mega__card { display: flex; flex-direction: column; gap: 12px; margin: 24px 0 8px; color: var(--gw-ink); }
|
|
1110
|
+
.gw-mobile-menu .gw-mega__art { display: flex; padding: 16px; }
|
|
1111
|
+
.gw-mobile-menu .gw-mega__card-text b { display: block; line-height: 1.6; }
|
|
1112
|
+
.gw-mobile-menu .gw-mega__card-text i { margin-top: 4px; }
|
|
1113
|
+
/* a row's picture instead of an icon (gemboss.ai's Solutions): 48 by 32, one hairline, 6px corners */
|
|
1114
|
+
.gw-mobile-menu__link > img { display: block; flex: none; width: 48px; height: 32px; border: 1px solid var(--gw-line); border-radius: var(--gw-radius-6); object-fit: cover; }
|
|
1115
|
+
.gw-mega__go { color: var(--gw-accent-strong); font-weight: 500; }
|
|
1116
|
+
.gw-mega__card-text > .gw-mega__go { display: block; margin-top: 8px; font-size: 13px; }
|
|
1117
|
+
.gw-mega__card-text b > .gw-mega__go { margin-left: auto; transition: translate 0.2s var(--gw-mega-ease); }
|
|
1118
|
+
.gw-mega__card:hover b > .gw-mega__go { translate: 4px 0; }
|
|
1119
|
+
.gw-mega__new {
|
|
1120
|
+
display: inline-flex;
|
|
1121
|
+
align-items: center;
|
|
1122
|
+
height: 20px;
|
|
1123
|
+
margin-right: 6px;
|
|
1124
|
+
padding: 0 6px;
|
|
1125
|
+
border-radius: var(--gw-radius-6);
|
|
1126
|
+
background: var(--gw-accent-soft);
|
|
1127
|
+
color: var(--gw-accent-strong);
|
|
1128
|
+
font-size: 11px;
|
|
1129
|
+
font-weight: 600;
|
|
917
1130
|
}
|
|
918
|
-
|
|
919
|
-
.gw-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
.gw-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
var(--gw-night);
|
|
934
|
-
color: var(--gw-on-night);
|
|
1131
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1132
|
+
.gw-scrim,
|
|
1133
|
+
.gw-nav__pill,
|
|
1134
|
+
.gw-mega-surface,
|
|
1135
|
+
.gw-mega-caret,
|
|
1136
|
+
.gw-mega__hl,
|
|
1137
|
+
.gw-mega__go,
|
|
1138
|
+
.gw-header.has-mega .gw-mega,
|
|
1139
|
+
.gw-header.has-mega.is-mega-open .gw-nav__item.is-open > .gw-mega,
|
|
1140
|
+
.gw-mega__body,
|
|
1141
|
+
.gw-mega__foot,
|
|
1142
|
+
.gw-mega__card,
|
|
1143
|
+
.gw-mega__card.is-on { transition: none; }
|
|
1144
|
+
.gw-mega-surface,
|
|
1145
|
+
.gw-header.has-mega .gw-mega { translate: 0 0; }
|
|
935
1146
|
}
|
|
936
|
-
.gw-mega__feature b { font-size: 18px; font-weight: 650; line-height: 1.25; }
|
|
937
|
-
.gw-mega__feature i { color: var(--gw-on-night); font-size: 13px; font-style: normal; line-height: 1.5; opacity: 0.9; }
|
|
938
|
-
.gw-mega__feature .gw-link--arrow { margin-top: 16px; color: var(--gw-on-night); font-size: 13px; font-weight: 600; }
|
|
939
1147
|
|
|
940
1148
|
/* actions on the right */
|
|
941
|
-
.gw-
|
|
942
|
-
.
|
|
943
|
-
|
|
944
|
-
.gw-
|
|
945
|
-
.gw-
|
|
1149
|
+
/* Sign in and a second text action (.gw-header__link, Book a demo on gemboss.ai) read like the menu's words; the
|
|
1150
|
+
primary button sits 8px further out. Sign in shows from 1081px, the second action from 1181px (the first thing to
|
|
1151
|
+
go when the bar gets tight), the button from 561px. */
|
|
1152
|
+
.gw-header__actions { display: flex; align-items: center; gap: 4px; margin-left: auto; }
|
|
1153
|
+
.gw-header__signin,
|
|
1154
|
+
.gw-header__link { display: none; }
|
|
1155
|
+
.gw-header__actions > .gw-btn { display: none; margin-left: 8px; line-height: 1.6; }
|
|
1156
|
+
.gw-theme-toggle {
|
|
946
1157
|
display: inline-flex;
|
|
947
1158
|
align-items: center;
|
|
948
1159
|
justify-content: center;
|
|
@@ -955,10 +1166,25 @@ h5, h6 { font-size: 16px; font-weight: 600; letter-spacing: 0; }
|
|
|
955
1166
|
background: transparent;
|
|
956
1167
|
color: var(--gw-ink);
|
|
957
1168
|
}
|
|
958
|
-
.gw-theme-toggle:hover
|
|
959
|
-
.gw-menu-toggle:hover { background: var(--gw-bg-soft); }
|
|
1169
|
+
.gw-theme-toggle:hover { background: var(--gw-bg-soft); }
|
|
960
1170
|
.gw-theme-toggle svg,
|
|
961
1171
|
.gw-menu-toggle svg { width: 20px; height: 20px; }
|
|
1172
|
+
/* the menu button: a 42px square with one strong hairline on the surface, the card radius of the site's profile (12,
|
|
1173
|
+
20 in soft), its hairline ink while the menu is open, as gemboss.ai (0.11.0) */
|
|
1174
|
+
.gw-menu-toggle {
|
|
1175
|
+
display: inline-flex;
|
|
1176
|
+
align-items: center;
|
|
1177
|
+
justify-content: center;
|
|
1178
|
+
flex: none;
|
|
1179
|
+
width: 42px;
|
|
1180
|
+
height: 42px;
|
|
1181
|
+
padding: 0;
|
|
1182
|
+
border: 1px solid var(--gw-line-strong);
|
|
1183
|
+
border-radius: var(--gw-radius-card);
|
|
1184
|
+
background: var(--gw-surface);
|
|
1185
|
+
color: var(--gw-ink);
|
|
1186
|
+
}
|
|
1187
|
+
.gw-menu-toggle[aria-expanded="true"] { border-color: var(--gw-ink); }
|
|
962
1188
|
.gw-menu-toggle[aria-expanded="true"] .gw-menu-toggle__open,
|
|
963
1189
|
.gw-menu-toggle:not([aria-expanded="true"]) .gw-menu-toggle__close { display: none; }
|
|
964
1190
|
|
|
@@ -993,18 +1219,16 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
993
1219
|
.gw-mobile-menu__group > summary::-webkit-details-marker { display: none; }
|
|
994
1220
|
.gw-mobile-menu__list { margin: 0; padding: 8px 0 16px; list-style: none; }
|
|
995
1221
|
.gw-mobile-menu__link { display: flex; align-items: center; min-height: 44px; color: var(--gw-ink-2); font-size: 16px; }
|
|
996
|
-
.gw-mobile-menu__link[aria-current="page"],
|
|
997
|
-
.gw-mobile-menu__top[aria-current="page"] { color: var(--gw-accent-strong); font-weight: 600; }
|
|
998
1222
|
.gw-mobile-menu__actions { display: grid; gap: 8px; margin-top: 24px; }
|
|
999
1223
|
|
|
1000
|
-
@media (min-width:
|
|
1224
|
+
@media (min-width: 561px) {
|
|
1001
1225
|
.gw-header__actions > .gw-btn:not(.gw-btn--secondary) { display: inline-flex; }
|
|
1002
1226
|
}
|
|
1003
|
-
@media (min-width:
|
|
1227
|
+
@media (min-width: 1181px) {
|
|
1228
|
+
.gw-header__link,
|
|
1004
1229
|
.gw-header__actions > .gw-btn--secondary { display: inline-flex; }
|
|
1005
1230
|
}
|
|
1006
|
-
@media (min-width:
|
|
1007
|
-
.gw-header__bar { gap: 32px; }
|
|
1231
|
+
@media (min-width: 1081px) {
|
|
1008
1232
|
.gw-nav { display: block; }
|
|
1009
1233
|
.gw-header__signin { display: inline-flex; }
|
|
1010
1234
|
.gw-menu-toggle, .gw-mobile-menu { display: none !important; }
|
|
@@ -1016,12 +1240,12 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1016
1240
|
}
|
|
1017
1241
|
|
|
1018
1242
|
/* floating header (0.3.0), a brand's header profile: <header class="gw-header gw-header--float">. The same bar, mega
|
|
1019
|
-
menu and script, drawn from
|
|
1243
|
+
menu and script, drawn from 1081px as an inset card: the panel radius of the site's profile (16, 24 in soft), the
|
|
1020
1244
|
surface at 85% over a 10px blur, one hairline, the raised shadow, a 16px gap above it and when it sticks. It is
|
|
1021
1245
|
wrap + 2 x 24px + its border wide, so the bar's content lines up with the page's from 1170px. Below 1080px it is
|
|
1022
1246
|
the flat bar, so the phone menu is unchanged. Solid for a visitor who asks for less transparency, and where the
|
|
1023
1247
|
browser cannot blur. No other floating or blurred header: it is a profile, not a style to copy. */
|
|
1024
|
-
@media (min-width:
|
|
1248
|
+
@media (min-width: 1081px) {
|
|
1025
1249
|
.gw-header--float {
|
|
1026
1250
|
top: var(--gw-header-gap);
|
|
1027
1251
|
width: min(100% - 32px, var(--gw-wrap) + 50px);
|
|
@@ -1039,7 +1263,7 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1039
1263
|
/* an anchor lands below the card, not under it */
|
|
1040
1264
|
:root:has(.gw-header--float) [id] { scroll-margin-top: calc(var(--gw-header-height) + var(--gw-header-gap) + 18px); }
|
|
1041
1265
|
}
|
|
1042
|
-
@media (min-width:
|
|
1266
|
+
@media (min-width: 1081px) and (prefers-reduced-transparency: reduce) {
|
|
1043
1267
|
.gw-header--float { background: var(--gw-surface); -webkit-backdrop-filter: none; backdrop-filter: none; }
|
|
1044
1268
|
}
|
|
1045
1269
|
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
@@ -1056,8 +1280,11 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1056
1280
|
stays at the bottom of the sheet while the list scrolls (the sheet has no bottom padding, so nothing peeks out under
|
|
1057
1281
|
the bar; nor sideways while a level slides in). Without the script the groups are the 0.7.0 <details> that open in
|
|
1058
1282
|
place, their chevron pointing down. */
|
|
1059
|
-
.gw-mobile-menu[data-gw-menu="drill"] { display: flex; flex-direction: column; overflow-x: hidden; padding-bottom: 0; }
|
|
1060
|
-
.
|
|
1283
|
+
.gw-mobile-menu[data-gw-menu="drill"] { display: flex; flex-direction: column; overflow-x: hidden; padding-bottom: 0; line-height: 1.6; }
|
|
1284
|
+
/* gemboss.ai's sheet (0.11.0, 1:1): 24px in from both edges, whatever the page's wrap; every link in it set at 18px,
|
|
1285
|
+
weight 500, 0.005em tighter, its parts sizing themselves (a row's line keeps the 18px tracking) */
|
|
1286
|
+
.gw-mobile-menu[data-gw-menu="drill"] > nav { display: flex; flex: 1 0 auto; flex-direction: column; width: auto; margin-inline: 0; padding-inline: 24px; }
|
|
1287
|
+
.gw-mobile-menu[data-gw-menu="drill"] a { font-size: 18px; font-weight: 500; letter-spacing: -0.005em; }
|
|
1061
1288
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__group > summary,
|
|
1062
1289
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__top { min-height: 64px; font-size: 24px; letter-spacing: -0.01em; }
|
|
1063
1290
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__group > summary::after { width: 20px; height: 20px; -webkit-mask-size: 20px; mask-size: 20px; }
|
|
@@ -1070,10 +1297,10 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1070
1297
|
color: var(--gw-ink);
|
|
1071
1298
|
font-weight: 500;
|
|
1072
1299
|
}
|
|
1073
|
-
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__link b { display: block; font-size: 16px; font-weight: 500; line-height: 20px; }
|
|
1300
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__link b { display: block; font-size: 16px; font-weight: 500; letter-spacing: -0.005em; line-height: 20px; }
|
|
1074
1301
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__link i { display: block; margin-top: 2px; color: var(--gw-muted); font-size: 13px; font-style: normal; line-height: 18px; }
|
|
1075
1302
|
/* a level's optional parts: a muted heading over a run of links, a 32px icon tile before a link's words */
|
|
1076
|
-
.gw-mobile-menu__heading { padding: 16px 0 8px; color: var(--gw-muted); font-size: 12px; font-weight: 500; line-height: 1.
|
|
1303
|
+
.gw-mobile-menu__heading { padding: 16px 0 8px; color: var(--gw-muted); font-size: 12px; font-weight: 500; line-height: 1.6; }
|
|
1077
1304
|
.gw-mobile-menu__icon {
|
|
1078
1305
|
display: grid;
|
|
1079
1306
|
place-items: center;
|
|
@@ -1085,9 +1312,19 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1085
1312
|
color: var(--gw-muted);
|
|
1086
1313
|
}
|
|
1087
1314
|
.gw-mobile-menu__icon svg { width: 16px; height: 16px; }
|
|
1315
|
+
/* a row under the pointer or the keyboard (gemboss.ai's, 0.11.0): the soft ground in 8px corners, 2px to the right,
|
|
1316
|
+
its icon tile in the accent and 1px up; only the colours ease (0.15s) */
|
|
1317
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__list .gw-mobile-menu__link { border-radius: var(--gw-radius-action); transition: background 0.15s; }
|
|
1318
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__list .gw-mobile-menu__link:hover { background: var(--gw-bg-soft); transform: translateX(2px); }
|
|
1319
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__list .gw-mobile-menu__link:focus-visible { background: var(--gw-bg-soft); }
|
|
1320
|
+
.gw-mobile-menu__icon { background: var(--gw-surface); transition: color 0.15s, border-color 0.15s, background 0.15s, transform 0.15s; }
|
|
1321
|
+
.gw-mobile-menu__link:is(:hover, :focus-visible) .gw-mobile-menu__icon { border-color: color-mix(in srgb, var(--gw-accent) 32%, var(--gw-line)); background: var(--gw-accent-soft); color: var(--gw-accent-strong); }
|
|
1322
|
+
.gw-mobile-menu__link:hover .gw-mobile-menu__icon { transform: translateY(-1px); }
|
|
1088
1323
|
/* a level's last link, to the section's own page: its row opens the level instead of going there */
|
|
1089
|
-
.gw-mobile-menu__all { display: flex; align-items: center;
|
|
1090
|
-
.gw-mobile-menu__all
|
|
1324
|
+
.gw-mobile-menu__all { display: flex; align-items: center; min-height: 56px; color: var(--gw-accent-strong); font-size: 16px; font-weight: 500; }
|
|
1325
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__all { font-size: 16px; }
|
|
1326
|
+
/* the arrow follows the words after a space, as gemboss.ai writes "All of Product →" (0.11.0) */
|
|
1327
|
+
.gw-mobile-menu__all::after { content: "\00a0\2192"; }
|
|
1091
1328
|
/* the action bar: what is not a button (Sign in, the language) on the first line, the last one on the right; the
|
|
1092
1329
|
buttons side by side under it (gw-btn--lg: 48px, as gemboss.ai) */
|
|
1093
1330
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions {
|
|
@@ -1096,7 +1333,7 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1096
1333
|
z-index: 1;
|
|
1097
1334
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
1098
1335
|
align-items: center;
|
|
1099
|
-
gap: 8px
|
|
1336
|
+
gap: 8px;
|
|
1100
1337
|
margin-top: auto;
|
|
1101
1338
|
padding-block: 12px calc(12px + env(safe-area-inset-bottom));
|
|
1102
1339
|
border-top: 1px solid var(--gw-line);
|
|
@@ -1105,7 +1342,10 @@ html.is-menu-open .gw-header { position: fixed; top: 0; left: 0; right: 0; }
|
|
|
1105
1342
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > .gw-btn { grid-row: 2; }
|
|
1106
1343
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > :not(.gw-btn) { grid-row: 1; }
|
|
1107
1344
|
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > :not(.gw-btn):last-child { grid-column: 2; justify-self: end; }
|
|
1108
|
-
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > .gw-mobile-menu__link { color: var(--gw-ink); font-weight: 500; }
|
|
1345
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > .gw-mobile-menu__link { color: var(--gw-ink); font-size: 16px; font-weight: 500; }
|
|
1346
|
+
/* a quieter link in the bar, before Sign in (gemboss.ai: What's new on the changelog) */
|
|
1347
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > .gw-mobile-menu__link--muted { color: var(--gw-muted); }
|
|
1348
|
+
.gw-mobile-menu[data-gw-menu="drill"] .gw-mobile-menu__actions > .gw-btn { padding: 0 16px; font-size: 16px; line-height: 1.6; }
|
|
1109
1349
|
|
|
1110
1350
|
/* Wired (.is-drill, set by website.js): a group's row points right and opens its level, which shows alone
|
|
1111
1351
|
(.is-drilled) under its head: Back on the left, the level's title in the middle. The sheet starts where the header
|
|
@@ -1137,7 +1377,7 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1137
1377
|
background: transparent;
|
|
1138
1378
|
color: var(--gw-muted);
|
|
1139
1379
|
font-size: 16px;
|
|
1140
|
-
line-height: 1.
|
|
1380
|
+
line-height: 1.6;
|
|
1141
1381
|
}
|
|
1142
1382
|
.gw-mobile-menu__back:hover { color: var(--gw-ink); }
|
|
1143
1383
|
.gw-mobile-menu__back::before {
|
|
@@ -1149,7 +1389,7 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1149
1389
|
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M15 18l-6-6 6-6' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 16px no-repeat;
|
|
1150
1390
|
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M15 18l-6-6 6-6' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 16px no-repeat;
|
|
1151
1391
|
}
|
|
1152
|
-
.gw-mobile-menu__title { color: var(--gw-ink); font-size: 16px; font-weight: 600; letter-spacing: 0; line-height: 1.
|
|
1392
|
+
.gw-mobile-menu__title { color: var(--gw-ink); font-size: 16px; font-weight: 600; letter-spacing: 0; line-height: 1.6; text-align: center; }
|
|
1153
1393
|
/* a level slides in from the right, the top level back in from the left; under reduced motion they just switch */
|
|
1154
1394
|
@media (prefers-reduced-motion: no-preference) {
|
|
1155
1395
|
.gw-mobile-menu.is-drilled .gw-mobile-menu__group[open] { animation: gw-drill-in 0.24s var(--gw-ease); }
|
|
@@ -1161,7 +1401,7 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1161
1401
|
/* The language switcher: <div class="gw-lang" data-gw-lang hidden>, a ghost button with the globe and the current
|
|
1162
1402
|
language's short code, and its list of the other languages, a small popover card (the card radius of the site's
|
|
1163
1403
|
profile, one hairline, the raised shadow). website.js fills the list from the page's <link rel="alternate" hreflang>
|
|
1164
|
-
and takes `hidden` away when there is another language. In the header's actions it shows from
|
|
1404
|
+
and takes `hidden` away when there is another language. In the header's actions it shows from 1081px, where the nav
|
|
1165
1405
|
is; below that a second one sits in the mobile menu's action bar, and its list opens upward. */
|
|
1166
1406
|
.gw-lang { position: relative; flex: none; }
|
|
1167
1407
|
.gw-header__actions > .gw-lang { display: none; }
|
|
@@ -1218,26 +1458,42 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1218
1458
|
@media (max-width: 768px), (pointer: coarse) {
|
|
1219
1459
|
.gw-lang__btn, .gw-lang__link { min-height: var(--gw-tap-min); }
|
|
1220
1460
|
}
|
|
1221
|
-
@media (min-width:
|
|
1461
|
+
@media (min-width: 1081px) {
|
|
1222
1462
|
.gw-header__actions > .gw-lang { display: block; }
|
|
1223
1463
|
}
|
|
1224
1464
|
|
|
1465
|
+
/* ---- 0.10.0: the theme toggle's two icons ---------------------------------------------------------------------------
|
|
1466
|
+
A toggle may hold two icons: .gw-theme-toggle__moon, shown in light, and .gw-theme-toggle__sun, shown in dark, as
|
|
1467
|
+
gemboss.ai draws them. The theme in force picks one: data-theme on <html>, else the system's. A toggle with one plain
|
|
1468
|
+
<svg> stays as it is. */
|
|
1469
|
+
.gw-theme-toggle__sun { display: none; }
|
|
1470
|
+
:root[data-theme="dark"] .gw-theme-toggle__sun { display: block; }
|
|
1471
|
+
:root[data-theme="dark"] .gw-theme-toggle__moon { display: none; }
|
|
1472
|
+
@media (prefers-color-scheme: dark) {
|
|
1473
|
+
:root:not([data-theme="light"]) .gw-theme-toggle__sun { display: block; }
|
|
1474
|
+
:root:not([data-theme="light"]) .gw-theme-toggle__moon { display: none; }
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1225
1477
|
/* footer: brand block, link columns, bottom row. One hairline on top, white like the page. */
|
|
1226
1478
|
.gw-footer {
|
|
1227
|
-
padding-block: 64px
|
|
1479
|
+
padding-block: 64px 32px;
|
|
1228
1480
|
border-top: 1px solid var(--gw-line);
|
|
1229
|
-
background:
|
|
1481
|
+
background: transparent;
|
|
1230
1482
|
color: var(--gw-ink);
|
|
1231
1483
|
font-size: 14px;
|
|
1232
1484
|
}
|
|
1233
1485
|
.gw-footer__grid {
|
|
1234
1486
|
display: grid;
|
|
1235
1487
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1236
|
-
gap: 32px
|
|
1237
|
-
}
|
|
1238
|
-
.gw-footer__brand {
|
|
1239
|
-
.gw-footer__brand
|
|
1240
|
-
.gw-
|
|
1488
|
+
gap: 32px;
|
|
1489
|
+
}
|
|
1490
|
+
.gw-footer__brand p { max-width: 30ch; margin-top: 16px; color: var(--gw-muted); line-height: 22px; }
|
|
1491
|
+
.gw-footer__brand .gw-brand { display: flex; min-height: 34px; font-family: var(--gw-font); line-height: 1.6; }
|
|
1492
|
+
.gw-footer__brand .gw-brand__mark { width: 34px; height: 34px; border-radius: var(--gw-radius-8); }
|
|
1493
|
+
/* the brand's name, the column headings and the wordmark are set in the kit's face (--gw-font), whatever the page
|
|
1494
|
+
does to its body or its h2 (a page in Chinese puts PingFang first; gemboss.ai keeps Inter for these three); a
|
|
1495
|
+
heading is balanced, like gemboss.ai's main pages */
|
|
1496
|
+
.gw-footer__heading { margin: 0 0 12px; color: var(--gw-ink); font-family: var(--gw-font); font-size: 13px; font-weight: 600; letter-spacing: 0; line-height: 1.6; text-wrap: balance; }
|
|
1241
1497
|
/* an optional newsletter form in the brand block (0.6.0): label, the inline row (field and button), a note on what the
|
|
1242
1498
|
reader agrees to; only when the form is wired to a list that keeps the address */
|
|
1243
1499
|
.gw-footer__newsletter { margin-top: 24px; }
|
|
@@ -1250,33 +1506,35 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1250
1506
|
flex-wrap: wrap;
|
|
1251
1507
|
align-items: center;
|
|
1252
1508
|
justify-content: space-between;
|
|
1253
|
-
gap:
|
|
1254
|
-
margin-top:
|
|
1509
|
+
gap: 12px 24px;
|
|
1510
|
+
margin-top: 32px;
|
|
1255
1511
|
padding-top: 24px;
|
|
1256
1512
|
border-top: 1px solid var(--gw-line);
|
|
1257
1513
|
color: var(--gw-muted);
|
|
1258
1514
|
font-size: 13px;
|
|
1259
1515
|
}
|
|
1260
1516
|
.gw-footer__bottom:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
|
|
1261
|
-
.gw-footer__bottom ul { display: flex; flex-wrap: wrap; gap:
|
|
1517
|
+
.gw-footer__bottom ul { display: flex; flex-wrap: wrap; gap: 16px; margin: 0; padding: 0; list-style: none; }
|
|
1262
1518
|
.gw-footer__bottom a {
|
|
1263
1519
|
display: inline-flex;
|
|
1264
1520
|
align-items: center;
|
|
1265
1521
|
justify-content: center;
|
|
1266
|
-
min-width: 24px;
|
|
1267
|
-
min-height: 24px;
|
|
1268
1522
|
color: var(--gw-muted);
|
|
1269
1523
|
}
|
|
1270
1524
|
.gw-footer__bottom a:hover { color: var(--gw-ink); }
|
|
1271
|
-
@media (
|
|
1272
|
-
.gw-footer__grid {
|
|
1525
|
+
@media (max-width: 620px) {
|
|
1526
|
+
.gw-footer__grid { gap: 24px 20px; }
|
|
1527
|
+
.gw-footer__brand { grid-column: 1 / -1; }
|
|
1273
1528
|
}
|
|
1274
|
-
@media (min-width:
|
|
1275
|
-
.gw-footer__grid { grid-auto-flow: column; grid-template-columns: minmax(0, 1.6fr); grid-auto-columns: minmax(0, 1fr); }
|
|
1276
|
-
.gw-footer__brand { grid-column: auto; }
|
|
1529
|
+
@media (min-width: 1081px) {
|
|
1530
|
+
.gw-footer__grid { grid-auto-flow: column; grid-template-columns: minmax(0, 1.6fr); grid-auto-columns: minmax(0, 1fr); gap: 32px 24px; }
|
|
1277
1531
|
}
|
|
1278
1532
|
@media (max-width: 768px), (pointer: coarse) {
|
|
1533
|
+
.gw-footer__brand .gw-brand { min-height: var(--gw-tap-min); }
|
|
1534
|
+
.gw-footer__col a { display: flex; align-items: center; min-height: var(--gw-tap-min); padding-block: 0; }
|
|
1279
1535
|
.gw-footer__bottom a { min-height: var(--gw-tap-min); }
|
|
1536
|
+
.gw-footer__bottom ul:last-child a { min-width: var(--gw-tap-min); }
|
|
1537
|
+
.gw-footer__bottom ul:not(:last-child) { gap: 8px 16px; }
|
|
1280
1538
|
}
|
|
1281
1539
|
|
|
1282
1540
|
/* ---- 0.7.0: the footer as gemboss.ai has it (issue #71) ---------------------------------------------------------------
|
|
@@ -1290,16 +1548,14 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1290
1548
|
touch. */
|
|
1291
1549
|
.gw-footer__ask { margin-top: 24px; }
|
|
1292
1550
|
/* the row may run wider than the brand's sentence (four names on one line at 390px) */
|
|
1293
|
-
.gw-
|
|
1294
|
-
.gw-footer__brand:has(> .gw-footer__ask) > :not(.gw-footer__ask) { max-width: 320px; }
|
|
1295
|
-
.gw-footer__ask > .gw-footer__ask-label { margin: 0; color: var(--gw-muted); font-size: 13px; }
|
|
1551
|
+
.gw-footer__ask > .gw-footer__ask-label { margin: 0; color: var(--gw-muted); font-size: 13px; line-height: 22px; }
|
|
1296
1552
|
.gw-footer__ask > ul { display: flex; flex-wrap: wrap; gap: 0 16px; margin: 4px 0 0; padding: 0; list-style: none; }
|
|
1297
1553
|
.gw-footer__ask a { display: block; padding-block: 4px; color: var(--gw-ink); line-height: 20px; }
|
|
1298
|
-
.gw-footer__ask a:hover { text-decoration: underline;
|
|
1554
|
+
.gw-footer__ask a:hover { text-decoration: underline; }
|
|
1299
1555
|
|
|
1300
1556
|
/* the mark after a link that leaves the site (↗, drawn), aria-hidden; the words "(opens in a new tab)" are a separate
|
|
1301
1557
|
.gw-visually-hidden span, only when the link has target="_blank" */
|
|
1302
|
-
.gw-footer__ext {
|
|
1558
|
+
.gw-footer__ext:empty {
|
|
1303
1559
|
display: inline-block;
|
|
1304
1560
|
width: 12px;
|
|
1305
1561
|
height: 12px;
|
|
@@ -1309,6 +1565,7 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1309
1565
|
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3.5 8.5l5-5M4.5 3.5h4v4' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 12px no-repeat;
|
|
1310
1566
|
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3.5 8.5l5-5M4.5 3.5h4v4' fill='none' stroke='%23000' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 12px no-repeat;
|
|
1311
1567
|
}
|
|
1568
|
+
.gw-footer__ext:not(:empty) { color: var(--gw-muted); font-weight: 400; }
|
|
1312
1569
|
|
|
1313
1570
|
/* Folds: <details class="gw-footer__fold"> inside a .gw-footer__col (or a .gw-footer__family), its <summary> holding the
|
|
1314
1571
|
.gw-footer__heading, then the <ul>. Below 768px each is a 52px row with a chevron, folded unless the markup says
|
|
@@ -1317,48 +1574,52 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1317
1574
|
(::details-content; website.js also sets `open` there, for browsers without it). */
|
|
1318
1575
|
.gw-footer__fold > summary { list-style: none; }
|
|
1319
1576
|
.gw-footer__fold > summary::-webkit-details-marker { display: none; }
|
|
1320
|
-
.gw-footer__fold .gw-footer__heading { margin: 0;
|
|
1577
|
+
.gw-footer__fold .gw-footer__heading { margin: 0; }
|
|
1321
1578
|
.gw-footer__fold > ul { margin: 0; padding: 0; list-style: none; }
|
|
1322
1579
|
.gw-footer__col > .gw-footer__fold a { line-height: 20px; }
|
|
1323
|
-
@media (min-width:
|
|
1580
|
+
@media (min-width: 621px) {
|
|
1324
1581
|
.gw-footer__fold > summary { display: contents; }
|
|
1325
1582
|
.gw-footer__col > .gw-footer__fold .gw-footer__heading { margin-bottom: 12px; }
|
|
1326
1583
|
}
|
|
1327
|
-
@media (min-width:
|
|
1584
|
+
@media (min-width: 621px) {
|
|
1328
1585
|
.gw-footer__fold::details-content { content-visibility: visible; }
|
|
1329
1586
|
}
|
|
1330
|
-
@media (max-width:
|
|
1587
|
+
@media (max-width: 620px) {
|
|
1331
1588
|
.gw-footer__grid:has(> .gw-footer__col > .gw-footer__fold) { grid-template-columns: minmax(0, 1fr); row-gap: 0; }
|
|
1332
1589
|
.gw-footer__grid:has(> .gw-footer__col > .gw-footer__fold) > .gw-footer__brand { padding-bottom: 24px; }
|
|
1333
|
-
.
|
|
1590
|
+
/* a column's hairline on top, the last column's below too, a family row's below (gemboss.ai's order: a focused
|
|
1591
|
+
row's ring passes under the next row's line) */
|
|
1592
|
+
.gw-footer__col:has(> .gw-footer__fold) { border-top: 1px solid var(--gw-line); }
|
|
1593
|
+
.gw-footer__col:has(> .gw-footer__fold):last-child,
|
|
1334
1594
|
.gw-footer__family { border-bottom: 1px solid var(--gw-line); }
|
|
1335
|
-
.gw-footer__brand + .gw-footer__col:has(> .gw-footer__fold) { border-top: 1px solid var(--gw-line); }
|
|
1336
1595
|
.gw-footer__fold > summary {
|
|
1337
1596
|
display: flex;
|
|
1338
1597
|
align-items: center;
|
|
1339
1598
|
justify-content: space-between;
|
|
1340
1599
|
gap: 16px;
|
|
1341
|
-
min-height:
|
|
1342
|
-
padding
|
|
1600
|
+
min-height: 52px;
|
|
1601
|
+
padding: 0;
|
|
1343
1602
|
cursor: pointer;
|
|
1344
1603
|
}
|
|
1345
1604
|
.gw-footer__fold > summary::after {
|
|
1346
1605
|
content: "";
|
|
1347
1606
|
flex: none;
|
|
1348
|
-
width:
|
|
1349
|
-
height:
|
|
1350
|
-
|
|
1351
|
-
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1607
|
+
width: 8px;
|
|
1608
|
+
height: 8px;
|
|
1609
|
+
margin-right: 4px;
|
|
1610
|
+
border-right: 2px solid var(--gw-muted);
|
|
1611
|
+
border-bottom: 2px solid var(--gw-muted);
|
|
1612
|
+
rotate: 45deg;
|
|
1613
|
+
translate: 0 -2px;
|
|
1354
1614
|
}
|
|
1355
|
-
.gw-footer__fold[open] > summary::after {
|
|
1615
|
+
.gw-footer__fold[open] > summary::after { rotate: 225deg; translate: 0 2px; }
|
|
1616
|
+
.gw-footer__fold > summary:focus-visible { outline: 2px solid var(--gw-accent); outline-offset: 2px; border-radius: var(--gw-radius-6); }
|
|
1356
1617
|
.gw-footer__fold > ul { padding-bottom: 12px; }
|
|
1357
1618
|
.gw-footer__col > .gw-footer__fold a { display: flex; align-items: center; min-height: var(--gw-tap-min); }
|
|
1358
1619
|
}
|
|
1359
1620
|
/* desktop: the brand's track is as wide as gemboss.ai draws it beside five columns (1.2 parts of 6.2, after five 24px
|
|
1360
1621
|
gaps), whatever the number of columns, so a family row can line up with it; the columns share the rest */
|
|
1361
|
-
@media (min-width:
|
|
1622
|
+
@media (min-width: 1081px) {
|
|
1362
1623
|
.gw-footer__grid:has(> .gw-footer__col > .gw-footer__fold) { grid-template-columns: minmax(0, calc((100% - 120px) * 6 / 31)); }
|
|
1363
1624
|
}
|
|
1364
1625
|
|
|
@@ -1368,6 +1629,8 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1368
1629
|
the items start where the first column starts. */
|
|
1369
1630
|
.gw-footer__family .gw-footer__heading { color: var(--gw-muted); font-weight: 500; }
|
|
1370
1631
|
.gw-footer__family .gw-footer__fold > ul { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
|
|
1632
|
+
.gw-footer__family .gw-footer__fold > ul > li { display: flex; }
|
|
1633
|
+
.gw-footer__family .gw-footer__fold > ul > li > a { flex: 1 1 auto; }
|
|
1371
1634
|
.gw-footer__family a {
|
|
1372
1635
|
display: flex;
|
|
1373
1636
|
flex-direction: column;
|
|
@@ -1381,14 +1644,18 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1381
1644
|
.gw-footer__family a:hover { background: var(--gw-bg-soft); }
|
|
1382
1645
|
.gw-footer__family b { font-size: 14px; font-weight: 600; line-height: 20px; }
|
|
1383
1646
|
.gw-footer__family i { color: var(--gw-muted); font-size: 13px; font-style: normal; line-height: 18px; }
|
|
1384
|
-
@media (min-width:
|
|
1647
|
+
@media (min-width: 621px) {
|
|
1385
1648
|
.gw-footer__family { margin-top: 48px; padding-top: 32px; border-top: 1px solid var(--gw-line); }
|
|
1386
1649
|
.gw-footer__family .gw-footer__heading { margin-bottom: 12px; }
|
|
1387
|
-
.gw-footer__family .gw-footer__fold > ul { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px 16px;
|
|
1650
|
+
.gw-footer__family .gw-footer__fold > ul { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px 16px; }
|
|
1388
1651
|
.gw-footer__family a { min-height: 0; padding: 8px 12px; }
|
|
1389
1652
|
.gw-footer__family + .gw-footer__bottom { margin-top: 32px; }
|
|
1390
1653
|
}
|
|
1391
|
-
@media (min-width:
|
|
1654
|
+
@media (min-width: 621px) and (max-width: 768px) {
|
|
1655
|
+
.gw-footer__family a { min-height: var(--gw-tap-min); }
|
|
1656
|
+
}
|
|
1657
|
+
@media (min-width: 1081px) {
|
|
1658
|
+
.gw-footer__family .gw-footer__fold > ul { margin-left: -12px; }
|
|
1392
1659
|
.gw-footer__family { display: flow-root; }
|
|
1393
1660
|
.gw-footer__family .gw-footer__heading { float: left; width: calc((100% - 120px) * 6 / 31); margin: 8px 0 0; }
|
|
1394
1661
|
.gw-footer__family .gw-footer__fold > ul { margin-left: calc((100% - 120px) * 6 / 31 + 12px); }
|
|
@@ -1396,7 +1663,7 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1396
1663
|
|
|
1397
1664
|
/* The theme toggle in the bottom row (.gw-theme-toggle with data-gw-theme-toggle, wired like the header's): a 32px
|
|
1398
1665
|
square with one hairline, its hit area 40px, 44px on touch. It pushes itself and the social links to the right.
|
|
1399
|
-
|
|
1666
|
+
Up to 620px the copyright and the toggle share the first line, legal and social links the second. */
|
|
1400
1667
|
.gw-footer__toggle {
|
|
1401
1668
|
position: relative;
|
|
1402
1669
|
width: 32px;
|
|
@@ -1407,12 +1674,15 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1407
1674
|
}
|
|
1408
1675
|
.gw-footer__toggle::after { content: ""; position: absolute; inset: -5px; }
|
|
1409
1676
|
.gw-footer__toggle svg { width: 18px; height: 18px; }
|
|
1677
|
+
/* on hover the hairline turns ink and the icon the accent, the ground stays (gemboss.ai's); colour only, 0.15s */
|
|
1678
|
+
.gw-footer__toggle { transition: border-color 0.15s, color 0.15s; }
|
|
1679
|
+
.gw-footer__toggle:hover { border-color: var(--gw-ink); background: var(--gw-surface); color: var(--gw-accent); }
|
|
1410
1680
|
@media (max-width: 768px), (pointer: coarse) {
|
|
1411
1681
|
.gw-footer__toggle { width: var(--gw-tap-min); height: var(--gw-tap-min); }
|
|
1412
1682
|
}
|
|
1413
|
-
@media (max-width:
|
|
1414
|
-
.gw-footer__bottom:has(> .gw-footer__toggle) {
|
|
1415
|
-
.gw-footer__bottom:has(> .gw-footer__toggle) > :first-child { flex: 1 1 calc(100% -
|
|
1683
|
+
@media (max-width: 620px) {
|
|
1684
|
+
.gw-footer__bottom:has(> .gw-footer__toggle) { gap: 8px 16px; }
|
|
1685
|
+
.gw-footer__bottom:has(> .gw-footer__toggle) > :first-child { flex: 1 1 calc(100% - 64px); }
|
|
1416
1686
|
.gw-footer__bottom > .gw-footer__toggle { order: 1; margin: 0; }
|
|
1417
1687
|
.gw-footer__bottom:has(> .gw-footer__toggle) > ul { order: 2; }
|
|
1418
1688
|
.gw-footer__family + .gw-footer__bottom,
|
|
@@ -1422,39 +1692,37 @@ html.is-menu-open .gw-header:has(> .gw-mobile-menu.is-drill) { position: sticky;
|
|
|
1422
1692
|
/* The wordmark: the brand's mark and name, large and faint, the footer's last line. Decoration (aria-hidden="true"):
|
|
1423
1693
|
the name is already in the brand block. Its size follows the viewport (--gw-display-wordmark) and it never makes the
|
|
1424
1694
|
page scroll sideways: a name too long for the line is cut. The mark is drawn in currentColor (an inline SVG); an
|
|
1425
|
-
<img> mark keeps its own colours, so leave it out and keep the name.
|
|
1426
|
-
|
|
1427
|
-
|
|
1695
|
+
<img> mark keeps its own colours, so leave it out and keep the name. Values are gemboss.ai's, 1:1 (Chris 26/10/2026):
|
|
1696
|
+
weight 800, 48px above, nothing below but the footer's own 32px, the mark 7vw wide (40–96px), hidden up to 620px.
|
|
1697
|
+
The footer is not painted (transparent on the page), so the breathing gate reads it as part of the page. */
|
|
1428
1698
|
.gw-footer__wordmark {
|
|
1429
1699
|
display: flex;
|
|
1430
1700
|
align-items: center;
|
|
1431
1701
|
justify-content: center;
|
|
1432
1702
|
gap: 24px;
|
|
1433
|
-
padding-block: 48px
|
|
1703
|
+
padding-block: 48px 0;
|
|
1434
1704
|
color: color-mix(in srgb, var(--gw-ink) 10%, transparent);
|
|
1705
|
+
font-family: var(--gw-font);
|
|
1435
1706
|
font-size: var(--gw-display-wordmark);
|
|
1436
|
-
font-weight:
|
|
1707
|
+
font-weight: 800;
|
|
1437
1708
|
letter-spacing: var(--gw-display-tracking);
|
|
1438
1709
|
line-height: 1;
|
|
1439
1710
|
white-space: nowrap;
|
|
1440
1711
|
user-select: none;
|
|
1441
1712
|
}
|
|
1442
1713
|
.gw-footer__wordmark > svg,
|
|
1443
|
-
.gw-footer__wordmark > img { flex: none; width:
|
|
1714
|
+
.gw-footer__wordmark > img { flex: none; width: clamp(40px, 7vw, 96px); height: auto; }
|
|
1444
1715
|
.gw-footer__wordmark > span { min-width: 0; overflow-x: clip; }
|
|
1445
|
-
@media (max-width:
|
|
1446
|
-
@media (max-width:
|
|
1716
|
+
@media (max-width: 640px) { .gw-footer__wordmark { gap: 16px; } }
|
|
1717
|
+
@media (max-width: 620px) { .gw-footer__wordmark { display: none; } }
|
|
1447
1718
|
|
|
1448
1719
|
@media (max-width: 768px), (pointer: coarse) {
|
|
1449
1720
|
.gw-footer__ask a { display: flex; align-items: center; min-height: var(--gw-tap-min); padding-block: 0; }
|
|
1450
1721
|
}
|
|
1451
|
-
@media (prefers-reduced-motion: reduce) {
|
|
1452
|
-
.gw-footer__fold > summary::after { transition: none; }
|
|
1453
|
-
}
|
|
1454
1722
|
/* a forced-colours screen drops backgrounds: draw the chevron and the ↗ in its text colour */
|
|
1455
1723
|
@media (forced-colors: active) {
|
|
1456
|
-
.gw-footer__ext
|
|
1457
|
-
.gw-footer__fold > summary::after {
|
|
1724
|
+
.gw-footer__ext:empty { forced-color-adjust: none; background: CanvasText; }
|
|
1725
|
+
.gw-footer__fold > summary::after { border-color: CanvasText; }
|
|
1458
1726
|
}
|
|
1459
1727
|
|
|
1460
1728
|
/* sections: hero, logos, stats, features, split, showcase, steps, quote, pricing, CTA. */
|
|
@@ -2289,7 +2557,7 @@ a.gw-rating-badge:hover { border-color: var(--gw-line-strong); }
|
|
|
2289
2557
|
the build checks the words on. */
|
|
2290
2558
|
.gw-btn.gw-spot:not([aria-busy="true"])::before { --gw-spot-mix: var(--gw-spot-strength-action); }
|
|
2291
2559
|
/* the mega menu's feature card is the Stage, a night ground: a stronger light, or it would not show */
|
|
2292
|
-
.gw-
|
|
2560
|
+
.gw-mega__art.gw-spot:not([aria-busy="true"])::before { --gw-spot-mix: var(--gw-spot-strength-stage); }
|
|
2293
2561
|
|
|
2294
2562
|
/* words under the light: lit, muted words are ink-2 at once (rules above); back to muted only once the light has gone
|
|
2295
2563
|
out (a colour that waits the light's time, no movement). :where(), so a part's own transition wins. */
|