easyfaa 0.20.0 → 0.90.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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -549
  3. data/MIT-LICENSE +1 -3
  4. data/README.md +17 -234
  5. data/exe/faa +4 -0
  6. data/lib/easyfaa/cli.rb +65 -0
  7. data/lib/easyfaa/version.rb +2 -2
  8. data/lib/easyfaa.rb +6 -36
  9. metadata +15 -227
  10. data/app/views/layouts/easyfaa.html.erb +0 -24
  11. data/app/views/recourses/_head.html.erb +0 -3
  12. data/art/autopilot.svg +0 -9
  13. data/art/cube.svg +0 -9
  14. data/art/design.svg +0 -8
  15. data/art/down.html.erb +0 -95
  16. data/art/easyfaa.svg +0 -7
  17. data/art/fountain.svg +0 -9
  18. data/art/goldrush.svg +0 -7
  19. data/art/houston.svg +0 -8
  20. data/art/icons.txt +0 -185
  21. data/art/index.html.erb +0 -157
  22. data/config/locales/easyfaa.en.yml +0 -7
  23. data/lib/easyfaa/copy.rb +0 -5
  24. data/lib/easyfaa/down.rb +0 -19
  25. data/lib/easyfaa/engine.rb +0 -53
  26. data/lib/easyfaa/helpers/flows.rb +0 -53
  27. data/lib/easyfaa/helpers/heads.rb +0 -60
  28. data/lib/easyfaa/helpers/logos.rb +0 -43
  29. data/lib/easyfaa/helpers.rb +0 -11
  30. data/lib/easyfaa/marks.rb +0 -16
  31. data/public/404.html +0 -118
  32. data/public/_headers +0 -28
  33. data/public/bh/css/bh.css +0 -1
  34. data/public/bh/js/bh.js +0 -152
  35. data/public/bh/theme/bootstrap.css +0 -10
  36. data/public/bh/theme/dawn.css +0 -189
  37. data/public/bh/theme/dracula.css +0 -189
  38. data/public/bh/theme/gruvbox.css +0 -189
  39. data/public/bh/theme/monokai.css +0 -190
  40. data/public/bh/theme/nord.css +0 -189
  41. data/public/bh/theme/one_dark.css +0 -189
  42. data/public/bh/theme/solarized.css +0 -188
  43. data/public/bh/theme/tokyo_night.css +0 -189
  44. data/public/css/easyfaa.css +0 -1
  45. data/public/down/autopilot.html +0 -87
  46. data/public/down/cube.html +0 -87
  47. data/public/down/design.html +0 -87
  48. data/public/down/easyfaa.html +0 -84
  49. data/public/down/fountain.html +0 -87
  50. data/public/down/goldrush.html +0 -87
  51. data/public/down/houston.html +0 -87
  52. data/public/favicon/autopilot-180.png +0 -0
  53. data/public/favicon/autopilot-192.png +0 -0
  54. data/public/favicon/autopilot-512.png +0 -0
  55. data/public/favicon/autopilot-96.png +0 -0
  56. data/public/favicon/autopilot-dev.svg +0 -9
  57. data/public/favicon/autopilot.ico +0 -0
  58. data/public/favicon/autopilot.svg +0 -9
  59. data/public/favicon/autopilot.webmanifest +0 -12
  60. data/public/favicon/cube-180.png +0 -0
  61. data/public/favicon/cube-192.png +0 -0
  62. data/public/favicon/cube-512.png +0 -0
  63. data/public/favicon/cube-96.png +0 -0
  64. data/public/favicon/cube-dev.svg +0 -9
  65. data/public/favicon/cube.ico +0 -0
  66. data/public/favicon/cube.svg +0 -9
  67. data/public/favicon/cube.webmanifest +0 -12
  68. data/public/favicon/design-180.png +0 -0
  69. data/public/favicon/design-192.png +0 -0
  70. data/public/favicon/design-512.png +0 -0
  71. data/public/favicon/design-96.png +0 -0
  72. data/public/favicon/design-dev.svg +0 -8
  73. data/public/favicon/design.ico +0 -0
  74. data/public/favicon/design.svg +0 -8
  75. data/public/favicon/design.webmanifest +0 -12
  76. data/public/favicon/easyfaa-180.png +0 -0
  77. data/public/favicon/easyfaa-192.png +0 -0
  78. data/public/favicon/easyfaa-512.png +0 -0
  79. data/public/favicon/easyfaa-96.png +0 -0
  80. data/public/favicon/easyfaa-dev.svg +0 -7
  81. data/public/favicon/easyfaa.ico +0 -0
  82. data/public/favicon/easyfaa.svg +0 -7
  83. data/public/favicon/easyfaa.webmanifest +0 -12
  84. data/public/favicon/fountain-180.png +0 -0
  85. data/public/favicon/fountain-192.png +0 -0
  86. data/public/favicon/fountain-512.png +0 -0
  87. data/public/favicon/fountain-96.png +0 -0
  88. data/public/favicon/fountain-dev.svg +0 -9
  89. data/public/favicon/fountain.ico +0 -0
  90. data/public/favicon/fountain.svg +0 -9
  91. data/public/favicon/fountain.webmanifest +0 -12
  92. data/public/favicon/goldrush-180.png +0 -0
  93. data/public/favicon/goldrush-192.png +0 -0
  94. data/public/favicon/goldrush-512.png +0 -0
  95. data/public/favicon/goldrush-96.png +0 -0
  96. data/public/favicon/goldrush-dev.svg +0 -7
  97. data/public/favicon/goldrush.ico +0 -0
  98. data/public/favicon/goldrush.svg +0 -7
  99. data/public/favicon/goldrush.webmanifest +0 -12
  100. data/public/favicon/houston-180.png +0 -0
  101. data/public/favicon/houston-192.png +0 -0
  102. data/public/favicon/houston-512.png +0 -0
  103. data/public/favicon/houston-96.png +0 -0
  104. data/public/favicon/houston-dev.svg +0 -8
  105. data/public/favicon/houston.ico +0 -0
  106. data/public/favicon/houston.svg +0 -8
  107. data/public/favicon/houston.webmanifest +0 -12
  108. data/public/favicon.ico +0 -0
  109. data/public/font/bootstrap-icons-6LILWPE2.woff2 +0 -0
  110. data/public/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  111. data/public/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
  112. data/public/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
  113. data/public/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
  114. data/public/font/ibm-plex-sans-500-latin.woff2 +0 -0
  115. data/public/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
  116. data/public/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
  117. data/public/index.html +0 -165
  118. data/public/js/easyfaa.js +0 -1
  119. data/public/logo/autopilot.png +0 -0
  120. data/public/logo/autopilot.svg +0 -9
  121. data/public/logo/cube.png +0 -0
  122. data/public/logo/cube.svg +0 -9
  123. data/public/logo/design.png +0 -0
  124. data/public/logo/design.svg +0 -8
  125. data/public/logo/easyfaa.png +0 -0
  126. data/public/logo/easyfaa.svg +0 -7
  127. data/public/logo/fountain.png +0 -0
  128. data/public/logo/fountain.svg +0 -9
  129. data/public/logo/goldrush.png +0 -0
  130. data/public/logo/goldrush.svg +0 -7
  131. data/public/logo/houston.png +0 -0
  132. data/public/logo/houston.svg +0 -8
  133. data/public/page/400.html +0 -118
  134. data/public/page/404.html +0 -118
  135. data/public/page/406-unsupported-browser.html +0 -118
  136. data/public/page/422.html +0 -118
  137. data/public/page/500.html +0 -118
  138. data/public/site.webmanifest +0 -12
  139. data/public/theme/bootstrap.css +0 -10
  140. data/public/theme/dawn.css +0 -189
  141. data/public/theme/dracula.css +0 -189
  142. data/public/theme/gruvbox.css +0 -189
  143. data/public/theme/monokai.css +0 -190
  144. data/public/theme/nord.css +0 -189
  145. data/public/theme/one_dark.css +0 -189
  146. data/public/theme/solarized.css +0 -188
  147. data/public/theme/tokyo_night.css +0 -189
  148. data/public/v0.20.0/bh/css/bh.css +0 -1
  149. data/public/v0.20.0/bh/js/bh.js +0 -152
  150. data/public/v0.20.0/bh/theme/bootstrap.css +0 -10
  151. data/public/v0.20.0/bh/theme/dawn.css +0 -189
  152. data/public/v0.20.0/bh/theme/dracula.css +0 -189
  153. data/public/v0.20.0/bh/theme/gruvbox.css +0 -189
  154. data/public/v0.20.0/bh/theme/monokai.css +0 -190
  155. data/public/v0.20.0/bh/theme/nord.css +0 -189
  156. data/public/v0.20.0/bh/theme/one_dark.css +0 -189
  157. data/public/v0.20.0/bh/theme/solarized.css +0 -188
  158. data/public/v0.20.0/bh/theme/tokyo_night.css +0 -189
  159. data/public/v0.20.0/css/easyfaa.css +0 -1
  160. data/public/v0.20.0/font/bootstrap-icons-FRBPO3H7.woff2 +0 -0
  161. data/public/v0.20.0/font/ibm-plex-sans-500-latin-LA7QXWWL.woff2 +0 -0
  162. data/public/v0.20.0/font/ibm-plex-sans-500-latin-ext-X4QHZICY.woff2 +0 -0
  163. data/public/v0.20.0/font/ibm-plex-sans-500-latin-ext.woff2 +0 -0
  164. data/public/v0.20.0/font/ibm-plex-sans-500-latin.woff2 +0 -0
  165. data/public/v0.20.0/font/ibm-plex-sans-500-vietnamese-24B6BSND.woff2 +0 -0
  166. data/public/v0.20.0/font/ibm-plex-sans-500-vietnamese.woff2 +0 -0
  167. data/public/v0.20.0/js/easyfaa.js +0 -1
@@ -1,53 +0,0 @@
1
- module Easyfaa
2
- module Helpers
3
- # The page of a signup flow: the house's mark over the wall it stands on, a title, a line,
4
- # one card, and the way out under it.
5
- module Flows
6
- # How wide the card is unless a page says otherwise: as wide as a thread, a table or a
7
- # contract wants. A page asking one question says a narrower one.
8
- WIDTH = '75rem'
9
-
10
- # Draws the page around the card's content: the lockup over what the view said in
11
- # `content_for` — its `:title`, its `:subtitle`, how wide the card is in `:width` — and
12
- # the `links` under the card joined by a middot. No subtitle draws no line and no links
13
- # no foot: a page says only what it has. The mark and the wall are not asked for, being
14
- # what a house flow is; every other option is an attribute of the column.
15
- # @param href [String] where the lockup over the page leads.
16
- # @param links [Array<String>] the way out, and whatever else stands beside it.
17
- # @param options [Hash] anything else the column carries.
18
- # @return [String] the page.
19
- def flow(href: Logos::HOME, links: [], **options, &)
20
- parts = [
21
- tag.header(easyfaa_logo(href: href)),
22
- *easyfaa_flow_words,
23
- easyfaa_flow_card(content_for(:width), &),
24
- easyfaa_flow_links(links),
25
- ]
26
- classes = class_names 'flow', options[:class]
27
-
28
- tag.div safe_join(parts.compact), class: classes, data: { controller: 'wall' },
29
- **options.except(:class)
30
- end
31
-
32
- private
33
-
34
- def easyfaa_flow_words
35
- [tag.h1(content_for(:title)), (tag.p content_for :subtitle if content_for? :subtitle)]
36
- end
37
-
38
- def easyfaa_flow_card(width, &)
39
- width = width.presence || WIDTH
40
- style = "--flow-width: #{width}" unless width == WIDTH
41
-
42
- tag.div capture(&), class: 'flow-card p-3 md:p-4 mx-auto', style:
43
- end
44
-
45
- def easyfaa_flow_links(pieces)
46
- pieces = Array(pieces).compact_blank
47
- return if pieces.empty?
48
-
49
- tag.footer safe_join(pieces, tag.span('·', class: 'fg-2', aria: { hidden: true }))
50
- end
51
- end
52
- end
53
- end
@@ -1,60 +0,0 @@
1
- module Easyfaa
2
- module Helpers
3
- # What every easyfaa page puts in its `<head>`.
4
- module Heads
5
- # One line per tag, each at the depth a head's children sit at in a layout indented
6
- # by two: `<html>`, then `<head>`, then these.
7
- INDENT = "\n "
8
-
9
- # The stylesheet and the script every page needs, and the icons `app` is known by —
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
13
- # scroll, so an answer landing in a thread leaves the reader where they were.
14
- def easyfaa_head_tags(app = Easyfaa.app)
15
- safe_join [
16
- tag.meta(name: 'viewport', content: 'width=device-width, initial-scale=1'),
17
- tag.meta(name: 'color-scheme', content: 'light dark'),
18
- tag.meta(name: 'turbo-refresh-method', content: 'morph'),
19
- tag.meta(name: 'turbo-refresh-scroll', content: 'preserve'),
20
- easyfaa_layer,
21
- easyfaa_icons(app),
22
- ], INDENT
23
- end
24
-
25
- # bh's layer and the house's on top of it, in that order: every rule and every
26
- # controller here is written against what bh draws, so bh goes first. bh's files are
27
- # served by its own engine, under a path of its own.
28
- def easyfaa_layer
29
- safe_join [
30
- tag.link(rel: 'stylesheet', href: "#{Bh::Engine::PREFIX}css/bh.css"),
31
- tag.script('', type: 'module', src: "#{Bh::Engine::PREFIX}js/bh.js"),
32
- easyfaa_tags,
33
- ], INDENT
34
- end
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.
38
- def easyfaa_tags
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"),
42
- ], INDENT
43
- end
44
-
45
- # The icons a tab, a home screen and a saved app know `app` by — this app unless said:
46
- # the SVG, its dev variant while developing, the 96px PNG, the apple touch icon and the
47
- # web manifest, one to a line.
48
- def easyfaa_icons(app = Easyfaa.app)
49
- mark = Rails.env.development? ? "#{app}-dev" : app
50
-
51
- safe_join [
52
- tag.link(rel: 'icon', href: "/favicon/#{mark}.svg", type: 'image/svg+xml'),
53
- tag.link(rel: 'icon', href: "/favicon/#{app}-96.png", type: 'image/png', sizes: '96x96'),
54
- tag.link(rel: 'apple-touch-icon', href: "/favicon/#{app}-180.png"),
55
- tag.link(rel: 'manifest', href: "/favicon/#{app}.webmanifest"),
56
- ], INDENT
57
- end
58
- end
59
- end
60
- end
@@ -1,43 +0,0 @@
1
- # `squish` and `html_safe`, for the marks read once at load, before any Rails has booted.
2
- require 'active_support/core_ext/string/filters'
3
- require 'active_support/core_ext/string/output_safety'
4
-
5
- module Easyfaa
6
- module Helpers
7
- # An app's mark and its name, drawn as one word wherever a page signs itself.
8
- module Logos
9
- # Where a logo leads unless told otherwise: the house's front door.
10
- HOME = 'https://easyfaa.com/'
11
-
12
- # Every drawing the logos are made of, read once from the art the icons render from.
13
- DRAWINGS = MARKS.keys.to_h do |app|
14
- drawing = File.read File.expand_path("../../../art/#{app}.svg", __dir__)
15
- [app, drawing.sub('<svg ', "<svg aria-hidden='true' ").squish.html_safe]
16
- end.freeze
17
-
18
- # The mark and the name of `app` — the house's horizon and `easyfaa` by default — as a
19
- # link to `href`. Every other option is an attribute of the link, `class` included.
20
- def easyfaa_logo(app: :easyfaa, href: HOME, **options)
21
- classes = class_names 'lockup plex', options[:class]
22
- words = safe_join [easyfaa_logo_mark(app), easyfaa_logo_word(app)]
23
-
24
- tag.a words, class: classes, **options.except(:class), href:
25
- end
26
-
27
- private
28
-
29
- def easyfaa_logo_mark(app)
30
- size, shift = MARKS.fetch(app).map { |px| (px / 48).round 4 }
31
- style = "width: #{size}em; height: #{size}em; top: #{shift}em"
32
-
33
- DRAWINGS.fetch(app).sub('<svg ', "<svg style='#{style}' ").html_safe
34
- end
35
-
36
- def easyfaa_logo_word(app)
37
- return app.to_s unless app == :easyfaa
38
-
39
- safe_join [tag.span('easy', class: 'easy'), 'faa']
40
- end
41
- end
42
- end
43
- end
@@ -1,11 +0,0 @@
1
- require 'bh'
2
- require_relative 'helpers/flows'
3
- require_relative 'helpers/heads'
4
- require_relative 'helpers/logos'
5
-
6
- module Easyfaa
7
- # Everything a view may call, in one module the engine puts on every Action View.
8
- module Helpers
9
- include Flows, Heads, Logos
10
- end
11
- end
data/lib/easyfaa/marks.rb DELETED
@@ -1,16 +0,0 @@
1
- module Easyfaa
2
- # How each app's mark sits beside its name in a lockup, measured at 48px: the box the
3
- # drawing is rendered at, and how far down it is pushed so its ink stands on the baseline
4
- # and reaches IBM Plex Sans's ascender. Every drawing is a different shape inside its 512
5
- # grid, so equal sizes never align; these do. The house's own is the one exception: 0.8em
6
- # and dropped 0.16em, so the horizon centres on the lowercase rather than standing on it.
7
- MARKS = {
8
- autopilot: [46.36, 5.42],
9
- cube: [38.96, 1.72],
10
- design: [50.47, 8.94],
11
- easyfaa: [38.4, 7.68],
12
- fountain: [39.54, 2.01],
13
- goldrush: [49.50, 11.02],
14
- houston: [39.73, 2.11],
15
- }.freeze
16
- end
data/public/404.html DELETED
@@ -1,118 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>The page you were looking for doesn't exist (404 Not found)</title>
7
- <meta name="color-scheme" content="light dark">
8
- <link rel="icon" href="/favicon.ico" sizes="32x32">
9
- <link rel="icon" href="/icon.svg" type="image/svg+xml">
10
- <link rel="apple-touch-icon" href="/apple-touch-icon.png">
11
- <link rel="manifest" href="/site.webmanifest">
12
- <style>
13
- @font-face {
14
- font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500; font-display: swap;
15
- src: url('/font/ibm-plex-sans-500-vietnamese.woff2') format('woff2');
16
- 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;
17
- }
18
- @font-face {
19
- font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500; font-display: swap;
20
- src: url('/font/ibm-plex-sans-500-latin-ext.woff2') format('woff2');
21
- 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;
22
- }
23
- @font-face {
24
- font-family: 'IBM Plex Sans'; font-style: normal; font-weight: 500; font-display: swap;
25
- src: url('/font/ibm-plex-sans-500-latin.woff2') format('woff2');
26
- 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;
27
- }
28
- :root {
29
- --bg: #fbfcfe;
30
- --ink: #0b1e3a;
31
- --mark: #5aa9e6;
32
- --muted: #5c6c84;
33
- }
34
- @media (prefers-color-scheme: dark) {
35
- :root {
36
- --bg: #0f1622;
37
- --ink: #cfe3f6;
38
- --muted: #8698af;
39
- }
40
- }
41
- * { box-sizing: border-box; }
42
- body {
43
- margin: 0;
44
- min-height: 100svh;
45
- display: flex;
46
- flex-direction: column;
47
- background: var(--bg);
48
- font-family: "IBM Plex Sans", "Helvetica Neue", Arial, sans-serif;
49
- font-weight: 500;
50
- letter-spacing: 0.01em;
51
- }
52
- main {
53
- flex: 1;
54
- display: flex;
55
- flex-direction: column;
56
- align-items: center;
57
- justify-content: center;
58
- padding: 40px 24px;
59
- text-align: center;
60
- }
61
- .lockup {
62
- white-space: nowrap;
63
- max-width: 100%;
64
- color: var(--ink);
65
- line-height: 1;
66
- margin: 0;
67
- }
68
- .lockup svg {
69
- position: relative;
70
- vertical-align: baseline;
71
- }
72
- main .lockup {
73
- font-size: clamp(1.5rem, 5.5vw, 2.5rem);
74
- font-weight: 500;
75
- /* The longest heading is wider than a phone, so let it wrap rather than
76
- overflow; the mark stays attached to the status code on the first line. */
77
- white-space: normal;
78
- text-wrap: balance;
79
- line-height: 1.25;
80
- }
81
- main .lockup svg {
82
- width: 1.0073em; height: 1.0073em;
83
- top: 0.1337em;
84
- margin-right: 0.1327em;
85
- }
86
- main p {
87
- margin: 22px 0 0;
88
- color: var(--muted);
89
- font-size: 1rem;
90
- line-height: 1.6;
91
- }
92
- footer {
93
- position: sticky;
94
- bottom: 0;
95
- background: var(--bg);
96
- display: flex;
97
- justify-content: center;
98
- padding: 20px 0 26px;
99
- }
100
- footer .lockup { font-size: 20px; }
101
- footer .lockup svg {
102
- width: 16px; height: 16px;
103
- top: 3.2px;
104
- margin-right: 4.2px;
105
- }
106
- footer .easy { color: var(--mark); }
107
- </style>
108
- </head>
109
- <body>
110
- <main>
111
- <h1 class="lockup"><svg viewBox="0 0 512 512" aria-hidden="true"><g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round"><path d="M251.4 235.6 C254.8 239.8 256.5 246.9 254 254.2 C251.6 261.5 245 268.8 235.4 272.3 C225.8 275.7 213.3 275.1 202.2 268.8 C191 262.6 181.5 250.6 178.1 235.6 C174.6 220.6 177.5 202.7 187.6 187.7 C197.6 172.8 215 161 235.4 157.6 C255.8 154.1 279.1 159.2 297.9 173.1 C316.6 187 330.6 209.8 334.1 235.6 C337.5 261.4 330.2 290.1 312.5 312.7 C294.7 335.3 266.6 351.5 235.4 354.9 C204.2 358.4 170.2 348.8 143.7 327.3 C117.3 305.7 98.8 272.2 95.4 235.6 C92 198.9 103.7 159.6 129.1 129.3 C154.5 99 193.3 78.4 235.4 74.9 C277.5 71.5 322.2 85.5 356.3 114.7 C390.4 143.9 413.3 188.1 416.7 235.6 C420.2 283.1 404 333.2 370.9 371.1 C337.9 409 288.3 434.1 235.4 437.6"/></g></svg>404 Not found</h1>
112
- <p>You may have mistyped the address or the page may have moved.</p>
113
- </main>
114
- <footer>
115
- <p class="lockup"><svg viewBox="0 0 512 512" aria-hidden="true"><g fill="none" stroke="#5aa9e6" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"><path d="M74.5 340H437.5A200 200 0 0 1 74.5 340Z" fill="#0b1e3a" stroke="none"/><circle cx="256" cy="256" r="200"/><path d="M150 256H216L256 296L296 256H362"/></g></svg><span class="easy">easy</span>faa</p>
116
- </footer>
117
- </body>
118
- </html>
data/public/_headers DELETED
@@ -1,28 +0,0 @@
1
- # A page on another origin loads the script as a module and the stylesheet's font across
2
- # origins, both of which the browser refuses without this. Cloudflare Pages adds no CORS.
3
- /*
4
- Access-Control-Allow-Origin: *
5
-
6
- # An unversioned file follows the latest release, so a browser asks for it again on every
7
- # load and is answered 304 while it stands. Pages would otherwise let one be kept for four
8
- # hours, and a page drawn against a new bundle would run the old one until they were up.
9
- /css/*
10
- Cache-Control: public, max-age=0, must-revalidate
11
- /js/*
12
- Cache-Control: public, max-age=0, must-revalidate
13
- /theme/*
14
- Cache-Control: public, max-age=0, must-revalidate
15
- /down/*
16
- Cache-Control: public, max-age=0, must-revalidate
17
- /page/*
18
- Cache-Control: public, max-age=0, must-revalidate
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
- # A font's name carries a hash of its bytes, so a browser may keep it for good; everything
25
- # else keeps Pages' default, which is to revalidate on every load and answer 304 while it
26
- # stands, so the URL of a file never has to change between versions.
27
- /font/*
28
- Cache-Control: public, max-age=31536000, immutable