easyfaa 0.20.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 (165) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +558 -0
  3. data/MIT-LICENSE +22 -0
  4. data/README.md +256 -0
  5. data/app/views/layouts/easyfaa.html.erb +24 -0
  6. data/app/views/recourses/_head.html.erb +3 -0
  7. data/art/autopilot.svg +9 -0
  8. data/art/cube.svg +9 -0
  9. data/art/design.svg +8 -0
  10. data/art/down.html.erb +95 -0
  11. data/art/easyfaa.svg +7 -0
  12. data/art/fountain.svg +9 -0
  13. data/art/goldrush.svg +7 -0
  14. data/art/houston.svg +8 -0
  15. data/art/icons.txt +185 -0
  16. data/art/index.html.erb +157 -0
  17. data/config/locales/easyfaa.en.yml +7 -0
  18. data/lib/easyfaa/copy.rb +5 -0
  19. data/lib/easyfaa/down.rb +19 -0
  20. data/lib/easyfaa/engine.rb +53 -0
  21. data/lib/easyfaa/helpers/flows.rb +53 -0
  22. data/lib/easyfaa/helpers/heads.rb +60 -0
  23. data/lib/easyfaa/helpers/logos.rb +43 -0
  24. data/lib/easyfaa/helpers.rb +11 -0
  25. data/lib/easyfaa/marks.rb +16 -0
  26. data/lib/easyfaa/version.rb +4 -0
  27. data/lib/easyfaa.rb +39 -0
  28. data/public/404.html +118 -0
  29. data/public/_headers +28 -0
  30. data/public/bh/css/bh.css +1 -0
  31. data/public/bh/js/bh.js +152 -0
  32. data/public/bh/theme/bootstrap.css +10 -0
  33. data/public/bh/theme/dawn.css +189 -0
  34. data/public/bh/theme/dracula.css +189 -0
  35. data/public/bh/theme/gruvbox.css +189 -0
  36. data/public/bh/theme/monokai.css +190 -0
  37. data/public/bh/theme/nord.css +189 -0
  38. data/public/bh/theme/one_dark.css +189 -0
  39. data/public/bh/theme/solarized.css +188 -0
  40. data/public/bh/theme/tokyo_night.css +189 -0
  41. data/public/css/easyfaa.css +1 -0
  42. data/public/down/autopilot.html +87 -0
  43. data/public/down/cube.html +87 -0
  44. data/public/down/design.html +87 -0
  45. data/public/down/easyfaa.html +84 -0
  46. data/public/down/fountain.html +87 -0
  47. data/public/down/goldrush.html +87 -0
  48. data/public/down/houston.html +87 -0
  49. data/public/favicon/autopilot-180.png +0 -0
  50. data/public/favicon/autopilot-192.png +0 -0
  51. data/public/favicon/autopilot-512.png +0 -0
  52. data/public/favicon/autopilot-96.png +0 -0
  53. data/public/favicon/autopilot-dev.svg +9 -0
  54. data/public/favicon/autopilot.ico +0 -0
  55. data/public/favicon/autopilot.svg +9 -0
  56. data/public/favicon/autopilot.webmanifest +12 -0
  57. data/public/favicon/cube-180.png +0 -0
  58. data/public/favicon/cube-192.png +0 -0
  59. data/public/favicon/cube-512.png +0 -0
  60. data/public/favicon/cube-96.png +0 -0
  61. data/public/favicon/cube-dev.svg +9 -0
  62. data/public/favicon/cube.ico +0 -0
  63. data/public/favicon/cube.svg +9 -0
  64. data/public/favicon/cube.webmanifest +12 -0
  65. data/public/favicon/design-180.png +0 -0
  66. data/public/favicon/design-192.png +0 -0
  67. data/public/favicon/design-512.png +0 -0
  68. data/public/favicon/design-96.png +0 -0
  69. data/public/favicon/design-dev.svg +8 -0
  70. data/public/favicon/design.ico +0 -0
  71. data/public/favicon/design.svg +8 -0
  72. data/public/favicon/design.webmanifest +12 -0
  73. data/public/favicon/easyfaa-180.png +0 -0
  74. data/public/favicon/easyfaa-192.png +0 -0
  75. data/public/favicon/easyfaa-512.png +0 -0
  76. data/public/favicon/easyfaa-96.png +0 -0
  77. data/public/favicon/easyfaa-dev.svg +7 -0
  78. data/public/favicon/easyfaa.ico +0 -0
  79. data/public/favicon/easyfaa.svg +7 -0
  80. data/public/favicon/easyfaa.webmanifest +12 -0
  81. data/public/favicon/fountain-180.png +0 -0
  82. data/public/favicon/fountain-192.png +0 -0
  83. data/public/favicon/fountain-512.png +0 -0
  84. data/public/favicon/fountain-96.png +0 -0
  85. data/public/favicon/fountain-dev.svg +9 -0
  86. data/public/favicon/fountain.ico +0 -0
  87. data/public/favicon/fountain.svg +9 -0
  88. data/public/favicon/fountain.webmanifest +12 -0
  89. data/public/favicon/goldrush-180.png +0 -0
  90. data/public/favicon/goldrush-192.png +0 -0
  91. data/public/favicon/goldrush-512.png +0 -0
  92. data/public/favicon/goldrush-96.png +0 -0
  93. data/public/favicon/goldrush-dev.svg +7 -0
  94. data/public/favicon/goldrush.ico +0 -0
  95. data/public/favicon/goldrush.svg +7 -0
  96. data/public/favicon/goldrush.webmanifest +12 -0
  97. data/public/favicon/houston-180.png +0 -0
  98. data/public/favicon/houston-192.png +0 -0
  99. data/public/favicon/houston-512.png +0 -0
  100. data/public/favicon/houston-96.png +0 -0
  101. data/public/favicon/houston-dev.svg +8 -0
  102. data/public/favicon/houston.ico +0 -0
  103. data/public/favicon/houston.svg +8 -0
  104. data/public/favicon/houston.webmanifest +12 -0
  105. data/public/favicon.ico +0 -0
  106. data/public/font/bootstrap-icons-6LILWPE2.woff2 +0 -0
  107. data/public/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  108. data/public/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
  109. data/public/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
  110. data/public/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
  111. data/public/font/ibm-plex-sans-500-latin.woff2 +0 -0
  112. data/public/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
  113. data/public/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
  114. data/public/index.html +165 -0
  115. data/public/js/easyfaa.js +1 -0
  116. data/public/logo/autopilot.png +0 -0
  117. data/public/logo/autopilot.svg +9 -0
  118. data/public/logo/cube.png +0 -0
  119. data/public/logo/cube.svg +9 -0
  120. data/public/logo/design.png +0 -0
  121. data/public/logo/design.svg +8 -0
  122. data/public/logo/easyfaa.png +0 -0
  123. data/public/logo/easyfaa.svg +7 -0
  124. data/public/logo/fountain.png +0 -0
  125. data/public/logo/fountain.svg +9 -0
  126. data/public/logo/goldrush.png +0 -0
  127. data/public/logo/goldrush.svg +7 -0
  128. data/public/logo/houston.png +0 -0
  129. data/public/logo/houston.svg +8 -0
  130. data/public/page/400.html +118 -0
  131. data/public/page/404.html +118 -0
  132. data/public/page/406-unsupported-browser.html +118 -0
  133. data/public/page/422.html +118 -0
  134. data/public/page/500.html +118 -0
  135. data/public/site.webmanifest +12 -0
  136. data/public/theme/bootstrap.css +10 -0
  137. data/public/theme/dawn.css +189 -0
  138. data/public/theme/dracula.css +189 -0
  139. data/public/theme/gruvbox.css +189 -0
  140. data/public/theme/monokai.css +190 -0
  141. data/public/theme/nord.css +189 -0
  142. data/public/theme/one_dark.css +189 -0
  143. data/public/theme/solarized.css +188 -0
  144. data/public/theme/tokyo_night.css +189 -0
  145. data/public/v0.20.0/bh/css/bh.css +1 -0
  146. data/public/v0.20.0/bh/js/bh.js +152 -0
  147. data/public/v0.20.0/bh/theme/bootstrap.css +10 -0
  148. data/public/v0.20.0/bh/theme/dawn.css +189 -0
  149. data/public/v0.20.0/bh/theme/dracula.css +189 -0
  150. data/public/v0.20.0/bh/theme/gruvbox.css +189 -0
  151. data/public/v0.20.0/bh/theme/monokai.css +190 -0
  152. data/public/v0.20.0/bh/theme/nord.css +189 -0
  153. data/public/v0.20.0/bh/theme/one_dark.css +189 -0
  154. data/public/v0.20.0/bh/theme/solarized.css +188 -0
  155. data/public/v0.20.0/bh/theme/tokyo_night.css +189 -0
  156. data/public/v0.20.0/css/easyfaa.css +1 -0
  157. data/public/v0.20.0/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  158. data/public/v0.20.0/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
  159. data/public/v0.20.0/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
  160. data/public/v0.20.0/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
  161. data/public/v0.20.0/font/ibm-plex-sans-500-latin.woff2 +0 -0
  162. data/public/v0.20.0/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
  163. data/public/v0.20.0/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
  164. data/public/v0.20.0/js/easyfaa.js +1 -0
  165. metadata +264 -0
@@ -0,0 +1,188 @@
1
+ /* Solarized, Ethan Schoonover — https://ethanschoonover.com/solarized/
2
+ base3 is the light page and base03 the dark one, both Solarized itself.
3
+ yellow serves brown, the warmest tone Solarized has.
4
+
5
+ Bootstrap builds a family by mixing one base toward `--bs-white` below
6
+ the 500 step and toward `--bs-black` above it, and inlines that base
7
+ into all thirteen — so a palette restates the thirteen rather than the
8
+ one. Upstream's order and upstream's shapes with only the base swapped,
9
+ so a later Bootstrap diffs against this file. */
10
+ :root {
11
+ /* The page, and the two colors every ramp below is mixed with.
12
+ `--bs-bg-body` reads `--bs-white` in light mode and `--bs-gray-975` in
13
+ dark, so repainting these two is what moves the page itself. */
14
+ --bs-white: #fdf6e3;
15
+ --bs-black: #002b36;
16
+
17
+ /* The neutrals, which every surface, border and text token Bootstrap ships
18
+ derives from. */
19
+ --bs-gray-025: color-mix(in lab, var(--bs-white) 94%, #839496);
20
+ --bs-gray-050: color-mix(in lab, var(--bs-white) 90%, #839496);
21
+ --bs-gray-100: color-mix(in lab, var(--bs-white) 80%, #839496);
22
+ --bs-gray-200: color-mix(in lab, var(--bs-white) 60%, #839496);
23
+ --bs-gray-300: color-mix(in lab, var(--bs-white) 40%, #839496);
24
+ --bs-gray-400: color-mix(in lab, var(--bs-white) 20%, #839496);
25
+ --bs-gray-500: #839496;
26
+ --bs-gray-600: color-mix(in lab, var(--bs-black) 16%, #839496);
27
+ --bs-gray-700: color-mix(in lab, var(--bs-black) 32%, #839496);
28
+ --bs-gray-800: color-mix(in lab, var(--bs-black) 48%, #839496);
29
+ --bs-gray-900: color-mix(in lab, var(--bs-black) 64%, #839496);
30
+ --bs-gray-950: color-mix(in lab, var(--bs-black) 76%, #839496);
31
+ --bs-gray-975: color-mix(in lab, var(--bs-black) 88%, #839496);
32
+
33
+ --bs-blue-025: color-mix(in lab, var(--bs-white) 94%, #268bd2);
34
+ --bs-blue-050: color-mix(in lab, var(--bs-white) 90%, #268bd2);
35
+ --bs-blue-100: color-mix(in lab, var(--bs-white) 80%, #268bd2);
36
+ --bs-blue-200: color-mix(in lab, var(--bs-white) 60%, #268bd2);
37
+ --bs-blue-300: color-mix(in lab, var(--bs-white) 40%, #268bd2);
38
+ --bs-blue-400: color-mix(in lab, var(--bs-white) 20%, #268bd2);
39
+ --bs-blue-500: #268bd2;
40
+ --bs-blue-600: color-mix(in lab, var(--bs-black) 16%, #268bd2);
41
+ --bs-blue-700: color-mix(in lab, var(--bs-black) 32%, #268bd2);
42
+ --bs-blue-800: color-mix(in lab, var(--bs-black) 48%, #268bd2);
43
+ --bs-blue-900: color-mix(in lab, var(--bs-black) 64%, #268bd2);
44
+ --bs-blue-950: color-mix(in lab, var(--bs-black) 76%, #268bd2);
45
+ --bs-blue-975: color-mix(in lab, var(--bs-black) 88%, #268bd2);
46
+
47
+ --bs-brown-025: color-mix(in lab, var(--bs-white) 94%, #b58900);
48
+ --bs-brown-050: color-mix(in lab, var(--bs-white) 90%, #b58900);
49
+ --bs-brown-100: color-mix(in lab, var(--bs-white) 80%, #b58900);
50
+ --bs-brown-200: color-mix(in lab, var(--bs-white) 60%, #b58900);
51
+ --bs-brown-300: color-mix(in lab, var(--bs-white) 40%, #b58900);
52
+ --bs-brown-400: color-mix(in lab, var(--bs-white) 20%, #b58900);
53
+ --bs-brown-500: #b58900;
54
+ --bs-brown-600: color-mix(in lab, var(--bs-black) 16%, #b58900);
55
+ --bs-brown-700: color-mix(in lab, var(--bs-black) 32%, #b58900);
56
+ --bs-brown-800: color-mix(in lab, var(--bs-black) 48%, #b58900);
57
+ --bs-brown-900: color-mix(in lab, var(--bs-black) 64%, #b58900);
58
+ --bs-brown-950: color-mix(in lab, var(--bs-black) 76%, #b58900);
59
+ --bs-brown-975: color-mix(in lab, var(--bs-black) 88%, #b58900);
60
+
61
+ --bs-cyan-025: color-mix(in lab, var(--bs-white) 94%, #2aa198);
62
+ --bs-cyan-050: color-mix(in lab, var(--bs-white) 90%, #2aa198);
63
+ --bs-cyan-100: color-mix(in lab, var(--bs-white) 80%, #2aa198);
64
+ --bs-cyan-200: color-mix(in lab, var(--bs-white) 60%, #2aa198);
65
+ --bs-cyan-300: color-mix(in lab, var(--bs-white) 40%, #2aa198);
66
+ --bs-cyan-400: color-mix(in lab, var(--bs-white) 20%, #2aa198);
67
+ --bs-cyan-500: #2aa198;
68
+ --bs-cyan-600: color-mix(in lab, var(--bs-black) 16%, #2aa198);
69
+ --bs-cyan-700: color-mix(in lab, var(--bs-black) 32%, #2aa198);
70
+ --bs-cyan-800: color-mix(in lab, var(--bs-black) 48%, #2aa198);
71
+ --bs-cyan-900: color-mix(in lab, var(--bs-black) 64%, #2aa198);
72
+ --bs-cyan-950: color-mix(in lab, var(--bs-black) 76%, #2aa198);
73
+ --bs-cyan-975: color-mix(in lab, var(--bs-black) 88%, #2aa198);
74
+
75
+ --bs-green-025: color-mix(in lab, var(--bs-white) 94%, #859900);
76
+ --bs-green-050: color-mix(in lab, var(--bs-white) 90%, #859900);
77
+ --bs-green-100: color-mix(in lab, var(--bs-white) 80%, #859900);
78
+ --bs-green-200: color-mix(in lab, var(--bs-white) 60%, #859900);
79
+ --bs-green-300: color-mix(in lab, var(--bs-white) 40%, #859900);
80
+ --bs-green-400: color-mix(in lab, var(--bs-white) 20%, #859900);
81
+ --bs-green-500: #859900;
82
+ --bs-green-600: color-mix(in lab, var(--bs-black) 16%, #859900);
83
+ --bs-green-700: color-mix(in lab, var(--bs-black) 32%, #859900);
84
+ --bs-green-800: color-mix(in lab, var(--bs-black) 48%, #859900);
85
+ --bs-green-900: color-mix(in lab, var(--bs-black) 64%, #859900);
86
+ --bs-green-950: color-mix(in lab, var(--bs-black) 76%, #859900);
87
+ --bs-green-975: color-mix(in lab, var(--bs-black) 88%, #859900);
88
+
89
+ --bs-orange-025: color-mix(in lab, var(--bs-white) 94%, #cb4b16);
90
+ --bs-orange-050: color-mix(in lab, var(--bs-white) 90%, #cb4b16);
91
+ --bs-orange-100: color-mix(in lab, var(--bs-white) 80%, #cb4b16);
92
+ --bs-orange-200: color-mix(in lab, var(--bs-white) 60%, #cb4b16);
93
+ --bs-orange-300: color-mix(in lab, var(--bs-white) 40%, #cb4b16);
94
+ --bs-orange-400: color-mix(in lab, var(--bs-white) 20%, #cb4b16);
95
+ --bs-orange-500: #cb4b16;
96
+ --bs-orange-600: color-mix(in lab, var(--bs-black) 16%, #cb4b16);
97
+ --bs-orange-700: color-mix(in lab, var(--bs-black) 32%, #cb4b16);
98
+ --bs-orange-800: color-mix(in lab, var(--bs-black) 48%, #cb4b16);
99
+ --bs-orange-900: color-mix(in lab, var(--bs-black) 64%, #cb4b16);
100
+ --bs-orange-950: color-mix(in lab, var(--bs-black) 76%, #cb4b16);
101
+ --bs-orange-975: color-mix(in lab, var(--bs-black) 88%, #cb4b16);
102
+
103
+ --bs-pink-025: color-mix(in lab, var(--bs-white) 94%, #d33682);
104
+ --bs-pink-050: color-mix(in lab, var(--bs-white) 90%, #d33682);
105
+ --bs-pink-100: color-mix(in lab, var(--bs-white) 80%, #d33682);
106
+ --bs-pink-200: color-mix(in lab, var(--bs-white) 60%, #d33682);
107
+ --bs-pink-300: color-mix(in lab, var(--bs-white) 40%, #d33682);
108
+ --bs-pink-400: color-mix(in lab, var(--bs-white) 20%, #d33682);
109
+ --bs-pink-500: #d33682;
110
+ --bs-pink-600: color-mix(in lab, var(--bs-black) 16%, #d33682);
111
+ --bs-pink-700: color-mix(in lab, var(--bs-black) 32%, #d33682);
112
+ --bs-pink-800: color-mix(in lab, var(--bs-black) 48%, #d33682);
113
+ --bs-pink-900: color-mix(in lab, var(--bs-black) 64%, #d33682);
114
+ --bs-pink-950: color-mix(in lab, var(--bs-black) 76%, #d33682);
115
+ --bs-pink-975: color-mix(in lab, var(--bs-black) 88%, #d33682);
116
+
117
+ --bs-purple-025: color-mix(in lab, var(--bs-white) 94%, #6c71c4);
118
+ --bs-purple-050: color-mix(in lab, var(--bs-white) 90%, #6c71c4);
119
+ --bs-purple-100: color-mix(in lab, var(--bs-white) 80%, #6c71c4);
120
+ --bs-purple-200: color-mix(in lab, var(--bs-white) 60%, #6c71c4);
121
+ --bs-purple-300: color-mix(in lab, var(--bs-white) 40%, #6c71c4);
122
+ --bs-purple-400: color-mix(in lab, var(--bs-white) 20%, #6c71c4);
123
+ --bs-purple-500: #6c71c4;
124
+ --bs-purple-600: color-mix(in lab, var(--bs-black) 16%, #6c71c4);
125
+ --bs-purple-700: color-mix(in lab, var(--bs-black) 32%, #6c71c4);
126
+ --bs-purple-800: color-mix(in lab, var(--bs-black) 48%, #6c71c4);
127
+ --bs-purple-900: color-mix(in lab, var(--bs-black) 64%, #6c71c4);
128
+ --bs-purple-950: color-mix(in lab, var(--bs-black) 76%, #6c71c4);
129
+ --bs-purple-975: color-mix(in lab, var(--bs-black) 88%, #6c71c4);
130
+
131
+ --bs-red-025: color-mix(in lab, var(--bs-white) 94%, #dc322f);
132
+ --bs-red-050: color-mix(in lab, var(--bs-white) 90%, #dc322f);
133
+ --bs-red-100: color-mix(in lab, var(--bs-white) 80%, #dc322f);
134
+ --bs-red-200: color-mix(in lab, var(--bs-white) 60%, #dc322f);
135
+ --bs-red-300: color-mix(in lab, var(--bs-white) 40%, #dc322f);
136
+ --bs-red-400: color-mix(in lab, var(--bs-white) 20%, #dc322f);
137
+ --bs-red-500: #dc322f;
138
+ --bs-red-600: color-mix(in lab, var(--bs-black) 16%, #dc322f);
139
+ --bs-red-700: color-mix(in lab, var(--bs-black) 32%, #dc322f);
140
+ --bs-red-800: color-mix(in lab, var(--bs-black) 48%, #dc322f);
141
+ --bs-red-900: color-mix(in lab, var(--bs-black) 64%, #dc322f);
142
+ --bs-red-950: color-mix(in lab, var(--bs-black) 76%, #dc322f);
143
+ --bs-red-975: color-mix(in lab, var(--bs-black) 88%, #dc322f);
144
+
145
+ --bs-yellow-025: color-mix(in lab, var(--bs-white) 94%, #b58900);
146
+ --bs-yellow-050: color-mix(in lab, var(--bs-white) 90%, #b58900);
147
+ --bs-yellow-100: color-mix(in lab, var(--bs-white) 80%, #b58900);
148
+ --bs-yellow-200: color-mix(in lab, var(--bs-white) 60%, #b58900);
149
+ --bs-yellow-300: color-mix(in lab, var(--bs-white) 40%, #b58900);
150
+ --bs-yellow-400: color-mix(in lab, var(--bs-white) 20%, #b58900);
151
+ --bs-yellow-500: #b58900;
152
+ --bs-yellow-600: color-mix(in lab, var(--bs-black) 16%, #b58900);
153
+ --bs-yellow-700: color-mix(in lab, var(--bs-black) 32%, #b58900);
154
+ --bs-yellow-800: color-mix(in lab, var(--bs-black) 48%, #b58900);
155
+ --bs-yellow-900: color-mix(in lab, var(--bs-black) 64%, #b58900);
156
+ --bs-yellow-950: color-mix(in lab, var(--bs-black) 76%, #b58900);
157
+ --bs-yellow-975: color-mix(in lab, var(--bs-black) 88%, #b58900);
158
+
159
+ /* Text, stated rather than left to the ramp. Bootstrap pairs a low step as
160
+ a light surface with that same step as dark-mode text, which a palette
161
+ built for its own contrast does not agree with. */
162
+ --bs-fg-1: light-dark(#073642, #eee8d5);
163
+ --bs-fg-body: light-dark(#586e75, #93a1a1);
164
+ --bs-fg-2: light-dark(#657b83, #839496);
165
+
166
+ /* The label a solid fill carries, for the four families Bootstrap has
167
+ spent on a meaning and this palette has repainted. Upstream's own shape:
168
+ it gives warning and info a dark label for the same reason. */
169
+ --bs-danger-contrast: var(--bs-white);
170
+ --bs-success-contrast: var(--bs-gray-975);
171
+ --bs-warning-contrast: var(--bs-gray-975);
172
+ --bs-info-contrast: var(--bs-gray-975);
173
+
174
+ /* The accent this palette leads with, as the primary color: the same nine
175
+ `_color.html.erb` writes, from blue and the label that reads on it. Here
176
+ rather than only in the page because a reader may swap this file for
177
+ another one, and the primary has to travel with it. A host naming its
178
+ own color still wins, its block coming after this file. */
179
+ --bs-primary-base: var(--bs-blue-500);
180
+ --bs-primary-fg: light-dark(var(--bs-blue-600), var(--bs-blue-400));
181
+ --bs-primary-fg-emphasis: light-dark(var(--bs-blue-800), var(--bs-blue-200));
182
+ --bs-primary-bg: var(--bs-blue-500);
183
+ --bs-primary-bg-subtle: light-dark(var(--bs-blue-100), var(--bs-blue-900));
184
+ --bs-primary-bg-muted: light-dark(var(--bs-blue-200), var(--bs-blue-800));
185
+ --bs-primary-border: light-dark(var(--bs-blue-300), var(--bs-blue-600));
186
+ --bs-primary-focus-ring: light-dark(color-mix(in oklch, var(--bs-blue-500) 50%, var(--bs-bg-body)), color-mix(in oklch, var(--bs-blue-500) 75%, var(--bs-bg-body)));
187
+ --bs-primary-contrast: var(--bs-gray-975);
188
+ }
@@ -0,0 +1,189 @@
1
+ /* Tokyo Night, enkia — https://github.com/enkia/tokyo-night-vscode-theme
2
+ Tokyo Night Day is the light page and Tokyo Night's own the dark one.
3
+ its magenta serves purple and pink, its orange serves brown. The mid
4
+ neutral is derived.
5
+
6
+ Bootstrap builds a family by mixing one base toward `--bs-white` below
7
+ the 500 step and toward `--bs-black` above it, and inlines that base
8
+ into all thirteen — so a palette restates the thirteen rather than the
9
+ one. Upstream's order and upstream's shapes with only the base swapped,
10
+ so a later Bootstrap diffs against this file. */
11
+ :root {
12
+ /* The page, and the two colors every ramp below is mixed with.
13
+ `--bs-bg-body` reads `--bs-white` in light mode and `--bs-gray-975` in
14
+ dark, so repainting these two is what moves the page itself. */
15
+ --bs-white: #e1e2e7;
16
+ --bs-black: #1a1b26;
17
+
18
+ /* The neutrals, which every surface, border and text token Bootstrap ships
19
+ derives from. */
20
+ --bs-gray-025: color-mix(in lab, var(--bs-white) 94%, #8189a8);
21
+ --bs-gray-050: color-mix(in lab, var(--bs-white) 90%, #8189a8);
22
+ --bs-gray-100: color-mix(in lab, var(--bs-white) 80%, #8189a8);
23
+ --bs-gray-200: color-mix(in lab, var(--bs-white) 60%, #8189a8);
24
+ --bs-gray-300: color-mix(in lab, var(--bs-white) 40%, #8189a8);
25
+ --bs-gray-400: color-mix(in lab, var(--bs-white) 20%, #8189a8);
26
+ --bs-gray-500: #8189a8;
27
+ --bs-gray-600: color-mix(in lab, var(--bs-black) 16%, #8189a8);
28
+ --bs-gray-700: color-mix(in lab, var(--bs-black) 32%, #8189a8);
29
+ --bs-gray-800: color-mix(in lab, var(--bs-black) 48%, #8189a8);
30
+ --bs-gray-900: color-mix(in lab, var(--bs-black) 64%, #8189a8);
31
+ --bs-gray-950: color-mix(in lab, var(--bs-black) 76%, #8189a8);
32
+ --bs-gray-975: color-mix(in lab, var(--bs-black) 88%, #8189a8);
33
+
34
+ --bs-blue-025: color-mix(in lab, var(--bs-white) 94%, #7aa2f7);
35
+ --bs-blue-050: color-mix(in lab, var(--bs-white) 90%, #7aa2f7);
36
+ --bs-blue-100: color-mix(in lab, var(--bs-white) 80%, #7aa2f7);
37
+ --bs-blue-200: color-mix(in lab, var(--bs-white) 60%, #7aa2f7);
38
+ --bs-blue-300: color-mix(in lab, var(--bs-white) 40%, #7aa2f7);
39
+ --bs-blue-400: color-mix(in lab, var(--bs-white) 20%, #7aa2f7);
40
+ --bs-blue-500: #7aa2f7;
41
+ --bs-blue-600: color-mix(in lab, var(--bs-black) 16%, #7aa2f7);
42
+ --bs-blue-700: color-mix(in lab, var(--bs-black) 32%, #7aa2f7);
43
+ --bs-blue-800: color-mix(in lab, var(--bs-black) 48%, #7aa2f7);
44
+ --bs-blue-900: color-mix(in lab, var(--bs-black) 64%, #7aa2f7);
45
+ --bs-blue-950: color-mix(in lab, var(--bs-black) 76%, #7aa2f7);
46
+ --bs-blue-975: color-mix(in lab, var(--bs-black) 88%, #7aa2f7);
47
+
48
+ --bs-brown-025: color-mix(in lab, var(--bs-white) 94%, #ff9e64);
49
+ --bs-brown-050: color-mix(in lab, var(--bs-white) 90%, #ff9e64);
50
+ --bs-brown-100: color-mix(in lab, var(--bs-white) 80%, #ff9e64);
51
+ --bs-brown-200: color-mix(in lab, var(--bs-white) 60%, #ff9e64);
52
+ --bs-brown-300: color-mix(in lab, var(--bs-white) 40%, #ff9e64);
53
+ --bs-brown-400: color-mix(in lab, var(--bs-white) 20%, #ff9e64);
54
+ --bs-brown-500: #ff9e64;
55
+ --bs-brown-600: color-mix(in lab, var(--bs-black) 16%, #ff9e64);
56
+ --bs-brown-700: color-mix(in lab, var(--bs-black) 32%, #ff9e64);
57
+ --bs-brown-800: color-mix(in lab, var(--bs-black) 48%, #ff9e64);
58
+ --bs-brown-900: color-mix(in lab, var(--bs-black) 64%, #ff9e64);
59
+ --bs-brown-950: color-mix(in lab, var(--bs-black) 76%, #ff9e64);
60
+ --bs-brown-975: color-mix(in lab, var(--bs-black) 88%, #ff9e64);
61
+
62
+ --bs-cyan-025: color-mix(in lab, var(--bs-white) 94%, #7dcfff);
63
+ --bs-cyan-050: color-mix(in lab, var(--bs-white) 90%, #7dcfff);
64
+ --bs-cyan-100: color-mix(in lab, var(--bs-white) 80%, #7dcfff);
65
+ --bs-cyan-200: color-mix(in lab, var(--bs-white) 60%, #7dcfff);
66
+ --bs-cyan-300: color-mix(in lab, var(--bs-white) 40%, #7dcfff);
67
+ --bs-cyan-400: color-mix(in lab, var(--bs-white) 20%, #7dcfff);
68
+ --bs-cyan-500: #7dcfff;
69
+ --bs-cyan-600: color-mix(in lab, var(--bs-black) 16%, #7dcfff);
70
+ --bs-cyan-700: color-mix(in lab, var(--bs-black) 32%, #7dcfff);
71
+ --bs-cyan-800: color-mix(in lab, var(--bs-black) 48%, #7dcfff);
72
+ --bs-cyan-900: color-mix(in lab, var(--bs-black) 64%, #7dcfff);
73
+ --bs-cyan-950: color-mix(in lab, var(--bs-black) 76%, #7dcfff);
74
+ --bs-cyan-975: color-mix(in lab, var(--bs-black) 88%, #7dcfff);
75
+
76
+ --bs-green-025: color-mix(in lab, var(--bs-white) 94%, #9ece6a);
77
+ --bs-green-050: color-mix(in lab, var(--bs-white) 90%, #9ece6a);
78
+ --bs-green-100: color-mix(in lab, var(--bs-white) 80%, #9ece6a);
79
+ --bs-green-200: color-mix(in lab, var(--bs-white) 60%, #9ece6a);
80
+ --bs-green-300: color-mix(in lab, var(--bs-white) 40%, #9ece6a);
81
+ --bs-green-400: color-mix(in lab, var(--bs-white) 20%, #9ece6a);
82
+ --bs-green-500: #9ece6a;
83
+ --bs-green-600: color-mix(in lab, var(--bs-black) 16%, #9ece6a);
84
+ --bs-green-700: color-mix(in lab, var(--bs-black) 32%, #9ece6a);
85
+ --bs-green-800: color-mix(in lab, var(--bs-black) 48%, #9ece6a);
86
+ --bs-green-900: color-mix(in lab, var(--bs-black) 64%, #9ece6a);
87
+ --bs-green-950: color-mix(in lab, var(--bs-black) 76%, #9ece6a);
88
+ --bs-green-975: color-mix(in lab, var(--bs-black) 88%, #9ece6a);
89
+
90
+ --bs-orange-025: color-mix(in lab, var(--bs-white) 94%, #ff9e64);
91
+ --bs-orange-050: color-mix(in lab, var(--bs-white) 90%, #ff9e64);
92
+ --bs-orange-100: color-mix(in lab, var(--bs-white) 80%, #ff9e64);
93
+ --bs-orange-200: color-mix(in lab, var(--bs-white) 60%, #ff9e64);
94
+ --bs-orange-300: color-mix(in lab, var(--bs-white) 40%, #ff9e64);
95
+ --bs-orange-400: color-mix(in lab, var(--bs-white) 20%, #ff9e64);
96
+ --bs-orange-500: #ff9e64;
97
+ --bs-orange-600: color-mix(in lab, var(--bs-black) 16%, #ff9e64);
98
+ --bs-orange-700: color-mix(in lab, var(--bs-black) 32%, #ff9e64);
99
+ --bs-orange-800: color-mix(in lab, var(--bs-black) 48%, #ff9e64);
100
+ --bs-orange-900: color-mix(in lab, var(--bs-black) 64%, #ff9e64);
101
+ --bs-orange-950: color-mix(in lab, var(--bs-black) 76%, #ff9e64);
102
+ --bs-orange-975: color-mix(in lab, var(--bs-black) 88%, #ff9e64);
103
+
104
+ --bs-pink-025: color-mix(in lab, var(--bs-white) 94%, #bb9af7);
105
+ --bs-pink-050: color-mix(in lab, var(--bs-white) 90%, #bb9af7);
106
+ --bs-pink-100: color-mix(in lab, var(--bs-white) 80%, #bb9af7);
107
+ --bs-pink-200: color-mix(in lab, var(--bs-white) 60%, #bb9af7);
108
+ --bs-pink-300: color-mix(in lab, var(--bs-white) 40%, #bb9af7);
109
+ --bs-pink-400: color-mix(in lab, var(--bs-white) 20%, #bb9af7);
110
+ --bs-pink-500: #bb9af7;
111
+ --bs-pink-600: color-mix(in lab, var(--bs-black) 16%, #bb9af7);
112
+ --bs-pink-700: color-mix(in lab, var(--bs-black) 32%, #bb9af7);
113
+ --bs-pink-800: color-mix(in lab, var(--bs-black) 48%, #bb9af7);
114
+ --bs-pink-900: color-mix(in lab, var(--bs-black) 64%, #bb9af7);
115
+ --bs-pink-950: color-mix(in lab, var(--bs-black) 76%, #bb9af7);
116
+ --bs-pink-975: color-mix(in lab, var(--bs-black) 88%, #bb9af7);
117
+
118
+ --bs-purple-025: color-mix(in lab, var(--bs-white) 94%, #bb9af7);
119
+ --bs-purple-050: color-mix(in lab, var(--bs-white) 90%, #bb9af7);
120
+ --bs-purple-100: color-mix(in lab, var(--bs-white) 80%, #bb9af7);
121
+ --bs-purple-200: color-mix(in lab, var(--bs-white) 60%, #bb9af7);
122
+ --bs-purple-300: color-mix(in lab, var(--bs-white) 40%, #bb9af7);
123
+ --bs-purple-400: color-mix(in lab, var(--bs-white) 20%, #bb9af7);
124
+ --bs-purple-500: #bb9af7;
125
+ --bs-purple-600: color-mix(in lab, var(--bs-black) 16%, #bb9af7);
126
+ --bs-purple-700: color-mix(in lab, var(--bs-black) 32%, #bb9af7);
127
+ --bs-purple-800: color-mix(in lab, var(--bs-black) 48%, #bb9af7);
128
+ --bs-purple-900: color-mix(in lab, var(--bs-black) 64%, #bb9af7);
129
+ --bs-purple-950: color-mix(in lab, var(--bs-black) 76%, #bb9af7);
130
+ --bs-purple-975: color-mix(in lab, var(--bs-black) 88%, #bb9af7);
131
+
132
+ --bs-red-025: color-mix(in lab, var(--bs-white) 94%, #f7768e);
133
+ --bs-red-050: color-mix(in lab, var(--bs-white) 90%, #f7768e);
134
+ --bs-red-100: color-mix(in lab, var(--bs-white) 80%, #f7768e);
135
+ --bs-red-200: color-mix(in lab, var(--bs-white) 60%, #f7768e);
136
+ --bs-red-300: color-mix(in lab, var(--bs-white) 40%, #f7768e);
137
+ --bs-red-400: color-mix(in lab, var(--bs-white) 20%, #f7768e);
138
+ --bs-red-500: #f7768e;
139
+ --bs-red-600: color-mix(in lab, var(--bs-black) 16%, #f7768e);
140
+ --bs-red-700: color-mix(in lab, var(--bs-black) 32%, #f7768e);
141
+ --bs-red-800: color-mix(in lab, var(--bs-black) 48%, #f7768e);
142
+ --bs-red-900: color-mix(in lab, var(--bs-black) 64%, #f7768e);
143
+ --bs-red-950: color-mix(in lab, var(--bs-black) 76%, #f7768e);
144
+ --bs-red-975: color-mix(in lab, var(--bs-black) 88%, #f7768e);
145
+
146
+ --bs-yellow-025: color-mix(in lab, var(--bs-white) 94%, #e0af68);
147
+ --bs-yellow-050: color-mix(in lab, var(--bs-white) 90%, #e0af68);
148
+ --bs-yellow-100: color-mix(in lab, var(--bs-white) 80%, #e0af68);
149
+ --bs-yellow-200: color-mix(in lab, var(--bs-white) 60%, #e0af68);
150
+ --bs-yellow-300: color-mix(in lab, var(--bs-white) 40%, #e0af68);
151
+ --bs-yellow-400: color-mix(in lab, var(--bs-white) 20%, #e0af68);
152
+ --bs-yellow-500: #e0af68;
153
+ --bs-yellow-600: color-mix(in lab, var(--bs-black) 16%, #e0af68);
154
+ --bs-yellow-700: color-mix(in lab, var(--bs-black) 32%, #e0af68);
155
+ --bs-yellow-800: color-mix(in lab, var(--bs-black) 48%, #e0af68);
156
+ --bs-yellow-900: color-mix(in lab, var(--bs-black) 64%, #e0af68);
157
+ --bs-yellow-950: color-mix(in lab, var(--bs-black) 76%, #e0af68);
158
+ --bs-yellow-975: color-mix(in lab, var(--bs-black) 88%, #e0af68);
159
+
160
+ /* Text, stated rather than left to the ramp. Bootstrap pairs a low step as
161
+ a light surface with that same step as dark-mode text, which a palette
162
+ built for its own contrast does not agree with. */
163
+ --bs-fg-1: light-dark(#1a1b26, #c0caf5);
164
+ --bs-fg-body: light-dark(#343b58, #a9b1d6);
165
+ --bs-fg-2: light-dark(#565f89, #8b93b5);
166
+
167
+ /* The label a solid fill carries, for the four families Bootstrap has
168
+ spent on a meaning and this palette has repainted. Upstream's own shape:
169
+ it gives warning and info a dark label for the same reason. */
170
+ --bs-danger-contrast: var(--bs-gray-975);
171
+ --bs-success-contrast: var(--bs-gray-975);
172
+ --bs-warning-contrast: var(--bs-gray-975);
173
+ --bs-info-contrast: var(--bs-gray-975);
174
+
175
+ /* The accent this palette leads with, as the primary color: the same nine
176
+ `_color.html.erb` writes, from blue and the label that reads on it. Here
177
+ rather than only in the page because a reader may swap this file for
178
+ another one, and the primary has to travel with it. A host naming its
179
+ own color still wins, its block coming after this file. */
180
+ --bs-primary-base: var(--bs-blue-500);
181
+ --bs-primary-fg: light-dark(var(--bs-blue-600), var(--bs-blue-400));
182
+ --bs-primary-fg-emphasis: light-dark(var(--bs-blue-800), var(--bs-blue-200));
183
+ --bs-primary-bg: var(--bs-blue-500);
184
+ --bs-primary-bg-subtle: light-dark(var(--bs-blue-100), var(--bs-blue-900));
185
+ --bs-primary-bg-muted: light-dark(var(--bs-blue-200), var(--bs-blue-800));
186
+ --bs-primary-border: light-dark(var(--bs-blue-300), var(--bs-blue-600));
187
+ --bs-primary-focus-ring: light-dark(color-mix(in oklch, var(--bs-blue-500) 50%, var(--bs-bg-body)), color-mix(in oklch, var(--bs-blue-500) 75%, var(--bs-bg-body)));
188
+ --bs-primary-contrast: var(--bs-gray-975);
189
+ }
@@ -0,0 +1 @@
1
+ @font-face{font-display:block;font-family:bootstrap-icons;src:url("../font/bootstrap-icons-FRBPO3H7.woff2") format("woff2")}.bi:before,[class*=" bi-"]:before,[class^=bi-]:before{display:inline-block;font-family:bootstrap-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-airplane:before{content:"\f7cd"}.bi-alarm:before{content:"\f102"}.bi-archive:before{content:"\f10d"}.bi-arrow-clockwise:before{content:"\f116"}.bi-arrow-counterclockwise:before{content:"\f117"}.bi-arrow-down:before{content:"\f128"}.bi-arrow-left:before{content:"\f12f"}.bi-arrow-right:before{content:"\f138"}.bi-arrow-up:before{content:"\f148"}.bi-arrows-angle-contract:before{content:"\f149"}.bi-arrows-angle-expand:before{content:"\f14a"}.bi-award:before{content:"\f154"}.bi-bag:before{content:"\f179"}.bi-bank:before{content:"\f62e"}.bi-bar-chart:before{content:"\f17e"}.bi-battery:before{content:"\f188"}.bi-bell:before{content:"\f18a"}.bi-bicycle:before{content:"\f18d"}.bi-book:before{content:"\f194"}.bi-bookmark:before{content:"\f1a2"}.bi-bookmark-fill:before{content:"\f199"}.bi-box:before{content:"\f1c8"}.bi-box-arrow-in-right:before{content:"\f1be"}.bi-box-arrow-right:before{content:"\f1c3"}.bi-briefcase:before{content:"\f1cc"}.bi-brush:before{content:"\f1d8"}.bi-building:before{content:"\f1dd"}.bi-bus-front:before{content:"\f87f"}.bi-c-circle:before{content:"\f7db"}.bi-calendar:before{content:"\f1f6"}.bi-calendar-check:before{content:"\f1e2"}.bi-camera:before{content:"\f220"}.bi-camera-video:before{content:"\f21f"}.bi-car-front:before{content:"\f7e1"}.bi-card-checklist:before{content:"\f224"}.bi-cart:before{content:"\f242"}.bi-cash:before{content:"\f247"}.bi-chat:before{content:"\f268"}.bi-check:before{content:"\f26e"}.bi-check-circle:before{content:"\f26b"}.bi-check-circle-fill:before{content:"\f26a"}.bi-check2-square:before{content:"\f271"}.bi-chevron-down:before{content:"\f282"}.bi-chevron-left:before{content:"\f284"}.bi-chevron-right:before{content:"\f285"}.bi-chevron-up:before{content:"\f286"}.bi-circle:before{content:"\f28a"}.bi-clipboard:before{content:"\f290"}.bi-clock:before{content:"\f293"}.bi-cloud:before{content:"\f2c1"}.bi-cloud-rain:before{content:"\f2b6"}.bi-collection-play:before{content:"\f2cb"}.bi-compass:before{content:"\f2d1"}.bi-copy:before{content:"\f759"}.bi-credit-card:before{content:"\f2dc"}.bi-dash:before{content:"\f2ea"}.bi-display:before{content:"\f302"}.bi-download:before{content:"\f30a"}.bi-droplet:before{content:"\f30d"}.bi-emoji-smile:before{content:"\f327"}.bi-envelope:before{content:"\f32f"}.bi-exclamation-triangle:before{content:"\f33b"}.bi-eye:before{content:"\f341"}.bi-eye-slash:before{content:"\f340"}.bi-file-earmark:before{content:"\f392"}.bi-file-earmark-text:before{content:"\f38b"}.bi-fingerprint:before{content:"\f671"}.bi-fire:before{content:"\f7f6"}.bi-flag:before{content:"\f3cc"}.bi-folder:before{content:"\f3d7"}.bi-funnel:before{content:"\f3e1"}.bi-gear:before{content:"\f3e5"}.bi-geo:before{content:"\f3ea"}.bi-geo-alt:before{content:"\f3e8"}.bi-gift:before{content:"\f3ec"}.bi-globe:before{content:"\f3ee"}.bi-graph-up:before{content:"\f3f2"}.bi-grid:before{content:"\f3fc"}.bi-grip-vertical:before{content:"\f3fe"}.bi-hammer:before{content:"\f3ff"}.bi-hand-thumbs-down:before{content:"\f405"}.bi-hand-thumbs-up:before{content:"\f407"}.bi-hdd-rack:before{content:"\f40f"}.bi-headphones:before{content:"\f413"}.bi-heart:before{content:"\f417"}.bi-hospital:before{content:"\f774"}.bi-hourglass:before{content:"\f421"}.bi-house:before{content:"\f425"}.bi-image:before{content:"\f42a"}.bi-inbox:before{content:"\f42d"}.bi-infinity:before{content:"\f69e"}.bi-info-circle:before{content:"\f431"}.bi-key:before{content:"\f44f"}.bi-keyboard:before{content:"\f451"}.bi-laptop:before{content:"\f456"}.bi-layout-sidebar:before{content:"\f45f"}.bi-lightbulb:before{content:"\f46b"}.bi-lightning:before{content:"\f46f"}.bi-link:before{content:"\f471"}.bi-list:before{content:"\f479"}.bi-list-ul:before{content:"\f478"}.bi-lock:before{content:"\f47b"}.bi-magic:before{content:"\f675"}.bi-map:before{content:"\f47f"}.bi-megaphone:before{content:"\f484"}.bi-mic:before{content:"\f490"}.bi-moon:before{content:"\f497"}.bi-moon-fill:before{content:"\f494"}.bi-music-note:before{content:"\f4a0"}.bi-palette:before{content:"\f4b1"}.bi-paperclip:before{content:"\f4b3"}.bi-pause:before{content:"\f4c4"}.bi-pen:before{content:"\f4c8"}.bi-pencil:before{content:"\f4cb"}.bi-people:before{content:"\f4d0"}.bi-percent:before{content:"\f4d1"}.bi-person:before{content:"\f4e1"}.bi-person-circle:before{content:"\f4d7"}.bi-person-dash:before{content:"\f4d9"}.bi-person-plus:before{content:"\f4dd"}.bi-person-rolodex:before{content:"\f676"}.bi-person-vcard:before{content:"\f8c9"}.bi-phone:before{content:"\f4e7"}.bi-pie-chart:before{content:"\f4e9"}.bi-play:before{content:"\f4f5"}.bi-plus:before{content:"\f4fe"}.bi-power:before{content:"\f4ff"}.bi-printer:before{content:"\f501"}.bi-puzzle:before{content:"\f503"}.bi-qr-code:before{content:"\f6ae"}.bi-question-circle:before{content:"\f505"}.bi-receipt:before{content:"\f50f"}.bi-repeat:before{content:"\f813"}.bi-reply:before{content:"\f520"}.bi-rulers:before{content:"\f523"}.bi-scissors:before{content:"\f528"}.bi-search:before{content:"\f52a"}.bi-send:before{content:"\f6c0"}.bi-share:before{content:"\f52e"}.bi-shield:before{content:"\f53f"}.bi-shop:before{content:"\f543"}.bi-shuffle:before{content:"\f544"}.bi-signpost-split:before{content:"\f549"}.bi-skip-forward:before{content:"\f55e"}.bi-sliders:before{content:"\f56b"}.bi-snow:before{content:"\f56d"}.bi-sort-down:before{content:"\f575"}.bi-sort-up:before{content:"\f57b"}.bi-soundwave:before{content:"\f57c"}.bi-speedometer:before{content:"\f57f"}.bi-square:before{content:"\f584"}.bi-star:before{content:"\f588"}.bi-sticky:before{content:"\f58d"}.bi-stop:before{content:"\f593"}.bi-stopwatch:before{content:"\f597"}.bi-sun:before{content:"\f5a2"}.bi-sun-fill:before{content:"\f5a1"}.bi-table:before{content:"\f5aa"}.bi-tag:before{content:"\f5b0"}.bi-telephone:before{content:"\f5c1"}.bi-terminal:before{content:"\f5c3"}.bi-three-dots:before{content:"\f5d4"}.bi-ticket:before{content:"\f6cb"}.bi-tools:before{content:"\f5db"}.bi-train-front:before{content:"\f81d"}.bi-trash:before{content:"\f5de"}.bi-tree:before{content:"\f5e2"}.bi-trophy:before{content:"\f5e7"}.bi-truck:before{content:"\f5ea"}.bi-unlock:before{content:"\f600"}.bi-upc:before{content:"\f602"}.bi-upload:before{content:"\f603"}.bi-volume-up:before{content:"\f611"}.bi-wallet:before{content:"\f614"}.bi-wifi:before{content:"\f61c"}.bi-window:before{content:"\f620"}.bi-wrench:before{content:"\f621"}.bi-x:before{content:"\f62a"}.bi-x-circle:before{content:"\f623"}.bi-x-lg:before{content:"\f659"}.bi-zoom-in:before{content:"\f62c"}.bi-zoom-out:before{content:"\f62d"}.flow{flex:1;display:flex;flex-direction:column;text-align:center}.flow>header{display:flex;justify-content:center;margin-bottom:2rem}.flow>h1{margin:0 0 .75rem;font-size:clamp(1.5rem,4vw,2rem);font-weight:700;letter-spacing:-.02em}.flow>p{margin:0 0 1.5rem}.flow>footer{flex:none;margin-top:auto;padding-top:2.5rem;display:flex;align-items:baseline;justify-content:center;gap:.5rem;font-size:.875rem}.flow>footer form{display:contents}.flow>footer .btn{font-size:inherit;padding:0;min-height:0}@media(max-width:575px){.flow>header{margin-bottom:1.75rem}}.flow-card{width:100%;max-width:var(--flow-width, 75rem);background:color-mix(in srgb,var(--bs-bg-body) 90%,transparent);border:1px solid var(--bs-primary-border);border-radius:.375rem;box-shadow:-.5rem 1rem 2.25rem -.75rem #06162866}.flow-card .form-label,.flow-card .form-control,.flow-card .invalid-feedback{text-align:center}.flow-card form:has(.bh-field~.bh-field,.form-check~.form-check) :is(.bh-field,.form-check),.flow-card form:has(.bh-field~.bh-field,.form-check~.form-check) .bh-field .form-label,.flow-card form:has(.bh-field~.bh-field,.form-check~.form-check) .bh-field .form-control{text-align:start}.flow-card .form-check{display:flex;align-items:start;gap:1rem;padding-left:0}.flow-card .form-check .form-check-input{flex:none;margin:.25em 0 0}.flow-card .bh-field{display:grid;align-content:start}.flow-card{container-type:inline-size}@container (min-width: 40rem){.flow-card fieldset.d-grid{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1rem}.flow-card fieldset.d-grid>:not(.bh-field){grid-column:1 / -1}}.flow-card hr{margin-block:2rem}.flow-card .dialog{--bs-dialog-border-color: var(--bs-primary-border) }.flow:has(.chat-thread,.flow-scroll,.flow-middle){flex:none;height:calc(100svh - 2rem)}.flow-card:has(.chat-thread,.flow-scroll,.flow-middle){display:flex;flex-direction:column;flex:1;min-height:15rem;overflow:auto}.flow-card .chat-thread,.flow-card>:has(.flow-scroll){display:flex;flex-direction:column;flex:1;min-height:0}.flow-card .chat,.flow-card .flow-scroll{flex:1;min-height:0;overflow-y:auto}.flow-card .chat-ask{text-align:center}.flow-card .chat-bubble{text-align:start}.flow-card .flow-middle{flex:1;display:flex;flex-direction:column;justify-content:center}@media(width<768px){.flow-card:has(.chat-thread){width:auto;margin-inline:calc(50% - 50vw);padding-inline:calc(50vw - 50%);border-inline:0;border-radius:0}}.house-page{min-height:100svh}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url("../font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2") format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url("../font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2") format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url("../font/ibm-plex-sans-500-latin-LA7QXWWL.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.plex{font-family:IBM Plex Sans,Helvetica Neue,Arial,sans-serif;font-weight:500;letter-spacing:.01em}.lockup{white-space:nowrap;line-height:1;color:light-dark(#0b1e3a,#cfe3f6);text-decoration:none}.lockup .easy,.lockup:hover{color:#5aa9e6}.lockup:hover .easy{color:inherit}.lockup:hover svg [stroke]{stroke:currentColor}.lockup{font-size:20px}.lockup svg{position:relative;vertical-align:baseline;margin-right:.29em}:root{--tool-alpha: .16;--tool-ground: light-dark(#c9d9ea, #0c2338);--tool-ink: light-dark(#10314f, #cbdff2);--tool-ink-alt: light-dark(#19507f, #a5c6e6);--tool-size: 52px;--tool-drift: 300s}@media(min-width:768px){:root{--tool-size: 60px }}[data-controller~=wall]{position:relative;isolation:isolate;background:var(--tool-ground, #c9d9ea)}.tools{position:fixed;inset:0;overflow:hidden;pointer-events:none;background:var(--tool-ground, #c9d9ea);z-index:-1}.tools-grid{position:absolute;inset:0;opacity:var(--tool-alpha);background-image:linear-gradient(to right,var(--tool-ink-alt) 1px,transparent 1px),linear-gradient(to bottom,var(--tool-ink-alt) 1px,transparent 1px);background-size:20px 20px}.tools-cols{position:absolute;inset:0;display:flex}.tools-col{position:relative;flex:1;height:200%;animation:tool-drift calc(var(--tool-drift, 300s) * var(--col-rate, 1)) linear infinite}@media(width<1536px){.tools-col:nth-child(n+7){display:none}}@media(width<1280px){.tools-col:nth-child(n+6){display:none}}@media(width<1024px){.tools-col:nth-child(n+5){display:none}}@media(width<768px){.tools-col:nth-child(n+4){display:none}}@media(width<576px){.tools-col:nth-child(n+3){display:none}}@keyframes tool-drift{0%{translate:0 0}to{translate:0 -50%}}@media(prefers-reduced-motion:reduce){.tools-col{animation:none}}.tool{position:absolute;left:50%;width:var(--tool-size, 52px);height:var(--tool-size, 52px);translate:-50% -50%;color:var(--tool-ink, #10314f);opacity:var(--tool-alpha);fill:none;stroke:currentColor;stroke-width:28;stroke-linecap:butt;stroke-linejoin:miter}.tool-alt{color:var(--tool-ink-alt)}
@@ -0,0 +1 @@
1
+ function k(e){return e.replace(/(?:[_-])([a-z0-9])/g,(t,s)=>s.toUpperCase())}function S(e){return k(e.replace(/--/g,"-").replace(/__/g,"_"))}function p(e){return e.charAt(0).toUpperCase()+e.slice(1)}function D(e){return e.replace(/([A-Z])/g,(t,s)=>`-${s.toLowerCase()}`)}function v(e){return e!=null}function O(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function b(e,t){let s=B(e);return Array.from(s.reduce((r,n)=>(V(n,t).forEach(i=>r.add(i)),r),new Set))}function x(e,t){return B(e).reduce((r,n)=>(r.push(...K(n,t)),r),[])}function B(e){let t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}function V(e,t){let s=e[t];return Array.isArray(s)?s:[]}function K(e,t){let s=e[t];return s?Object.keys(s).map(r=>[r,s[r]]):[]}var G=(()=>{function e(s){function r(){return Reflect.construct(s,arguments,new.target)}return r.prototype=Object.create(s.prototype,{constructor:{value:r}}),Reflect.setPrototypeOf(r,s),r}function t(){let r=e(function(){this.a.call(this)});return r.prototype.a=function(){},new r}try{return t(),e}catch{return r=>class extends r{}}})();var te={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"},E("abcdefghijklmnopqrstuvwxyz".split("").map(e=>[e,e]))),E("0123456789".split("").map(e=>[e,e])))};function E(e){return e.reduce((t,[s,r])=>Object.assign(Object.assign({},t),{[s]:r}),{})}function j(e){return b(e,"classes").reduce((s,r)=>Object.assign(s,I(r)),{})}function I(e){return{[`${e}Class`]:{get(){let{classes:t}=this;if(t.has(e))return t.get(e);{let s=t.getAttributeName(e);throw new Error(`Missing attribute "${s}"`)}}},[`${e}Classes`]:{get(){return this.classes.getAll(e)}},[`has${p(e)}Class`]:{get(){return this.classes.has(e)}}}}function P(e){return b(e,"outlets").reduce((s,r)=>Object.assign(s,U(r)),{})}function A(e,t,s){return e.application.getControllerForElementAndIdentifier(t,s)}function M(e,t,s){let r=A(e,t,s);if(r||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,s),r=A(e,t,s),r))return r}function U(e){let t=S(e);return{[`${t}Outlet`]:{get(){let s=this.outlets.find(e),r=this.outlets.getSelectorForOutletName(e);if(s){let n=M(this,s,e);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${r}".`)}},[`${t}Outlets`]:{get(){let s=this.outlets.findAll(e);return s.length>0?s.map(r=>{let n=M(this,r,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,r)}).filter(r=>r):[]}},[`${t}OutletElement`]:{get(){let s=this.outlets.find(e),r=this.outlets.getSelectorForOutletName(e);if(s)return s;throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${r}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${p(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}function _(e){return b(e,"targets").reduce((s,r)=>Object.assign(s,R(r)),{})}function R(e){return{[`${e}Target`]:{get(){let t=this.targets.find(e);if(t)return t;throw new Error(`Missing target element "${e}" for "${this.identifier}" controller`)}},[`${e}Targets`]:{get(){return this.targets.findAll(e)}},[`has${p(e)}Target`]:{get(){return this.targets.has(e)}}}}function z(e){let t=x(e,"values"),s={valueDescriptorMap:{get(){return t.reduce((r,n)=>{let i=C(n,this.identifier),o=this.data.getAttributeNameForKey(i.key);return Object.assign(r,{[o]:i})},{})}}};return t.reduce((r,n)=>Object.assign(r,Z(n)),s)}function Z(e,t){let s=C(e,t),{key:r,name:n,reader:i,writer:o}=s;return{[n]:{get(){let a=this.data.get(r);return a!==null?i(a):s.defaultValue},set(a){a===void 0?this.data.delete(r):this.data.set(r,o(a))}},[`has${p(n)}`]:{get(){return this.data.has(r)||s.hasCustomDefaultValue}}}}function C([e,t],s){return J({controller:s,token:e,typeDefinition:t})}function f(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function d(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(e))return"array";if(Object.prototype.toString.call(e)==="[object Object]")return"object"}function q(e){let{controller:t,token:s,typeObject:r}=e,n=v(r.type),i=v(r.default),o=n&&i,a=n&&!i,l=!n&&i,h=f(r.type),m=d(e.typeObject.default);if(a)return h;if(l)return m;if(h!==m){let $=t?`${t}.${s}`:s;throw new Error(`The specified default value for the Stimulus Value "${$}" must match the defined type "${h}". The provided default value of "${r.default}" is of type "${m}".`)}if(o)return h}function W(e){let{controller:t,token:s,typeDefinition:r}=e,i=q({controller:t,token:s,typeObject:r}),o=d(r),a=f(r),l=i||o||a;if(l)return l;let h=t?`${t}.${r}`:s;throw new Error(`Unknown value type "${h}" for "${s}" value`)}function Q(e){let t=f(e);if(t)return w[t];let s=O(e,"default"),r=O(e,"type"),n=e;if(s)return n.default;if(r){let{type:i}=n,o=f(i);if(o)return w[o]}return e}function J(e){let{token:t,typeDefinition:s}=e,r=`${D(t)}-value`,n=W(e);return{type:n,key:r,name:k(r),get defaultValue(){return Q(s)},get hasCustomDefaultValue(){return d(s)!==void 0},reader:H[n],writer:L[n]||L.default}}var w={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},H={array(e){let t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${e}" of type "${d(t)}"`);return t},boolean(e){return!(e=="0"||String(e).toLowerCase()=="false")},number(e){return Number(e.replace(/_/g,""))},object(e){let t=JSON.parse(e);if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${e}" of type "${d(t)}"`);return t},string(e){return e}},L={default:X,array:F,object:F};function F(e){return JSON.stringify(e)}function X(e){return`${e}`}var c=class{constructor(t){this.context=t}static get shouldLoad(){return!0}static afterLoad(t,s){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(t,{target:s=this.element,detail:r={},prefix:n=this.identifier,bubbles:i=!0,cancelable:o=!0}={}){let a=n?`${n}:${t}`:t,l=new CustomEvent(a,{detail:r,bubbles:i,cancelable:o});return s.dispatchEvent(l),l}};c.blessings=[j,_,z,P];c.targets=[];c.outlets=[];c.values={};var N={roller:["M152 132 L360 132 L360 216 L152 216 Z","M256 216 L256 300","M212 300 L300 300 L300 456 L212 456 Z"],ladder:["M160 40 L160 472","M352 40 L352 472","M160 128 L352 128","M160 216 L352 216","M160 304 L352 304","M160 392 L352 392"],frame:["M176 144 L256 72 L336 144","M96 144 L416 144 L416 432 L96 432 Z","M148 196 L364 196 L364 380 L148 380 Z","M176 344 L240 280 L288 328 L340 276"],plunger:["M256 52 L256 300","M164 300 L348 300 L312 424 L200 424 Z"],can:["M144 228 L328 228 L328 432 L144 432 Z","M188 228 L188 164 L284 164 L284 228","M328 300 L400 300 L400 228 L456 228","M456 200 L456 256"],hardhat:["M76 336 L436 336","M116 336 Q116 146 256 146 Q396 146 396 336","M256 166 L256 266"],spray:["M176 240 L336 240 L336 456 L176 456 Z","M256 240 L256 200","M136 128 L308 128 L308 200 L204 200 L204 160 L136 160 Z","M176 312 L336 312","M176 384 L336 384"],lock:["M128 248 L384 248 L384 440 L128 440 Z","M184 248 L184 152 L328 152 L328 248","M256 308 L256 372"],plug:["M148 216 L364 216 L364 396 L148 396 Z","M200 216 L200 120","M312 216 L312 120","M256 396 L256 464"],broom:["M256 48 L256 268","M168 268 L344 268 L380 452 L132 452 Z","M212 268 L196 452","M300 268 L316 452"],nut:["M256 108 L372 176 L372 312 L256 380 L140 312 L140 176 Z","M256 184 L308 214 L308 274 L256 304 L204 274 L204 214 Z"],level:["M56 208 L456 208 L456 304 L56 304 Z","M196 232 L316 232 L316 280 L196 280 Z","M256 232 L256 280"],cube:["M216.2 59.6 Q256 36.6 295.8 59.6 L406.2 123.3 Q446 146.3 446 192.3 L446 319.7 Q446 365.7 406.2 388.7 L295.8 452.4 Q256 475.4 216.2 452.4 L105.8 388.7 Q66 365.7 66 319.7 L66 192.3 Q66 146.3 105.8 123.3 Z","M256 256 L95.4 163.3","M256 256 L416.6 163.3","M256 256 L256 441.4"]};var y=["roller","ladder","frame","plunger","can","hardhat","spray","lock","plug","broom","nut","level","cube"],T=[.94,1.02,.86,1.06,.82,.98,.9],u=5;var g=class extends c{connect(){this.draw=()=>this.#t(),document.addEventListener("turbo:morph",this.draw),this.#t()}disconnect(){document.removeEventListener("turbo:morph",this.draw)}#t(){this.element.querySelector(":scope > .tools")||this.element.prepend(this.#s())}#s(){let e=this.#e("div","tools");return e.setAttribute("aria-hidden","true"),e.append(this.#e("div","tools-grid"),this.#r()),e}#r(){let e=this.#e("div","tools-cols");return T.forEach((t,s)=>e.append(this.#n(t,s))),e}#n(e,t){let s=this.#e("div","tools-col");s.style.setProperty("--col-rate",e);for(let r=0;r<u*2;r++)s.append(this.#i(t,r));return s}#i(e,t){let s=t%u,r=e%2?.5/u:0,n=((s+.5)/u+r)%1*50+Math.floor(t/u)*50,i=y[(e*5+s*3)%y.length],o=this.#o(i,(e+s)%2?"tool tool-alt":"tool");return o.style.top=`${n.toFixed(3)}%`,e%2&&(o.style.scale="-1 1"),o}#o(e,t){let s=document.createElementNS("http://www.w3.org/2000/svg","svg");return s.setAttribute("viewBox","0 0 512 512"),s.setAttribute("class",t),N[e].forEach(r=>s.append(this.#a(r))),s}#a(e){let t=typeof e=="object",s=document.createElementNS("http://www.w3.org/2000/svg",t?"circle":"path");return t?Object.entries(e).forEach(([r,n])=>s.setAttribute(r,n)):s.setAttribute("d",e),s}#e(e,t){let s=document.createElement(e);return s.className=t,s}};window.Stimulus.register("wall",g);