@brandlab-digital/site-next 3.14.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/analytics.d.ts +1 -1
  2. package/dist/analytics.d.ts.map +1 -1
  3. package/dist/analytics.js +2 -0
  4. package/dist/analytics.js.map +1 -1
  5. package/dist/navigation/constants.d.ts +11 -2
  6. package/dist/navigation/constants.d.ts.map +1 -1
  7. package/dist/navigation/constants.js +11 -2
  8. package/dist/navigation/constants.js.map +1 -1
  9. package/dist/navigation/index.d.ts +1 -1
  10. package/dist/navigation/index.d.ts.map +1 -1
  11. package/dist/navigation/index.js +1 -1
  12. package/dist/navigation/index.js.map +1 -1
  13. package/dist/navigation/use-back-to-top.d.ts.map +1 -1
  14. package/dist/navigation/use-back-to-top.js +12 -4
  15. package/dist/navigation/use-back-to-top.js.map +1 -1
  16. package/dist/navigation/use-header-metrics.d.ts +1 -1
  17. package/dist/navigation/use-header-metrics.js +1 -1
  18. package/dist/navigation/use-header-metrics.js.map +1 -1
  19. package/dist/navigation/use-sticky-call-bar.d.ts +2 -1
  20. package/dist/navigation/use-sticky-call-bar.d.ts.map +1 -1
  21. package/dist/navigation/use-sticky-call-bar.js +11 -2
  22. package/dist/navigation/use-sticky-call-bar.js.map +1 -1
  23. package/dist/ui-kit/brandlab-skin.d.ts +26 -0
  24. package/dist/ui-kit/brandlab-skin.d.ts.map +1 -1
  25. package/dist/ui-kit/brandlab-skin.js.map +1 -1
  26. package/dist/ui-kit/prefetch.d.ts +19 -10
  27. package/dist/ui-kit/prefetch.d.ts.map +1 -1
  28. package/dist/ui-kit/prefetch.js +23 -10
  29. package/dist/ui-kit/prefetch.js.map +1 -1
  30. package/dist/ui-kit/primitives/index.d.ts +1 -1
  31. package/dist/ui-kit/primitives/index.d.ts.map +1 -1
  32. package/dist/ui-kit/primitives/index.js.map +1 -1
  33. package/dist/ui-kit/primitives/links.js +1 -1
  34. package/dist/ui-kit/primitives/links.js.map +1 -1
  35. package/dist/ui-kit/primitives/lists.d.ts +9 -1
  36. package/dist/ui-kit/primitives/lists.d.ts.map +1 -1
  37. package/dist/ui-kit/primitives/lists.js +1 -1
  38. package/dist/ui-kit/primitives/lists.js.map +1 -1
  39. package/dist/ui-kit/primitives/quote-button.d.ts +25 -2
  40. package/dist/ui-kit/primitives/quote-button.d.ts.map +1 -1
  41. package/dist/ui-kit/primitives/quote-button.js +25 -3
  42. package/dist/ui-kit/primitives/quote-button.js.map +1 -1
  43. package/dist/ui-kit/repeated-slots.d.ts +32 -0
  44. package/dist/ui-kit/repeated-slots.d.ts.map +1 -1
  45. package/dist/ui-kit/repeated-slots.js +16 -0
  46. package/dist/ui-kit/repeated-slots.js.map +1 -1
  47. package/dist/ui-kit/sections/area-map.d.ts +64 -0
  48. package/dist/ui-kit/sections/area-map.d.ts.map +1 -0
  49. package/dist/ui-kit/sections/area-map.js +142 -0
  50. package/dist/ui-kit/sections/area-map.js.map +1 -0
  51. package/dist/ui-kit/sections/before-after.d.ts +59 -0
  52. package/dist/ui-kit/sections/before-after.d.ts.map +1 -0
  53. package/dist/ui-kit/sections/before-after.js +42 -0
  54. package/dist/ui-kit/sections/before-after.js.map +1 -0
  55. package/dist/ui-kit/sections/council-rules.d.ts +64 -0
  56. package/dist/ui-kit/sections/council-rules.d.ts.map +1 -0
  57. package/dist/ui-kit/sections/council-rules.js +46 -0
  58. package/dist/ui-kit/sections/council-rules.js.map +1 -0
  59. package/dist/ui-kit/sections/coverage.d.ts +53 -0
  60. package/dist/ui-kit/sections/coverage.d.ts.map +1 -0
  61. package/dist/ui-kit/sections/coverage.js +57 -0
  62. package/dist/ui-kit/sections/coverage.js.map +1 -0
  63. package/dist/ui-kit/sections/emergency-band.d.ts +60 -0
  64. package/dist/ui-kit/sections/emergency-band.d.ts.map +1 -0
  65. package/dist/ui-kit/sections/emergency-band.js +43 -0
  66. package/dist/ui-kit/sections/emergency-band.js.map +1 -0
  67. package/dist/ui-kit/sections/gallery.d.ts +60 -0
  68. package/dist/ui-kit/sections/gallery.d.ts.map +1 -0
  69. package/dist/ui-kit/sections/gallery.js +39 -0
  70. package/dist/ui-kit/sections/gallery.js.map +1 -0
  71. package/dist/ui-kit/sections/hero.d.ts +5 -0
  72. package/dist/ui-kit/sections/hero.d.ts.map +1 -1
  73. package/dist/ui-kit/sections/hero.js +1 -1
  74. package/dist/ui-kit/sections/hero.js.map +1 -1
  75. package/dist/ui-kit/sections/index.d.ts +14 -1
  76. package/dist/ui-kit/sections/index.d.ts.map +1 -1
  77. package/dist/ui-kit/sections/index.js +14 -1
  78. package/dist/ui-kit/sections/index.js.map +1 -1
  79. package/dist/ui-kit/sections/licences.d.ts +72 -0
  80. package/dist/ui-kit/sections/licences.d.ts.map +1 -0
  81. package/dist/ui-kit/sections/licences.js +46 -0
  82. package/dist/ui-kit/sections/licences.js.map +1 -0
  83. package/dist/ui-kit/sections/local-facts.d.ts +78 -0
  84. package/dist/ui-kit/sections/local-facts.d.ts.map +1 -0
  85. package/dist/ui-kit/sections/local-facts.js +32 -0
  86. package/dist/ui-kit/sections/local-facts.js.map +1 -0
  87. package/dist/ui-kit/sections/nearby-areas.d.ts +50 -0
  88. package/dist/ui-kit/sections/nearby-areas.d.ts.map +1 -0
  89. package/dist/ui-kit/sections/nearby-areas.js +49 -0
  90. package/dist/ui-kit/sections/nearby-areas.js.map +1 -0
  91. package/dist/ui-kit/sections/nearby-jobs.d.ts +66 -0
  92. package/dist/ui-kit/sections/nearby-jobs.d.ts.map +1 -0
  93. package/dist/ui-kit/sections/nearby-jobs.js +49 -0
  94. package/dist/ui-kit/sections/nearby-jobs.js.map +1 -0
  95. package/dist/ui-kit/sections/projects.d.ts +79 -0
  96. package/dist/ui-kit/sections/projects.d.ts.map +1 -0
  97. package/dist/ui-kit/sections/projects.js +69 -0
  98. package/dist/ui-kit/sections/projects.js.map +1 -0
  99. package/dist/ui-kit/sections/quote-checklist.d.ts +43 -0
  100. package/dist/ui-kit/sections/quote-checklist.d.ts.map +1 -0
  101. package/dist/ui-kit/sections/quote-checklist.js +19 -0
  102. package/dist/ui-kit/sections/quote-checklist.js.map +1 -0
  103. package/dist/ui-kit/sections/related-services.d.ts +41 -0
  104. package/dist/ui-kit/sections/related-services.d.ts.map +1 -0
  105. package/dist/ui-kit/sections/related-services.js +52 -0
  106. package/dist/ui-kit/sections/related-services.js.map +1 -0
  107. package/dist/ui-kit/sections/reviews-band.d.ts +11 -0
  108. package/dist/ui-kit/sections/reviews-band.d.ts.map +1 -1
  109. package/dist/ui-kit/sections/reviews-band.js +11 -0
  110. package/dist/ui-kit/sections/reviews-band.js.map +1 -1
  111. package/dist/ui-kit/sections/services-grid.js +1 -1
  112. package/dist/ui-kit/sections/services-grid.js.map +1 -1
  113. package/dist/ui-kit/sections/work-photos.d.ts +15 -0
  114. package/dist/ui-kit/sections/work-photos.d.ts.map +1 -0
  115. package/dist/ui-kit/sections/work-photos.js +24 -0
  116. package/dist/ui-kit/sections/work-photos.js.map +1 -0
  117. package/dist/ui-kit/shell/back-to-top.js +1 -1
  118. package/dist/ui-kit/shell/back-to-top.js.map +1 -1
  119. package/dist/ui-kit/shell/current-link.d.ts +21 -5
  120. package/dist/ui-kit/shell/current-link.d.ts.map +1 -1
  121. package/dist/ui-kit/shell/current-link.js +16 -5
  122. package/dist/ui-kit/shell/current-link.js.map +1 -1
  123. package/dist/ui-kit/shell/drawer-client.js +1 -1
  124. package/dist/ui-kit/shell/drawer-client.js.map +1 -1
  125. package/dist/ui-kit/shell/intent-prefetch.d.ts.map +1 -1
  126. package/dist/ui-kit/shell/intent-prefetch.js +3 -2
  127. package/dist/ui-kit/shell/intent-prefetch.js.map +1 -1
  128. package/dist/ui-kit/shell/mobile-call-bar.d.ts +6 -1
  129. package/dist/ui-kit/shell/mobile-call-bar.d.ts.map +1 -1
  130. package/dist/ui-kit/shell/mobile-call-bar.js +6 -3
  131. package/dist/ui-kit/shell/mobile-call-bar.js.map +1 -1
  132. package/dist/ui-kit/shell/mobile-drawer.js +2 -2
  133. package/dist/ui-kit/shell/mobile-drawer.js.map +1 -1
  134. package/dist/ui-kit/shell/shell-quote.d.ts +10 -0
  135. package/dist/ui-kit/shell/shell-quote.d.ts.map +1 -0
  136. package/dist/ui-kit/shell/shell-quote.js +13 -0
  137. package/dist/ui-kit/shell/shell-quote.js.map +1 -0
  138. package/dist/ui-kit/shell/site-header.d.ts +1 -1
  139. package/dist/ui-kit/shell/site-header.js +4 -4
  140. package/dist/ui-kit/shell/site-header.js.map +1 -1
  141. package/dist/ui-kit/structure.css +410 -7
  142. package/package.json +2 -2
@@ -385,7 +385,7 @@
385
385
  height: var(--bl-logo-h-phone, 40px);
386
386
  }
387
387
 
388
- /* The menu: hidden below 1280 px (the drawer takes over). */
388
+ /* The menu: hidden below 1200 px (the drawer takes over). */
389
389
  [data-bl='header'] [data-slot='inner'] > [data-slot='nav'] {
390
390
  display: none;
391
391
  flex: 1;
@@ -559,7 +559,7 @@
559
559
  height: 1.25rem;
560
560
  }
561
561
 
562
- /* 1024 to 1279 px: the compact band. Logo, phone with its number, quote and Menu. */
562
+ /* 1024 to 1199 px: the compact band. Logo, phone with its number, quote and Menu. The phone stays from 1024 px up. */
563
563
  @container bl-header (min-width: 1024px) {
564
564
  [data-bl='header'] > [data-slot='bar'] > [data-slot='inner'] {
565
565
  min-height: var(--bl-header-bar, 5rem);
@@ -599,8 +599,8 @@
599
599
  }
600
600
  }
601
601
 
602
- /* 1280 px and up: the full menu. */
603
- @container bl-header (min-width: 1280px) {
602
+ /* 1200 px and up: the full menu, with the phone and quote still beside it. */
603
+ @container bl-header (min-width: 1200px) {
604
604
  [data-bl='header'] [data-slot='inner'] > [data-slot='nav'] {
605
605
  display: block;
606
606
  }
@@ -834,13 +834,22 @@
834
834
  color: var(--bl-color-ink, CanvasText);
835
835
  transition: translate 200ms ease, visibility 0s;
836
836
  }
837
- [data-bl='callbar'] > :is([data-bl='phone-link'], [data-bl='quote-button']) {
838
- flex: 1 1 0;
837
+ /*
838
+ * One line each down to 360 px (3.15.0): the buttons size to their content, the number never wraps, and the inline
839
+ * padding (`--bl-callbar-button-padding`) outranks a skin's general button padding, so a skin tunes it by the token.
840
+ */
841
+ [data-bl='callbar'][data-variant] > :is([data-bl='phone-link'], [data-bl='quote-button']) {
842
+ flex: 1 1 auto;
839
843
  justify-content: center;
840
844
  min-width: 0;
841
845
  min-height: 48px;
846
+ padding-inline: var(--bl-callbar-button-padding, 0.75rem);
847
+ white-space: nowrap;
842
848
  text-decoration: none;
843
849
  }
850
+ [data-bl='callbar'] [data-bl='phone-link'] [data-slot='number'] {
851
+ white-space: nowrap;
852
+ }
844
853
  [data-bl='callbar'][data-variant='float'] {
845
854
  inset-inline: auto 0;
846
855
  justify-content: flex-end;
@@ -849,6 +858,25 @@
849
858
  [data-bl='callbar'][data-variant='float'] > :is([data-bl='phone-link'], [data-bl='quote-button']) {
850
859
  flex: none;
851
860
  }
861
+ /*
862
+ * Narrow phones: the verb before the number is visually hidden (the link's name still reads "Call 0497 777 735"), and
863
+ * a quote button with a compact label draws it from the attribute with empty alternative text, so its name stays the
864
+ * full label, which contains it (WCAG 2.5.3).
865
+ */
866
+ @media (max-width: 419.98px) {
867
+ [data-bl='callbar'] [data-bl='phone-link'] [data-slot='label'],
868
+ [data-bl='callbar'] [data-slot='label'][data-compact-label] > [data-bl-full-label] {
869
+ position: absolute;
870
+ width: 1px;
871
+ height: 1px;
872
+ overflow: hidden;
873
+ clip-path: inset(50%);
874
+ white-space: nowrap;
875
+ }
876
+ [data-bl='callbar'] [data-slot='label'][data-compact-label]::after {
877
+ content: attr(data-compact-label) / '';
878
+ }
879
+ }
852
880
  [data-bl='callbar'][data-state='hidden'] {
853
881
  visibility: hidden;
854
882
  translate: 0 100%;
@@ -861,7 +889,10 @@
861
889
  }
862
890
 
863
891
  /* 14-back-to-top.css */
864
- /* F7 back-to-top: a 44 px button in a bottom corner, above the call bar while it shows. */
892
+ /*
893
+ * F7 back-to-top: a 44 px button in a bottom corner. The hook hides it while the phone call bar shows (3.15.0); the
894
+ * bottom offset still clears the bar's height while the bar slides away.
895
+ */
865
896
 
866
897
  [data-bl='back-to-top'] {
867
898
  --bl-back-to-top-offset: 1.25rem;
@@ -1860,4 +1891,376 @@
1860
1891
  }
1861
1892
  }
1862
1893
 
1894
+ /* 40-location.css */
1895
+ /* Location sections (3.15.0): LocalFacts, CouncilRules, NearbyJobs, NearbyAreas, Coverage and RelatedServices. Layout
1896
+ only; the link lists are `LinkList`s (05-primitives.css) and the job and service cards follow 39-services.css. Lists
1897
+ styled without bullets carry role="list", so Safari keeps announcing them as lists. */
1898
+
1899
+ [data-bl-section='local-facts'] [data-slot='facts'],
1900
+ [data-bl-section='local-facts'] [data-slot='fees'],
1901
+ [data-bl-section='council-rules'] [data-slot='fees'],
1902
+ [data-bl-section='nearby-jobs'] [data-slot='list'],
1903
+ [data-bl-section='related-services'] [data-slot='list'] {
1904
+ margin: 0;
1905
+ padding: 0;
1906
+ list-style: none;
1907
+ }
1908
+ [data-bl-section='local-facts'] [data-slot='source'] > a,
1909
+ [data-bl-section='council-rules'] [data-slot='source'] > a,
1910
+ [data-bl-section='local-facts'] [data-slot='councilLink'] > a {
1911
+ display: inline-block;
1912
+ padding-block: 0.25rem;
1913
+ }
1914
+
1915
+ /* Nearby jobs: the photo on top of each card; a grid of up to 3 columns, or a scrolling rail. */
1916
+ [data-bl-section='nearby-jobs'] {
1917
+ container: bl-nearby-jobs / inline-size;
1918
+ }
1919
+ [data-bl-section='nearby-jobs'] [data-slot='list'] > [data-slot='item'] {
1920
+ display: flex;
1921
+ flex-direction: column;
1922
+ gap: 0.75rem;
1923
+ }
1924
+ [data-bl-section='nearby-jobs'] [data-slot='list'] > [data-slot='item'] > [data-slot='media'] {
1925
+ order: -1;
1926
+ }
1927
+ [data-bl-section='nearby-jobs'] [data-slot='list'] [data-slot='title'] {
1928
+ margin: 0;
1929
+ }
1930
+ [data-bl-section='nearby-jobs'][data-variant='grid'] [data-slot='list'] {
1931
+ display: grid;
1932
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr));
1933
+ gap: var(--bl-gutter, 1.25rem);
1934
+ }
1935
+ [data-bl-section='nearby-jobs'][data-variant='rail'] [data-slot='list'] {
1936
+ display: grid;
1937
+ grid-auto-flow: column;
1938
+ grid-auto-columns: minmax(16rem, 80%);
1939
+ gap: var(--bl-gutter, 1.25rem);
1940
+ overflow-x: auto;
1941
+ scroll-snap-type: x mandatory;
1942
+ }
1943
+ [data-bl-section='nearby-jobs'][data-variant='rail'] [data-slot='list'] > [data-slot='item'] {
1944
+ scroll-snap-align: start;
1945
+ }
1946
+ @container bl-nearby-jobs (min-width: 1024px) {
1947
+ [data-bl-section='nearby-jobs'][data-variant='grid'][data-columns='2'] [data-slot='list'] {
1948
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1949
+ }
1950
+ [data-bl-section='nearby-jobs'][data-variant='grid'][data-columns='3'] [data-slot='list'] {
1951
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1952
+ }
1953
+ [data-bl-section='nearby-jobs'][data-variant='rail'] [data-slot='list'] {
1954
+ grid-auto-columns: minmax(16rem, 1fr);
1955
+ }
1956
+ }
1957
+
1958
+ /* Nearby areas as chips: the links wrap in a row. */
1959
+ [data-bl-section='nearby-areas'][data-variant='chips'] [data-bl='link-list'] {
1960
+ display: flex;
1961
+ flex-wrap: wrap;
1962
+ gap: 0.5rem;
1963
+ }
1964
+
1965
+ /* Coverage: one block per group, its heading above its list. */
1966
+ [data-bl-section='coverage'] [data-slot='groups'] {
1967
+ display: grid;
1968
+ gap: 2rem;
1969
+ }
1970
+ [data-bl-section='coverage'] [data-slot='groups'] > [data-slot='group'] > [data-slot='groupHeading'] {
1971
+ margin: 0 0 0.75rem;
1972
+ }
1973
+
1974
+ /* Related services as cards: the photo on top. */
1975
+ [data-bl-section='related-services'][data-variant='cards'] [data-slot='list'] {
1976
+ display: grid;
1977
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 16rem), 1fr));
1978
+ gap: var(--bl-gutter, 1.25rem);
1979
+ }
1980
+ [data-bl-section='related-services'][data-variant='cards'] [data-slot='list'] > [data-slot='item'] {
1981
+ display: flex;
1982
+ flex-direction: column;
1983
+ gap: 0.75rem;
1984
+ }
1985
+ [data-bl-section='related-services'][data-variant='cards'] [data-slot='list'] > [data-slot='item'] > [data-slot='media'] {
1986
+ order: -1;
1987
+ }
1988
+ [data-bl-section='related-services'][data-variant='cards'] [data-slot='list'] [data-slot='title'] {
1989
+ margin: 0;
1990
+ }
1991
+
1992
+ /* 40-projects.css */
1993
+ /* Projects and Gallery (3.15.0): a grid of cards or photos, one column on phones, two from 640 px and the skin's
1994
+ columns from 1024 px of the section's own width. Lists styled without bullets carry role="list". */
1995
+
1996
+ [data-bl-section='projects'],
1997
+ [data-bl-section='gallery'] {
1998
+ container: bl-proof-grid / inline-size;
1999
+ }
2000
+ [data-bl-section='projects'] [data-slot='list'],
2001
+ [data-bl-section='gallery'] [data-slot='list'] {
2002
+ display: grid;
2003
+ grid-template-columns: minmax(0, 1fr);
2004
+ gap: var(--bl-gutter, 1.25rem);
2005
+ margin: 0;
2006
+ padding: 0;
2007
+ list-style: none;
2008
+ }
2009
+ [data-bl-section='gallery'] [data-slot='list'] > [data-slot='item'] > [data-slot='link'] {
2010
+ display: block;
2011
+ }
2012
+
2013
+ @container bl-proof-grid (min-width: 640px) {
2014
+ [data-bl-section='projects'] [data-slot='list'],
2015
+ [data-bl-section='gallery'] [data-slot='list'] {
2016
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2017
+ }
2018
+ }
2019
+ @container bl-proof-grid (min-width: 1024px) {
2020
+ [data-bl-section='projects'][data-columns='3'] [data-slot='list'],
2021
+ [data-bl-section='gallery'][data-columns='3'] [data-slot='list'] {
2022
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2023
+ }
2024
+ [data-bl-section='projects'][data-columns='4'] [data-slot='list'],
2025
+ [data-bl-section='gallery'][data-columns='4'] [data-slot='list'] {
2026
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2027
+ }
2028
+ }
2029
+
2030
+ /* 41-before-after.css */
2031
+ /* Before and after (3.15.0): each pair's two frames stacked on phones and side by side from 640 px of the section's
2032
+ width (`data-arrange="side"`), before first. Both frames share one crop, so they line up. */
2033
+
2034
+ [data-bl-section='before-after'] {
2035
+ container: bl-before-after / inline-size;
2036
+ }
2037
+ [data-bl-section='before-after'] [data-slot='list'] {
2038
+ display: grid;
2039
+ gap: calc(var(--bl-gutter, 1.25rem) * 2);
2040
+ margin: 0;
2041
+ padding: 0;
2042
+ list-style: none;
2043
+ }
2044
+ [data-bl-section='before-after'] [data-slot='list'] [data-slot='frames'] {
2045
+ display: grid;
2046
+ grid-template-columns: minmax(0, 1fr);
2047
+ gap: var(--bl-gutter, 1.25rem);
2048
+ }
2049
+
2050
+ @container bl-before-after (min-width: 640px) {
2051
+ [data-bl-section='before-after'][data-arrange='side'] [data-slot='list'] [data-slot='frames'] {
2052
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2053
+ }
2054
+ }
2055
+
2056
+ /* 42-licences.css */
2057
+ /* Licences (3.15.0): a ruled ledger, the label above its value on phones and beside it from 640 px of the section's
2058
+ width. The skin draws the rules and type. */
2059
+
2060
+ [data-bl-section='licences'] {
2061
+ container: bl-licences / inline-size;
2062
+ }
2063
+ [data-bl-section='licences'] [data-slot='list'] {
2064
+ margin: 0;
2065
+ }
2066
+ [data-bl-section='licences'] [data-slot='list'] > [data-slot='row'] {
2067
+ display: grid;
2068
+ gap: 0.25rem 2rem;
2069
+ padding-block: 1rem;
2070
+ }
2071
+ [data-bl-section='licences'] [data-slot='list'] [data-slot='row'] > dd {
2072
+ margin: 0;
2073
+ }
2074
+ [data-bl-section='licences'] [data-slot='list'] [data-slot='classes'] > ul {
2075
+ margin: 0;
2076
+ padding: 0;
2077
+ list-style: none;
2078
+ }
2079
+
2080
+ @container bl-licences (min-width: 640px) {
2081
+ [data-bl-section='licences'] [data-slot='list'] > [data-slot='row'] {
2082
+ grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
2083
+ }
2084
+ [data-bl-section='licences'] [data-slot='list'] > [data-slot='row'] > dt {
2085
+ grid-column: 1;
2086
+ grid-row: 1;
2087
+ }
2088
+ [data-bl-section='licences'] [data-slot='list'] > [data-slot='row'] > dd {
2089
+ grid-column: 2;
2090
+ }
2091
+ }
2092
+
2093
+ /* 43-quote-checklist.css */
2094
+ /* Quote checklist (3.15.0): heading, list, then the quote button; the list's columns are the TickList's. */
2095
+
2096
+ [data-bl='quote-checklist'] {
2097
+ display: grid;
2098
+ gap: 1rem;
2099
+ justify-items: start;
2100
+ }
2101
+ [data-bl='quote-checklist'] > [data-bl='tick-list'] {
2102
+ justify-self: stretch;
2103
+ }
2104
+ [data-bl='quote-checklist'] > p {
2105
+ margin: 0;
2106
+ }
2107
+
2108
+ /* 44-emergency.css */
2109
+ /* Emergency band (3.15.0): heading and summary, then the actions (phone first), side by side from 768 px of the
2110
+ band's width. The skin colours it. */
2111
+
2112
+ [data-bl-section='emergency'] {
2113
+ container: bl-emergency / inline-size;
2114
+ }
2115
+ [data-bl-section='emergency'] > [data-slot='inner'] {
2116
+ display: grid;
2117
+ gap: 1rem;
2118
+ }
2119
+ [data-bl-section='emergency'] [data-slot='actions'] {
2120
+ display: flex;
2121
+ flex-wrap: wrap;
2122
+ gap: 0.75rem;
2123
+ align-items: center;
2124
+ }
2125
+
2126
+ @container bl-emergency (min-width: 768px) {
2127
+ [data-bl-section='emergency'] > [data-slot='inner'] {
2128
+ grid-template-columns: minmax(0, 1fr) auto;
2129
+ align-items: center;
2130
+ column-gap: 2rem;
2131
+ }
2132
+ }
2133
+
2134
+ /* 45-area-map.css */
2135
+ /* Area map (3.15.0): the map and its place list, side by side from 768 px of the section's width (`data-list="beside"`)
2136
+ or stacked. The SVG's layers are `<use>` references into the base file, coloured here from the site's `--bl-map-*`
2137
+ tokens (falling back to its colour tokens); on narrow widths the frame shows the model's phone crop. */
2138
+
2139
+ [data-bl-section='area-map'] {
2140
+ container: bl-area-map / inline-size;
2141
+ }
2142
+ [data-bl-section='area-map'] [data-slot='body'] {
2143
+ display: grid;
2144
+ gap: var(--bl-gutter, 1.25rem);
2145
+ }
2146
+ [data-bl-section='area-map'] [data-slot='figure'] {
2147
+ margin: 0;
2148
+ display: grid;
2149
+ gap: 0.5rem;
2150
+ }
2151
+ [data-bl-section='area-map'] [data-slot='frame'] {
2152
+ position: relative;
2153
+ overflow: hidden;
2154
+ aspect-ratio: var(--bl-map-ratio, 1);
2155
+ }
2156
+ [data-bl-section='area-map'] [data-slot='map'] {
2157
+ display: block;
2158
+ width: 100%;
2159
+ height: auto;
2160
+ }
2161
+ [data-bl-section='area-map'] [data-slot='caption'] {
2162
+ display: grid;
2163
+ gap: 0.25rem;
2164
+ }
2165
+ [data-bl-section='area-map'] [data-slot='legend'] {
2166
+ display: flex;
2167
+ flex-wrap: wrap;
2168
+ gap: 0.25rem 1rem;
2169
+ }
2170
+ /* Each legend line starts with the marker it names, drawn in the same layer as the map's (3.15.0). */
2171
+ [data-bl-section='area-map'] :is([data-slot='legendJobs'], [data-slot='legendBase']) {
2172
+ display: inline-flex;
2173
+ align-items: center;
2174
+ gap: 0.4em;
2175
+ }
2176
+ [data-bl-section='area-map'] :is([data-slot='legendJobs'], [data-slot='legendBase']) > svg {
2177
+ width: 0.9em;
2178
+ height: 0.9em;
2179
+ }
2180
+ [data-bl-section='area-map'] [data-slot='places'] {
2181
+ display: grid;
2182
+ align-content: start;
2183
+ gap: 0.75rem;
2184
+ }
2185
+ [data-bl-section='area-map'] [data-slot='placesTitle'],
2186
+ [data-bl-section='area-map'] [data-slot='places'] > p {
2187
+ margin: 0;
2188
+ }
2189
+
2190
+ /* The layers. */
2191
+ [data-bl-section='area-map'] [data-layer='water'] {
2192
+ fill: var(--bl-map-water, transparent);
2193
+ }
2194
+ [data-bl-section='area-map'] [data-layer='land'] {
2195
+ fill: var(--bl-map-land, var(--bl-color-surface, Canvas));
2196
+ }
2197
+ [data-bl-section='area-map'] [data-layer='served'] {
2198
+ fill: var(--bl-map-served, var(--bl-color-canvas, Canvas));
2199
+ }
2200
+ [data-bl-section='area-map'] [data-layer='focus'] {
2201
+ fill: var(--bl-map-focus, var(--bl-color-action, Highlight));
2202
+ }
2203
+ [data-bl-section='area-map'] [data-layer='linked'] use {
2204
+ fill: var(--bl-map-linked, var(--bl-color-canvas, Canvas));
2205
+ }
2206
+ [data-bl-section='area-map'] [data-layer='linked'] a:hover use {
2207
+ fill: var(--bl-map-linked-hover, var(--bl-color-surface, Canvas));
2208
+ }
2209
+ [data-bl-section='area-map'] [data-layer='outline'] {
2210
+ stroke: var(--bl-map-outline, currentColor);
2211
+ stroke-opacity: 0.35;
2212
+ stroke-width: 1px;
2213
+ }
2214
+ [data-bl-section='area-map'] [data-layer='names'] {
2215
+ fill: var(--bl-map-name, var(--bl-color-ink, CanvasText));
2216
+ stroke: var(--bl-map-name-halo, var(--bl-color-canvas, Canvas));
2217
+ paint-order: stroke;
2218
+ text-anchor: middle;
2219
+ pointer-events: none;
2220
+ }
2221
+ [data-bl-section='area-map'] [data-layer='names'] [data-state='focus'] {
2222
+ font-weight: 700;
2223
+ }
2224
+ [data-bl-section='area-map'] [data-layer='jobs'] {
2225
+ fill: var(--bl-map-job, var(--bl-color-action, Highlight));
2226
+ stroke: var(--bl-color-canvas, Canvas);
2227
+ pointer-events: none;
2228
+ }
2229
+ [data-bl-section='area-map'] [data-layer='base'] {
2230
+ fill: var(--bl-map-base, var(--bl-color-ink, CanvasText));
2231
+ stroke: var(--bl-color-canvas, Canvas);
2232
+ pointer-events: none;
2233
+ }
2234
+
2235
+ /* Narrow widths: the phone crop around the served area. */
2236
+ @container bl-area-map (max-width: 639px) {
2237
+ [data-bl-section='area-map'] [data-slot='frame'] {
2238
+ aspect-ratio: var(--bl-map-crop-ratio, var(--bl-map-ratio, 1));
2239
+ }
2240
+ [data-bl-section='area-map'] [data-slot='map'] {
2241
+ position: absolute;
2242
+ width: var(--bl-map-crop-size, 100%);
2243
+ max-width: none;
2244
+ left: var(--bl-map-crop-x, 0);
2245
+ top: var(--bl-map-crop-y, 0);
2246
+ }
2247
+ }
2248
+
2249
+ /*
2250
+ * Beside a place list the map takes three fifths of the width. A region or overview map with no list fills the body
2251
+ * (3.15.0); a locator keeps its column. Names on a map that wide draw at 70%, so they read at about the same size.
2252
+ */
2253
+ @container bl-area-map (min-width: 768px) {
2254
+ [data-bl-section='area-map'][data-list='beside'] [data-slot='body']:has(> [data-slot='places']),
2255
+ [data-bl-section='area-map'][data-variant='locator'][data-list='beside'] [data-slot='body'] {
2256
+ grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
2257
+ align-items: start;
2258
+ }
2259
+ }
2260
+ @container bl-area-map (min-width: 960px) {
2261
+ [data-bl-section='area-map']:not([data-variant='locator']) [data-slot='body']:not(:has(> [data-slot='places'])) [data-layer='names'] text {
2262
+ font-size: 70%;
2263
+ }
2264
+ }
2265
+
1863
2266
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brandlab-digital/site-next",
3
- "version": "3.14.0",
3
+ "version": "3.15.0",
4
4
  "license": "UNLICENSED",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,7 +25,7 @@
25
25
  "typecheck": "tsc --noEmit -p tsconfig.json"
26
26
  },
27
27
  "dependencies": {
28
- "@brandlab-digital/site-core": "3.14.0",
28
+ "@brandlab-digital/site-core": "3.15.0",
29
29
  "browser-image-compression": "2.0.2",
30
30
  "pdf-lib": "1.17.1",
31
31
  "server-only": "0.0.1",