wordmark 0.21.0 → 0.22.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 (221) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -556
  3. data/README.md +17 -33
  4. data/art/blackbox.svg +6 -0
  5. data/art/data.svg +8 -0
  6. data/art/dataplate.svg +12 -0
  7. data/art/drive.svg +6 -0
  8. data/art/hangar.svg +6 -0
  9. data/art/index.html.erb +25 -25
  10. data/art/lens.svg +9 -0
  11. data/art/mirroring.svg +8 -0
  12. data/art/refinery.svg +9 -0
  13. data/art/rollaway.svg +12 -0
  14. data/art/stockroom.svg +12 -0
  15. data/art/tower.svg +12 -0
  16. data/art/wordmark.svg +3 -0
  17. data/lib/wordmark/engine.rb +7 -16
  18. data/lib/wordmark/helpers/heads.rb +6 -6
  19. data/lib/wordmark/marks.rb +14 -4
  20. data/lib/wordmark/version.rb +1 -1
  21. data/lib/wordmark.rb +1 -1
  22. data/public/_headers +0 -4
  23. data/public/bh/js/bh.js +15 -15
  24. data/public/down/{goldrush.html → blackbox.html} +5 -5
  25. data/public/down/{fountain.html → data.html} +5 -5
  26. data/public/down/dataplate.html +87 -0
  27. data/public/down/drive.html +87 -0
  28. data/public/down/{houston.html → hangar.html} +5 -5
  29. data/public/down/lens.html +87 -0
  30. data/public/down/{autopilot.html → mirroring.html} +5 -5
  31. data/public/down/refinery.html +87 -0
  32. data/public/down/rollaway.html +87 -0
  33. data/public/down/stockroom.html +87 -0
  34. data/public/down/tower.html +87 -0
  35. data/public/down/wordmark.html +87 -0
  36. data/public/favicon/blackbox-180.png +0 -0
  37. data/public/favicon/blackbox-192.png +0 -0
  38. data/public/favicon/blackbox-512.png +0 -0
  39. data/public/favicon/blackbox-96.png +0 -0
  40. data/public/favicon/blackbox-dev.svg +6 -0
  41. data/public/favicon/blackbox.ico +0 -0
  42. data/public/favicon/blackbox.svg +6 -0
  43. data/public/favicon/blackbox.webmanifest +12 -0
  44. data/public/favicon/data-180.png +0 -0
  45. data/public/favicon/data-192.png +0 -0
  46. data/public/favicon/data-512.png +0 -0
  47. data/public/favicon/data-96.png +0 -0
  48. data/public/favicon/data-dev.svg +8 -0
  49. data/public/favicon/data.ico +0 -0
  50. data/public/favicon/data.svg +8 -0
  51. data/public/favicon/data.webmanifest +12 -0
  52. data/public/favicon/dataplate-180.png +0 -0
  53. data/public/favicon/dataplate-192.png +0 -0
  54. data/public/favicon/dataplate-512.png +0 -0
  55. data/public/favicon/dataplate-96.png +0 -0
  56. data/public/favicon/dataplate-dev.svg +12 -0
  57. data/public/favicon/dataplate.ico +0 -0
  58. data/public/favicon/dataplate.svg +12 -0
  59. data/public/favicon/dataplate.webmanifest +12 -0
  60. data/public/favicon/drive-180.png +0 -0
  61. data/public/favicon/drive-192.png +0 -0
  62. data/public/favicon/drive-512.png +0 -0
  63. data/public/favicon/drive-96.png +0 -0
  64. data/public/favicon/drive-dev.svg +6 -0
  65. data/public/favicon/drive.ico +0 -0
  66. data/public/favicon/drive.svg +6 -0
  67. data/public/favicon/drive.webmanifest +12 -0
  68. data/public/favicon/hangar-180.png +0 -0
  69. data/public/favicon/hangar-192.png +0 -0
  70. data/public/favicon/hangar-512.png +0 -0
  71. data/public/favicon/hangar-96.png +0 -0
  72. data/public/favicon/hangar-dev.svg +6 -0
  73. data/public/favicon/hangar.ico +0 -0
  74. data/public/favicon/hangar.svg +6 -0
  75. data/public/favicon/hangar.webmanifest +12 -0
  76. data/public/favicon/lens-180.png +0 -0
  77. data/public/favicon/lens-192.png +0 -0
  78. data/public/favicon/lens-512.png +0 -0
  79. data/public/favicon/lens-96.png +0 -0
  80. data/public/favicon/lens-dev.svg +9 -0
  81. data/public/favicon/lens.ico +0 -0
  82. data/public/favicon/lens.svg +9 -0
  83. data/public/favicon/lens.webmanifest +12 -0
  84. data/public/favicon/mirroring-180.png +0 -0
  85. data/public/favicon/mirroring-192.png +0 -0
  86. data/public/favicon/mirroring-512.png +0 -0
  87. data/public/favicon/mirroring-96.png +0 -0
  88. data/public/favicon/mirroring-dev.svg +8 -0
  89. data/public/favicon/mirroring.ico +0 -0
  90. data/public/favicon/mirroring.svg +8 -0
  91. data/public/favicon/mirroring.webmanifest +12 -0
  92. data/public/favicon/refinery-180.png +0 -0
  93. data/public/favicon/refinery-192.png +0 -0
  94. data/public/favicon/refinery-512.png +0 -0
  95. data/public/favicon/refinery-96.png +0 -0
  96. data/public/favicon/refinery-dev.svg +9 -0
  97. data/public/favicon/refinery.ico +0 -0
  98. data/public/favicon/refinery.svg +9 -0
  99. data/public/favicon/refinery.webmanifest +12 -0
  100. data/public/favicon/rollaway-180.png +0 -0
  101. data/public/favicon/rollaway-192.png +0 -0
  102. data/public/favicon/rollaway-512.png +0 -0
  103. data/public/favicon/rollaway-96.png +0 -0
  104. data/public/favicon/rollaway-dev.svg +12 -0
  105. data/public/favicon/rollaway.ico +0 -0
  106. data/public/favicon/rollaway.svg +12 -0
  107. data/public/favicon/rollaway.webmanifest +12 -0
  108. data/public/favicon/stockroom-180.png +0 -0
  109. data/public/favicon/stockroom-192.png +0 -0
  110. data/public/favicon/stockroom-512.png +0 -0
  111. data/public/favicon/stockroom-96.png +0 -0
  112. data/public/favicon/stockroom-dev.svg +12 -0
  113. data/public/favicon/stockroom.ico +0 -0
  114. data/public/favicon/stockroom.svg +12 -0
  115. data/public/favicon/stockroom.webmanifest +12 -0
  116. data/public/favicon/tower-180.png +0 -0
  117. data/public/favicon/tower-192.png +0 -0
  118. data/public/favicon/tower-512.png +0 -0
  119. data/public/favicon/tower-96.png +0 -0
  120. data/public/favicon/tower-dev.svg +12 -0
  121. data/public/favicon/tower.ico +0 -0
  122. data/public/favicon/tower.svg +12 -0
  123. data/public/favicon/tower.webmanifest +12 -0
  124. data/public/favicon/wordmark-180.png +0 -0
  125. data/public/favicon/wordmark-192.png +0 -0
  126. data/public/favicon/wordmark-512.png +0 -0
  127. data/public/favicon/wordmark-96.png +0 -0
  128. data/public/favicon/wordmark-dev.svg +3 -0
  129. data/public/favicon/wordmark.ico +0 -0
  130. data/public/favicon/wordmark.svg +3 -0
  131. data/public/favicon/wordmark.webmanifest +12 -0
  132. data/public/index.html +49 -33
  133. data/public/logo/blackbox.png +0 -0
  134. data/public/logo/blackbox.svg +6 -0
  135. data/public/logo/data.png +0 -0
  136. data/public/logo/data.svg +8 -0
  137. data/public/logo/dataplate.png +0 -0
  138. data/public/logo/dataplate.svg +12 -0
  139. data/public/logo/drive.png +0 -0
  140. data/public/logo/drive.svg +6 -0
  141. data/public/logo/hangar.png +0 -0
  142. data/public/logo/hangar.svg +6 -0
  143. data/public/logo/lens.png +0 -0
  144. data/public/logo/lens.svg +9 -0
  145. data/public/logo/mirroring.png +0 -0
  146. data/public/logo/mirroring.svg +8 -0
  147. data/public/logo/refinery.png +0 -0
  148. data/public/logo/refinery.svg +9 -0
  149. data/public/logo/rollaway.png +0 -0
  150. data/public/logo/rollaway.svg +12 -0
  151. data/public/logo/stockroom.png +0 -0
  152. data/public/logo/stockroom.svg +12 -0
  153. data/public/logo/tower.png +0 -0
  154. data/public/logo/tower.svg +12 -0
  155. data/public/logo/wordmark.png +0 -0
  156. data/public/logo/wordmark.svg +3 -0
  157. metadata +146 -70
  158. data/art/autopilot.svg +0 -9
  159. data/art/fountain.svg +0 -9
  160. data/art/goldrush.svg +0 -7
  161. data/art/houston.svg +0 -8
  162. data/public/favicon/autopilot-180.png +0 -0
  163. data/public/favicon/autopilot-192.png +0 -0
  164. data/public/favicon/autopilot-512.png +0 -0
  165. data/public/favicon/autopilot-96.png +0 -0
  166. data/public/favicon/autopilot-dev.svg +0 -9
  167. data/public/favicon/autopilot.ico +0 -0
  168. data/public/favicon/autopilot.svg +0 -9
  169. data/public/favicon/autopilot.webmanifest +0 -12
  170. data/public/favicon/fountain-180.png +0 -0
  171. data/public/favicon/fountain-192.png +0 -0
  172. data/public/favicon/fountain-512.png +0 -0
  173. data/public/favicon/fountain-96.png +0 -0
  174. data/public/favicon/fountain-dev.svg +0 -9
  175. data/public/favicon/fountain.ico +0 -0
  176. data/public/favicon/fountain.svg +0 -9
  177. data/public/favicon/fountain.webmanifest +0 -12
  178. data/public/favicon/goldrush-180.png +0 -0
  179. data/public/favicon/goldrush-192.png +0 -0
  180. data/public/favicon/goldrush-512.png +0 -0
  181. data/public/favicon/goldrush-96.png +0 -0
  182. data/public/favicon/goldrush-dev.svg +0 -7
  183. data/public/favicon/goldrush.ico +0 -0
  184. data/public/favicon/goldrush.svg +0 -7
  185. data/public/favicon/goldrush.webmanifest +0 -12
  186. data/public/favicon/houston-180.png +0 -0
  187. data/public/favicon/houston-192.png +0 -0
  188. data/public/favicon/houston-512.png +0 -0
  189. data/public/favicon/houston-96.png +0 -0
  190. data/public/favicon/houston-dev.svg +0 -8
  191. data/public/favicon/houston.ico +0 -0
  192. data/public/favicon/houston.svg +0 -8
  193. data/public/favicon/houston.webmanifest +0 -12
  194. data/public/logo/autopilot.png +0 -0
  195. data/public/logo/autopilot.svg +0 -9
  196. data/public/logo/fountain.png +0 -0
  197. data/public/logo/fountain.svg +0 -9
  198. data/public/logo/goldrush.png +0 -0
  199. data/public/logo/goldrush.svg +0 -7
  200. data/public/logo/houston.png +0 -0
  201. data/public/logo/houston.svg +0 -8
  202. data/public/v0.21.0/bh/css/bh.css +0 -1
  203. data/public/v0.21.0/bh/js/bh.js +0 -152
  204. data/public/v0.21.0/bh/theme/bootstrap.css +0 -10
  205. data/public/v0.21.0/bh/theme/dawn.css +0 -189
  206. data/public/v0.21.0/bh/theme/dracula.css +0 -189
  207. data/public/v0.21.0/bh/theme/gruvbox.css +0 -189
  208. data/public/v0.21.0/bh/theme/monokai.css +0 -190
  209. data/public/v0.21.0/bh/theme/nord.css +0 -189
  210. data/public/v0.21.0/bh/theme/one_dark.css +0 -189
  211. data/public/v0.21.0/bh/theme/solarized.css +0 -188
  212. data/public/v0.21.0/bh/theme/tokyo_night.css +0 -189
  213. data/public/v0.21.0/css/easyfaa.css +0 -1
  214. data/public/v0.21.0/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  215. data/public/v0.21.0/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
  216. data/public/v0.21.0/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
  217. data/public/v0.21.0/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
  218. data/public/v0.21.0/font/ibm-plex-sans-500-latin.woff2 +0 -0
  219. data/public/v0.21.0/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
  220. data/public/v0.21.0/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
  221. data/public/v0.21.0/js/easyfaa.js +0 -1
data/README.md CHANGED
@@ -16,7 +16,7 @@ Published three ways from this repo:
16
16
 
17
17
  | Surface | Where | What it is for |
18
18
  | --- | --- | --- |
19
- | Site | https://design.easyfaa.com (staging: https://design.houseparty.dev) | A stable URL for every asset, and a showcase of them |
19
+ | Site | https://design.easyfaa.com | A stable URL for every asset, and a showcase of them |
20
20
  | Gem | `wordmark` on RubyGems | A Rails engine: serves the same tree from the gem, and the helpers |
21
21
  | npm | `easyfaa` | The same built stylesheet and script, for any CDN that carries it |
22
22
 
@@ -63,21 +63,19 @@ after it, and nothing else. A host wanting more copies
63
63
  it into its own `app/views/layouts/`, which wins on being earlier in the view paths.
64
64
 
65
65
  Which of the family an app is, the gem reads off the Rails application's own name: the
66
- `Goldrush` of `Goldrush::Application`. That is what its tab wears, what `easyfaa_head_tags`
66
+ `Tower` of `Tower::Application`. That is what its tab wears, what `easyfaa_head_tags`
67
67
  links without an argument, and whose page the engine answers `/down.html` with — the app's
68
68
  mark in the middle and the house's at the foot. An app the family has no mark for wears the
69
- horizon. The same page stands at `https://design.easyfaa.com/down/fountain` for Heroku's
69
+ horizon. The same page stands at `https://design.easyfaa.com/down/tower` for Heroku's
70
70
  `MAINTENANCE_PAGE_URL`, which has to be somewhere the app is not — without the `.html`,
71
71
  which Pages redirects away from.
72
72
 
73
73
  With the gem in the bundle an app serves `/css/easyfaa.css`, `/js/easyfaa.js`,
74
- `/theme/*`, `/font/*`, `/logo/*` and `/favicon/*` itself — and its own version's copy under
75
- `/v0.15.0/`, which is what the head helper links, cached for a year — answers a 400, 404, 406,
76
- 422 or 500 with the house's own page, and answers `/down.html` with this app's.
74
+ `/theme/*`, `/font/*`, `/logo/*` and `/favicon/*` itself, answers a 400, 404, 406, 422 or 500 with the house's own page, and answers `/down.html` with this app's.
77
75
 
78
76
  ## Which app this is
79
77
 
80
- Read off the Rails application's own name, the `Goldrush` of `Goldrush::Application`. That is
78
+ Read off the Rails application's own name, the `Tower` of `Tower::Application`. That is
81
79
  what its tab wears, what `easyfaa_head_tags` links without an argument, and whose page the
82
80
  engine answers `/down.html` with — the app's mark in the middle and the house's at the foot. An
83
81
  app the family has no mark for wears the horizon.
@@ -98,10 +96,10 @@ app the family has no mark for wears the horizon.
98
96
  differently, so equal sizes never align: every mark is rendered at a box of its own and
99
97
  pushed down by its own nudge, and its ink then stands on the baseline. %>
100
98
  <%= easyfaa_logo %>
101
- <%= easyfaa_logo app: :fountain, href: root_path, class: 'fs-3' %>
99
+ <%= easyfaa_logo app: :tower, href: root_path, class: 'fs-3' %>
102
100
 
103
101
  <%# An asset on the design site, for a page this app does not serve — a mail, say. %>
104
- <%= image_tag easyfaa_url('logo/fountain.png') %>
102
+ <%= image_tag easyfaa_url('logo/tower.png') %>
105
103
  ```
106
104
 
107
105
  ## The layout
@@ -181,24 +179,16 @@ A page not on the gem links the two files from the site, and nothing else:
181
179
  <script type='module' src='https://design.easyfaa.com/js/easyfaa.js'></script>
182
180
  ```
183
181
 
184
- Those follow the latest release. Every release is also kept whole under its own version,
185
- forever and cached for a year, for a page that would rather move on its own terms:
182
+ Those follow the latest release. bh's layer goes under the house's, from the same place, since
183
+ the house is drawn on top of it and neither stands alone:
186
184
 
187
185
  ```html
188
- <link rel='stylesheet' href='https://design.easyfaa.com/v0.20.0/css/easyfaa.css'>
189
- <script type='module' src='https://design.easyfaa.com/v0.20.0/js/easyfaa.js'></script>
190
- ```
191
-
192
- bh's layer goes under the house's, from the same place, since the house is drawn on top of it
193
- and neither stands alone:
194
-
195
- ```html
196
- <link rel='stylesheet' href='https://design.easyfaa.com/v0.20.0/bh/css/bh.css'>
197
- <link rel='stylesheet' href='https://design.easyfaa.com/v0.20.0/css/easyfaa.css'>
186
+ <link rel='stylesheet' href='https://design.easyfaa.com/bh/css/bh.css'>
187
+ <link rel='stylesheet' href='https://design.easyfaa.com/css/easyfaa.css'>
198
188
  ```
199
189
 
200
190
  The palettes are beside it, at `bh/theme/nord.css` and the rest — bh's nine, copied out of the
201
- gem at build time. A version under `v` is never written again, so that URL is owed its bytes.
191
+ gem at build time.
202
192
 
203
193
  A host with a Content Security Policy allows whichever origin it names for `style-src`,
204
194
  `script-src` and `font-src`.
@@ -235,22 +225,16 @@ serves them, and `spec.files` is `git ls-files`. `rake assets` rebuilds and fail
235
225
  result is committed, so a source edit cannot ship without its build.
236
226
 
237
227
  While the gem is read from a path, an app in development serves every file `no-cache`, so a
238
- rebuild shows on the next reload; only a production app keeps the versioned copy for a year.
239
-
240
- Every build also writes `public/v<version>/`, whole, with every URL inside pointing under
241
- that prefix, until the tag `v<version>` exists; from then on the folder is never written
242
- again, and a page that pinned it is owed the same bytes for good.
228
+ rebuild shows on the next reload, and so does an app in production: only a font is kept.
243
229
 
244
- A release, in order: `CHANGELOG.md`, the version in `lib/easyfaa/version.rb` and
245
- `package.json`, `bundle exec rake` so the versioned copy is the release's, then commit, tag
246
- `v<version>`, `gem build` and `gem push`, and fast-forward `production` to `main` so the
247
- site carries both the latest and the versioned copy.
230
+ A release, in order: `CHANGELOG.md`, the version in `lib/wordmark/version.rb` and
231
+ `package.json`, `bundle exec rake`, then commit, tag `v<version>`, `gem build` and `gem push`,
232
+ and fast-forward `production` to `main` so the site carries it.
248
233
 
249
234
  ## Cloudflare
250
235
 
251
236
  The site is a Cloudflare Pages project named `design` on this repo: production branch
252
237
  `production`, no build command, output directory `public`, custom domain
253
- `design.easyfaa.com`. `main` deploys as the branch alias `main.design.pages.dev`, which
254
- `design.houseparty.dev` is a CNAME to. `public/_headers` adds the CORS header a cross-origin
238
+ `design.easyfaa.com`. `main` deploys as the branch alias `main.design.pages.dev`. `public/_headers` adds the CORS header a cross-origin
255
239
  module script and font need, and marks the hashed fonts immutable; everything else keeps
256
240
  Pages' default of revalidating on every load, so a URL never has to change between versions.
data/art/blackbox.svg ADDED
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#7e6317" style="stroke: light-dark(#7e6317, #ffd352)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <rect x="56" y="104" width="400" height="304" rx="28"/>
4
+ <path d="M112 264H184L216 184L264 344L304 224L328 264H400"/>
5
+ </g>
6
+ </svg>
data/art/data.svg ADDED
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#5aa9e6" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <ellipse cx="256" cy="112" rx="176" ry="56"/>
4
+ <path d="M80 112V400A176 56 0 0 0 432 400V112"/>
5
+ <path d="M80 208A176 56 0 0 0 432 208"/>
6
+ <path d="M80 304A176 56 0 0 0 432 304"/>
7
+ </g>
8
+ </svg>
data/art/dataplate.svg ADDED
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#0b1e3a" style="stroke: light-dark(#0b1e3a, #cfe3f6)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <rect x="48" y="104" width="416" height="304" rx="28"/>
4
+ <circle cx="104" cy="160" r="6"/>
5
+ <circle cx="408" cy="160" r="6"/>
6
+ <circle cx="104" cy="352" r="6"/>
7
+ <circle cx="408" cy="352" r="6"/>
8
+ <path d="M168 200H344"/>
9
+ <path d="M168 256H344"/>
10
+ <path d="M168 312H280"/>
11
+ </g>
12
+ </svg>
data/art/drive.svg ADDED
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#0b1e3a" style="stroke: light-dark(#0b1e3a, #cfe3f6)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <circle cx="256" cy="256" r="208"/>
4
+ <path d="M256 152 346 204V308L256 360 166 308V204Z"/>
5
+ </g>
6
+ </svg>
data/art/hangar.svg ADDED
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#1b5e55" style="stroke: light-dark(#1b5e55, #9fd9cf)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M48 456V264A208 208 0 0 1 464 264V456Z"/>
4
+ <path d="M160 456V304H352V456"/>
5
+ </g>
6
+ </svg>
data/art/index.html.erb CHANGED
@@ -10,18 +10,16 @@
10
10
  <link rel='icon' href='favicon/design-96.png' type='image/png' sizes='96x96'>
11
11
  <link rel='apple-touch-icon' href='favicon/design-180.png'>
12
12
  <link rel='manifest' href='site.webmanifest'>
13
- <!-- The same files every easyfaa page loads, under the version the head helper
14
- pins a host to, so the page is drawn by the bytes it hands out rather than by
15
- whatever was last built. Relative, so it reads the same on staging, on production
16
- and from a folder on disk. -->
17
- <link rel='stylesheet' href='v<%= version %>/bh/css/bh.css'>
18
- <link rel='stylesheet' href='v<%= version %>/css/easyfaa.css'>
19
- <link rel='stylesheet' href='v<%= version %>/bh/theme/bootstrap.css' data-recourse-theme=''>
20
- <script type='module' src='v<%= version %>/bh/js/bh.js'></script>
21
- <script type='module' src='v<%= version %>/js/easyfaa.js'></script>
13
+ <!-- The same files every easyfaa page loads. Relative, so it reads the same on staging,
14
+ on production and from a folder on disk. -->
15
+ <link rel='stylesheet' href='bh/css/bh.css'>
16
+ <link rel='stylesheet' href='css/easyfaa.css'>
17
+ <link rel='stylesheet' href='bh/theme/bootstrap.css' data-recourse-theme=''>
18
+ <script type='module' src='bh/js/bh.js'></script>
19
+ <script type='module' src='js/easyfaa.js'></script>
22
20
  <style>
23
21
  /* The page's own chrome and nothing else: everything shown below is styled by
24
- the pinned easyfaa.css alone, which is the point of showing it. */
22
+ easyfaa.css alone, which is the point of showing it. */
25
23
  .design-section { padding-block: 2rem; border-block-end: var(--bs-border-width) solid var(--bs-border-color); }
26
24
  .design-section > p { max-width: 48rem; margin-inline: auto; }
27
25
  .design-subsection { margin-block-start: 2.5rem; padding-block-start: 1.5rem; border-block-start: var(--bs-border-width) dashed var(--bs-border-color); }
@@ -36,7 +34,7 @@
36
34
  <body class='text-center'>
37
35
  <header class='container-fluid px-3 py-3 border-bottom d-flex flex-wrap justify-content-center align-items-baseline gap-3'>
38
36
  <a class='lockup plex' href='#'><svg aria-hidden='true' style='width: 1.0515em; height: 1.0515em; top: 0.18625em' viewBox='0 0 512 512'><g fill='none' stroke='#5aa9e6' stroke-width='28' stroke-linecap='round' stroke-linejoin='round' transform='rotate(45 256 256)'><path d='M196 60 L316 60 L316 372 L196 372 Z'/><path d='M196 120 L316 120'/><path d='M196 372 L256 470 L316 372'/><path d='M232 431 L256 470 L280 431 Z' fill='#0b1e3a'/></g></svg>design</a>
39
- <nav class='fg-2'>the <a href='#lockup'>lockups</a>, <a href='#theme'>themes</a>, <a href='#page'>pages</a>, <a href='#favicon'>icons</a> shared by <a href='https://pro.houseaccount.com/bookings' title='Fountain'><img class='design-mark' src='logo/fountain.svg' alt='Fountain'></a> <a href='https://gold.houseaccount.com/specialty_matches' title='Goldrush'><img class='design-mark' src='logo/goldrush.svg' alt='Goldrush'></a> <a href='https://providers.houseaccount.com/providers' title='Houston'><img class='design-mark' src='logo/houston.svg' alt='Houston'></a> <a href='https://checkout.houseaccount.com/providers' title='Autopilot'><img class='design-mark' src='logo/autopilot.svg' alt='Autopilot'></a></nav>
37
+ <nav class='fg-2'>the <a href='#lockup'>lockups</a>, <a href='#theme'>themes</a>, <a href='#page'>pages</a>, <a href='#favicon'>icons</a> shared by <a href='https://easyfaa.com' title='Tower'><img class='design-mark' src='logo/tower.svg' alt='Tower'></a> <a href='https://beta.easyannual.com' title='Hangar'><img class='design-mark' src='logo/hangar.svg' alt='Hangar'></a></nav>
40
38
  </header>
41
39
 
42
40
  <main class='container-fluid px-3'>
@@ -57,12 +55,6 @@
57
55
  <span class='small fg-2 mt-1'>bh's bundle, and the controller that paints the wall</span>
58
56
  </div>
59
57
  </div>
60
- <div class='col-12'>
61
- <div class='card p-3'>
62
- <strong>Pinned to a version — the latest is <%= version %></strong>
63
- <span class='design-url'><a href='v<%= version %>/css/easyfaa.css'>v<%= version %>/css/easyfaa.css</a> · <a href='v<%= version %>/js/easyfaa.js'>v<%= version %>/js/easyfaa.js</a> · <a href='v<%= version %>/bh/theme/nord.css'>v<%= version %>/bh/theme/nord.css</a></span>
64
- </div>
65
- </div>
66
58
  </div>
67
59
  </section>
68
60
 
@@ -70,7 +62,7 @@
70
62
  <h2>Themes</h2>
71
63
  <button type='button' class='btn btn-outline theme-primary' data-controller='scheme' data-action='scheme#rotate'
72
64
  data-scheme-themes-value='["bootstrap","dawn","dracula","gruvbox","monokai","nord","one_dark","solarized","tokyo_night"]'
73
- data-scheme-path-value='v<%= version %>/bh/theme' data-scheme-storage-value='recourse-scheme'>
65
+ data-scheme-path-value='bh/theme' data-scheme-storage-value='recourse-scheme'>
74
66
  <span class='recourse-scheme-light'><i class='bi bi-moon-fill'></i> Switch to dark</span>
75
67
  <span class='recourse-scheme-dark'><i class='bi bi-sun-fill'></i> Switch to light</span>
76
68
  </button>
@@ -89,9 +81,9 @@
89
81
  </div>
90
82
  <p class='fg-2 mt-4 mb-0'>At three sizes, to show the seating holds:</p>
91
83
  <div class='d-flex flex-wrap justify-content-center align-items-baseline gap-4 mt-2'>
92
- <a class='lockup plex' href='#lockup' style='font-size: 14px'><%= mark[:fountain] %>fountain</a>
93
- <a class='lockup plex' href='#lockup'><%= mark[:fountain] %>fountain</a>
94
- <a class='lockup plex' href='#lockup' style='font-size: 34px'><%= mark[:fountain] %>fountain</a>
84
+ <a class='lockup plex' href='#lockup' style='font-size: 14px'><%= mark[:tower] %>tower</a>
85
+ <a class='lockup plex' href='#lockup'><%= mark[:tower] %>tower</a>
86
+ <a class='lockup plex' href='#lockup' style='font-size: 34px'><%= mark[:tower] %>tower</a>
95
87
  </div>
96
88
  </section>
97
89
 
@@ -134,11 +126,19 @@
134
126
  <tbody>
135
127
  <tr><td><img class='design-logo' src='logo/easyfaa.svg' alt=''></td><th scope='row'>easyfaa</th><td><img src='favicon/easyfaa.svg' width='24' alt=''></td><td><img src='favicon/easyfaa-dev.svg' width='24' alt=''></td><td><img src='favicon/easyfaa-96.png' width='24' alt=''></td><td><img src='favicon/easyfaa-180.png' width='24' alt=''></td><td><img src='favicon/easyfaa-192.png' width='24' alt=''></td><td><img src='favicon/easyfaa-512.png' width='24' alt=''></td><td><a href='favicon/easyfaa.ico'>ico</a></td><td><a href='favicon/easyfaa.webmanifest'>manifest</a></td></tr>
136
128
  <tr><td><img class='design-logo' src='logo/cube.svg' alt=''></td><th scope='row'>cube</th><td><img src='favicon/cube.svg' width='24' alt=''></td><td><img src='favicon/cube-dev.svg' width='24' alt=''></td><td><img src='favicon/cube-96.png' width='24' alt=''></td><td><img src='favicon/cube-180.png' width='24' alt=''></td><td><img src='favicon/cube-192.png' width='24' alt=''></td><td><img src='favicon/cube-512.png' width='24' alt=''></td><td><a href='favicon/cube.ico'>ico</a></td><td><a href='favicon/cube.webmanifest'>manifest</a></td></tr>
137
- <tr><td><img class='design-logo' src='logo/fountain.svg' alt=''></td><th scope='row'>fountain</th><td><img src='favicon/fountain.svg' width='24' alt=''></td><td><img src='favicon/fountain-dev.svg' width='24' alt=''></td><td><img src='favicon/fountain-96.png' width='24' alt=''></td><td><img src='favicon/fountain-180.png' width='24' alt=''></td><td><img src='favicon/fountain-192.png' width='24' alt=''></td><td><img src='favicon/fountain-512.png' width='24' alt=''></td><td><a href='favicon/fountain.ico'>ico</a></td><td><a href='favicon/fountain.webmanifest'>manifest</a></td></tr>
138
- <tr><td><img class='design-logo' src='logo/goldrush.svg' alt=''></td><th scope='row'>goldrush</th><td><img src='favicon/goldrush.svg' width='24' alt=''></td><td><img src='favicon/goldrush-dev.svg' width='24' alt=''></td><td><img src='favicon/goldrush-96.png' width='24' alt=''></td><td><img src='favicon/goldrush-180.png' width='24' alt=''></td><td><img src='favicon/goldrush-192.png' width='24' alt=''></td><td><img src='favicon/goldrush-512.png' width='24' alt=''></td><td><a href='favicon/goldrush.ico'>ico</a></td><td><a href='favicon/goldrush.webmanifest'>manifest</a></td></tr>
139
- <tr><td><img class='design-logo' src='logo/houston.svg' alt=''></td><th scope='row'>houston</th><td><img src='favicon/houston.svg' width='24' alt=''></td><td><img src='favicon/houston-dev.svg' width='24' alt=''></td><td><img src='favicon/houston-96.png' width='24' alt=''></td><td><img src='favicon/houston-180.png' width='24' alt=''></td><td><img src='favicon/houston-192.png' width='24' alt=''></td><td><img src='favicon/houston-512.png' width='24' alt=''></td><td><a href='favicon/houston.ico'>ico</a></td><td><a href='favicon/houston.webmanifest'>manifest</a></td></tr>
140
129
  <tr><td><img class='design-logo' src='logo/design.svg' alt=''></td><th scope='row'>design</th><td><img src='favicon/design.svg' width='24' alt=''></td><td><img src='favicon/design-dev.svg' width='24' alt=''></td><td><img src='favicon/design-96.png' width='24' alt=''></td><td><img src='favicon/design-180.png' width='24' alt=''></td><td><img src='favicon/design-192.png' width='24' alt=''></td><td><img src='favicon/design-512.png' width='24' alt=''></td><td><a href='favicon/design.ico'>ico</a></td><td><a href='favicon/design.webmanifest'>manifest</a></td></tr>
141
- <tr><td><img class='design-logo' src='logo/autopilot.svg' alt=''></td><th scope='row'>autopilot</th><td><img src='favicon/autopilot.svg' width='24' alt=''></td><td><img src='favicon/autopilot-dev.svg' width='24' alt=''></td><td><img src='favicon/autopilot-96.png' width='24' alt=''></td><td><img src='favicon/autopilot-180.png' width='24' alt=''></td><td><img src='favicon/autopilot-192.png' width='24' alt=''></td><td><img src='favicon/autopilot-512.png' width='24' alt=''></td><td><a href='favicon/autopilot.ico'>ico</a></td><td><a href='favicon/autopilot.webmanifest'>manifest</a></td></tr>
130
+ <tr><td><img class='design-logo' src='logo/tower.svg' alt=''></td><th scope='row'>tower</th><td><img src='favicon/tower.svg' width='24' alt=''></td><td><img src='favicon/tower-dev.svg' width='24' alt=''></td><td><img src='favicon/tower-96.png' width='24' alt=''></td><td><img src='favicon/tower-180.png' width='24' alt=''></td><td><img src='favicon/tower-192.png' width='24' alt=''></td><td><img src='favicon/tower-512.png' width='24' alt=''></td><td><a href='favicon/tower.ico'>ico</a></td><td><a href='favicon/tower.webmanifest'>manifest</a></td></tr>
131
+ <tr><td><img class='design-logo' src='logo/hangar.svg' alt=''></td><th scope='row'>hangar</th><td><img src='favicon/hangar.svg' width='24' alt=''></td><td><img src='favicon/hangar-dev.svg' width='24' alt=''></td><td><img src='favicon/hangar-96.png' width='24' alt=''></td><td><img src='favicon/hangar-180.png' width='24' alt=''></td><td><img src='favicon/hangar-192.png' width='24' alt=''></td><td><img src='favicon/hangar-512.png' width='24' alt=''></td><td><a href='favicon/hangar.ico'>ico</a></td><td><a href='favicon/hangar.webmanifest'>manifest</a></td></tr>
132
+ <tr><td><img class='design-logo' src='logo/lens.svg' alt=''></td><th scope='row'>lens</th><td><img src='favicon/lens.svg' width='24' alt=''></td><td><img src='favicon/lens-dev.svg' width='24' alt=''></td><td><img src='favicon/lens-96.png' width='24' alt=''></td><td><img src='favicon/lens-180.png' width='24' alt=''></td><td><img src='favicon/lens-192.png' width='24' alt=''></td><td><img src='favicon/lens-512.png' width='24' alt=''></td><td><a href='favicon/lens.ico'>ico</a></td><td><a href='favicon/lens.webmanifest'>manifest</a></td></tr>
133
+ <tr><td><img class='design-logo' src='logo/rollaway.svg' alt=''></td><th scope='row'>rollaway</th><td><img src='favicon/rollaway.svg' width='24' alt=''></td><td><img src='favicon/rollaway-dev.svg' width='24' alt=''></td><td><img src='favicon/rollaway-96.png' width='24' alt=''></td><td><img src='favicon/rollaway-180.png' width='24' alt=''></td><td><img src='favicon/rollaway-192.png' width='24' alt=''></td><td><img src='favicon/rollaway-512.png' width='24' alt=''></td><td><a href='favicon/rollaway.ico'>ico</a></td><td><a href='favicon/rollaway.webmanifest'>manifest</a></td></tr>
134
+ <tr><td><img class='design-logo' src='logo/dataplate.svg' alt=''></td><th scope='row'>dataplate</th><td><img src='favicon/dataplate.svg' width='24' alt=''></td><td><img src='favicon/dataplate-dev.svg' width='24' alt=''></td><td><img src='favicon/dataplate-96.png' width='24' alt=''></td><td><img src='favicon/dataplate-180.png' width='24' alt=''></td><td><img src='favicon/dataplate-192.png' width='24' alt=''></td><td><img src='favicon/dataplate-512.png' width='24' alt=''></td><td><a href='favicon/dataplate.ico'>ico</a></td><td><a href='favicon/dataplate.webmanifest'>manifest</a></td></tr>
135
+ <tr><td><img class='design-logo' src='logo/data.svg' alt=''></td><th scope='row'>data</th><td><img src='favicon/data.svg' width='24' alt=''></td><td><img src='favicon/data-dev.svg' width='24' alt=''></td><td><img src='favicon/data-96.png' width='24' alt=''></td><td><img src='favicon/data-180.png' width='24' alt=''></td><td><img src='favicon/data-192.png' width='24' alt=''></td><td><img src='favicon/data-512.png' width='24' alt=''></td><td><a href='favicon/data.ico'>ico</a></td><td><a href='favicon/data.webmanifest'>manifest</a></td></tr>
136
+ <tr><td><img class='design-logo' src='logo/refinery.svg' alt=''></td><th scope='row'>refinery</th><td><img src='favicon/refinery.svg' width='24' alt=''></td><td><img src='favicon/refinery-dev.svg' width='24' alt=''></td><td><img src='favicon/refinery-96.png' width='24' alt=''></td><td><img src='favicon/refinery-180.png' width='24' alt=''></td><td><img src='favicon/refinery-192.png' width='24' alt=''></td><td><img src='favicon/refinery-512.png' width='24' alt=''></td><td><a href='favicon/refinery.ico'>ico</a></td><td><a href='favicon/refinery.webmanifest'>manifest</a></td></tr>
137
+ <tr><td><img class='design-logo' src='logo/stockroom.svg' alt=''></td><th scope='row'>stockroom</th><td><img src='favicon/stockroom.svg' width='24' alt=''></td><td><img src='favicon/stockroom-dev.svg' width='24' alt=''></td><td><img src='favicon/stockroom-96.png' width='24' alt=''></td><td><img src='favicon/stockroom-180.png' width='24' alt=''></td><td><img src='favicon/stockroom-192.png' width='24' alt=''></td><td><img src='favicon/stockroom-512.png' width='24' alt=''></td><td><a href='favicon/stockroom.ico'>ico</a></td><td><a href='favicon/stockroom.webmanifest'>manifest</a></td></tr>
138
+ <tr><td><img class='design-logo' src='logo/blackbox.svg' alt=''></td><th scope='row'>blackbox</th><td><img src='favicon/blackbox.svg' width='24' alt=''></td><td><img src='favicon/blackbox-dev.svg' width='24' alt=''></td><td><img src='favicon/blackbox-96.png' width='24' alt=''></td><td><img src='favicon/blackbox-180.png' width='24' alt=''></td><td><img src='favicon/blackbox-192.png' width='24' alt=''></td><td><img src='favicon/blackbox-512.png' width='24' alt=''></td><td><a href='favicon/blackbox.ico'>ico</a></td><td><a href='favicon/blackbox.webmanifest'>manifest</a></td></tr>
139
+ <tr><td><img class='design-logo' src='logo/drive.svg' alt=''></td><th scope='row'>drive</th><td><img src='favicon/drive.svg' width='24' alt=''></td><td><img src='favicon/drive-dev.svg' width='24' alt=''></td><td><img src='favicon/drive-96.png' width='24' alt=''></td><td><img src='favicon/drive-180.png' width='24' alt=''></td><td><img src='favicon/drive-192.png' width='24' alt=''></td><td><img src='favicon/drive-512.png' width='24' alt=''></td><td><a href='favicon/drive.ico'>ico</a></td><td><a href='favicon/drive.webmanifest'>manifest</a></td></tr>
140
+ <tr><td><img class='design-logo' src='logo/mirroring.svg' alt=''></td><th scope='row'>mirroring</th><td><img src='favicon/mirroring.svg' width='24' alt=''></td><td><img src='favicon/mirroring-dev.svg' width='24' alt=''></td><td><img src='favicon/mirroring-96.png' width='24' alt=''></td><td><img src='favicon/mirroring-180.png' width='24' alt=''></td><td><img src='favicon/mirroring-192.png' width='24' alt=''></td><td><img src='favicon/mirroring-512.png' width='24' alt=''></td><td><a href='favicon/mirroring.ico'>ico</a></td><td><a href='favicon/mirroring.webmanifest'>manifest</a></td></tr>
141
+ <tr><td><img class='design-logo' src='logo/wordmark.svg' alt=''></td><th scope='row'>wordmark</th><td><img src='favicon/wordmark.svg' width='24' alt=''></td><td><img src='favicon/wordmark-dev.svg' width='24' alt=''></td><td><img src='favicon/wordmark-96.png' width='24' alt=''></td><td><img src='favicon/wordmark-180.png' width='24' alt=''></td><td><img src='favicon/wordmark-192.png' width='24' alt=''></td><td><img src='favicon/wordmark-512.png' width='24' alt=''></td><td><a href='favicon/wordmark.ico'>ico</a></td><td><a href='favicon/wordmark.webmanifest'>manifest</a></td></tr>
142
142
  </tbody>
143
143
  </table>
144
144
  </div>
data/art/lens.svg ADDED
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#5b2a86" style="stroke: light-dark(#5b2a86, #d6bdf2)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M72 168V72H168"/>
4
+ <path d="M344 72H440V168"/>
5
+ <path d="M440 344V440H344"/>
6
+ <path d="M168 440H72V344"/>
7
+ <circle cx="256" cy="256" r="104"/>
8
+ </g>
9
+ </svg>
data/art/mirroring.svg ADDED
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#5aa9e6" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <ellipse cx="256" cy="192" rx="136" ry="152"/>
4
+ <path d="M200 120Q216 96 248 88"/>
5
+ <path d="M256 344V472"/>
6
+ <path d="M216 472H296"/>
7
+ </g>
8
+ </svg>
data/art/refinery.svg ADDED
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#6f4219" style="stroke: light-dark(#6f4219, #e8c29c)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M96 456V128A56 56 0 0 1 208 128V456"/>
4
+ <path d="M96 312H208"/>
5
+ <path d="M208 224H360V296"/>
6
+ <path d="M272 456V328Q360 280 448 328V456"/>
7
+ <path d="M48 456H464"/>
8
+ </g>
9
+ </svg>
data/art/rollaway.svg ADDED
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#b3261e" style="stroke: light-dark(#b3261e, #ff8a80)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <rect x="96" y="56" width="320" height="352" rx="20"/>
4
+ <path d="M96 176H416"/>
5
+ <path d="M96 292H416"/>
6
+ <path d="M216 116H296"/>
7
+ <path d="M216 234H296"/>
8
+ <path d="M216 350H296"/>
9
+ <circle cx="160" cy="448" r="24"/>
10
+ <circle cx="352" cy="448" r="24"/>
11
+ </g>
12
+ </svg>
data/art/stockroom.svg ADDED
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#19753e" style="stroke: light-dark(#19753e, #59c27a)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M72 40V472"/>
4
+ <path d="M440 40V472"/>
5
+ <path d="M72 200H440"/>
6
+ <path d="M72 360H440"/>
7
+ <path d="M120 200V112H240V200"/>
8
+ <path d="M280 200V144H392V200"/>
9
+ <path d="M120 360V280H200V360"/>
10
+ <path d="M240 360V248H392V360"/>
11
+ </g>
12
+ </svg>
data/art/tower.svg ADDED
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <g fill="none" stroke="#1a70d0" style="stroke: light-dark(#1a70d0, #689dff)" stroke-width="36" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M256 104V40"/>
4
+ <path d="M148 104H364"/>
5
+ <path d="M96 168H416L372 272H140Z"/>
6
+ <path d="M208 168 216 272"/>
7
+ <path d="M304 168 296 272"/>
8
+ <path d="M188 272 172 472"/>
9
+ <path d="M324 272 340 472"/>
10
+ <path d="M116 472H396"/>
11
+ </g>
12
+ </svg>
data/art/wordmark.svg ADDED
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
2
+ <path fill="#1a70d0" style="fill: light-dark(#1a70d0, #689dff)" d="M40 380.8 144.1 127.5H170.4L273.8 380.8H233.5L150 170.2H163.8L79.6 380.8ZM90.2 326.9V294.4H223.9V326.9ZM380.4 384.5Q356.6 384.5 337.5 372.6Q318.3 360.6 307.2 340.2Q296.1 319.8 296.1 294.4Q296.1 268.8 307.2 248.3Q318.3 227.9 337.4 215.8Q356.6 203.7 380.3 203.7Q400.2 203.7 415.7 212Q431.1 220.4 440.4 235Q449.7 249.6 450.3 268.4V319.7Q449.6 338.5 440.5 353.2Q431.4 367.8 415.8 376.1Q400.3 384.5 380.4 384.5ZM386.2 350.7Q409.8 350.7 424.1 334.9Q438.5 319.1 438.5 294.1Q438.5 277.4 432 264.6Q425.4 251.8 413.7 244.6Q401.9 237.4 386.1 237.4Q370.5 237.4 358.5 244.7Q346.5 251.9 339.6 264.7Q332.8 277.5 332.8 294.1Q332.8 310.7 339.6 323.5Q346.5 336.3 358.5 343.5Q370.6 350.7 386.2 350.7ZM436.3 380.8V334.2L442.7 291.8L436.3 249.9V207.3H472V380.8Z"/>
3
+ </svg>
@@ -5,33 +5,24 @@ module Wordmark
5
5
  # Hooks the gem into a host app: serves its files, its error pages and its helpers.
6
6
  class Engine < ::Rails::Engine
7
7
  # The folders the design site publishes, served from this gem at the same paths so a
8
- # page on an app and a page on the site link one file — this version's copy under its
9
- # own prefix among them. Each keeps its slash: `Rack::Static` matches on `start_with?`,
10
- # and `/page` would swallow `/pages` itself.
11
- PREFIXES = %W[/css/ /js/ /theme/ /font/ /logo/ /favicon/ /page/ /v#{VERSION}/].freeze
8
+ # page on an app and a page on the site link one file. Each keeps its slash:
9
+ # `Rack::Static` matches on `start_with?`, and `/page` would swallow `/pages` itself.
10
+ PREFIXES = %w[/css/ /js/ /theme/ /font/ /logo/ /favicon/ /page/].freeze
12
11
 
13
- # An unversioned file is asked for again on every full load and answered `304 Not
14
- # Modified` while it stands, since its URL never changes between versions. A font, whose
15
- # name carries a hash of its bytes, and anything under this version's prefix never change
16
- # at all, so a browser may keep them for good.
12
+ # A file is asked for again on every full load and answered `304 Not Modified` while it
13
+ # stands, since its URL never changes between versions. A font, whose name carries a hash
14
+ # of its bytes, never changes at all, so a browser may keep it for good.
17
15
  HEADERS = [
18
16
  [:all, { 'cache-control' => 'no-cache' }],
19
17
  ['/font/', { 'cache-control' => 'public, max-age=31536000, immutable' }],
20
- ['/v', { 'cache-control' => 'public, max-age=31536000, immutable' }],
21
18
  ].freeze
22
19
 
23
- # What a file is kept for while the gem is being worked on: not at all, since the
24
- # version's copy is rewritten under the same name until it is released, and a browser
25
- # told to keep it for a year would show yesterday's stylesheet on today's page.
26
- DEVELOPMENT_HEADERS = HEADERS.first 1
27
-
28
20
  # Before `Rails::Rack::Logger`, so fetching a stylesheet writes no `Started GET` line, and
29
21
  # cascading, so a host route under one of these prefixes still answers.
30
22
  initializer 'wordmark.assets' do |app|
31
- headers = Rails.env.development? ? DEVELOPMENT_HEADERS : HEADERS
32
23
  app.middleware.insert_before Rails::Rack::Logger, Rack::Static,
33
24
  urls: PREFIXES, root: Engine.root.join('public').to_s,
34
- header_rules: headers, cascade: true
25
+ header_rules: HEADERS, cascade: true
35
26
  end
36
27
 
37
28
  # The branded error pages, read by status from `public/page` the way Rails reads a host's
@@ -8,8 +8,8 @@ module Wordmark
8
8
 
9
9
  # The stylesheet and the script every page needs, and the icons `app` is known by —
10
10
  # this app unless said, since a page a customer reads may wear the house's mark rather
11
- # than the app's. Both files at this version's own path, which never changes and so is
12
- # kept for a year. A page refresh Turbo is sent morphs the page in place and keeps the
11
+ # than the app's. Both files at a path no release changes, asked for again on every
12
+ # full load. A page refresh Turbo is sent morphs the page in place and keeps the
13
13
  # scroll, so an answer landing in a thread leaves the reader where they were.
14
14
  def easyfaa_head_tags(app = Wordmark.app)
15
15
  safe_join [
@@ -33,12 +33,12 @@ module Wordmark
33
33
  ], INDENT
34
34
  end
35
35
 
36
- # The house's own two files, for a page that already links bh's. At this version's own
37
- # path, which never changes and so is kept for a year.
36
+ # The house's own two files, for a page that already links bh's. At the same
37
+ # path in every release, so a browser asks again on a full load and is answered 304.
38
38
  def easyfaa_tags
39
39
  safe_join [
40
- tag.link(rel: 'stylesheet', href: "/v#{VERSION}/css/easyfaa.css"),
41
- tag.script('', type: 'module', src: "/v#{VERSION}/js/easyfaa.js"),
40
+ tag.link(rel: 'stylesheet', href: '/css/easyfaa.css'),
41
+ tag.script('', type: 'module', src: '/js/easyfaa.js'),
42
42
  ], INDENT
43
43
  end
44
44
 
@@ -4,13 +4,23 @@ module Wordmark
4
4
  # and reaches IBM Plex Sans's ascender. Every drawing is a different shape inside its 512
5
5
  # grid, so equal sizes never align; these do. The house's own is the one exception: 0.8em
6
6
  # and dropped 0.16em, so the horizon centres on the lowercase rather than standing on it.
7
+ # A wide, short mark (blackbox, dataplate, wordmark) is held to about 50px, or
8
+ # reaching the ascender would make it twice as wide as its neighbours.
7
9
  MARKS = {
8
- autopilot: [46.36, 5.42],
10
+ blackbox: [50.00, 8.40],
9
11
  cube: [38.96, 1.72],
12
+ data: [41.71, 3.10],
13
+ dataplate: [50.00, 8.40],
10
14
  design: [50.47, 8.94],
15
+ drive: [41.84, 2.45],
11
16
  easyfaa: [38.4, 7.68],
12
- fountain: [39.54, 2.01],
13
- goldrush: [49.50, 11.02],
14
- houston: [39.73, 2.11],
17
+ hangar: [41.71, 3.10],
18
+ lens: [45.02, 4.75],
19
+ mirroring: [38.86, 1.67],
20
+ refinery: [43.30, 3.21],
21
+ rollaway: [40.24, 1.73],
22
+ stockroom: [38.86, 1.67],
23
+ tower: [38.86, 1.67],
24
+ wordmark: [50.00, 12.40],
15
25
  }.freeze
16
26
  end
@@ -1,4 +1,4 @@
1
1
  module Wordmark
2
2
  # Version of the gem, read by the gemspec and by hosts checking compatibility.
3
- VERSION = '0.21.0'
3
+ VERSION = '0.22.0'
4
4
  end
data/lib/wordmark.rb CHANGED
@@ -19,7 +19,7 @@ module Wordmark
19
19
  Message = Bh::Message
20
20
 
21
21
  # Which of the family this host is, read off the Rails application's own name — the
22
- # `Goldrush` of `Goldrush::Application` — and the house itself for any app not in `MARKS`.
22
+ # `Tower` of `Tower::Application` — and the house itself for any app not in `MARKS`.
23
23
  # What a tab wears, what a logo says and whose page answers `/down.html`.
24
24
  def self.app
25
25
  name = Rails.application.class.module_parent_name.downcase.to_sym
data/public/_headers CHANGED
@@ -17,10 +17,6 @@
17
17
  /page/*
18
18
  Cache-Control: public, max-age=0, must-revalidate
19
19
 
20
- # A versioned copy never changes, so a browser may keep it for a year and the edge for good.
21
- /v*
22
- Cache-Control: public, max-age=31536000, immutable
23
-
24
20
  # A font's name carries a hash of its bytes, so a browser may keep it for good; everything
25
21
  # else keeps Pages' default, which is to revalidate on every load and answer 304 while it
26
22
  # stands, so the URL of a file never has to change between versions.