@certrev/cert-block 1.1.1 → 1.2.0-canary.1

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 (61) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +66 -4
  3. package/dist/builder/cert-chrome-data.d.ts +10 -0
  4. package/dist/builder/cert-chrome-data.d.ts.map +1 -1
  5. package/dist/builder/cert-chrome-data.js.map +1 -1
  6. package/dist/builder/cert-review-card.d.ts.map +1 -1
  7. package/dist/builder/cert-review-card.js +22 -2
  8. package/dist/builder/cert-review-card.js.map +1 -1
  9. package/dist/builder/envelope-face.d.ts +25 -1
  10. package/dist/builder/envelope-face.d.ts.map +1 -1
  11. package/dist/builder/envelope-face.js +40 -0
  12. package/dist/builder/envelope-face.js.map +1 -1
  13. package/dist/builder/index.d.ts +1 -1
  14. package/dist/builder/index.d.ts.map +1 -1
  15. package/dist/builder/index.js +1 -1
  16. package/dist/builder/index.js.map +1 -1
  17. package/dist/reader/face.d.ts +12 -0
  18. package/dist/reader/face.d.ts.map +1 -0
  19. package/dist/reader/face.js +19 -0
  20. package/dist/reader/face.js.map +1 -0
  21. package/dist/reader/helpers.d.ts +48 -0
  22. package/dist/reader/helpers.d.ts.map +1 -0
  23. package/dist/reader/helpers.js +166 -0
  24. package/dist/reader/helpers.js.map +1 -0
  25. package/dist/reader/index.d.ts +10 -0
  26. package/dist/reader/index.d.ts.map +1 -0
  27. package/dist/reader/index.js +10 -0
  28. package/dist/reader/index.js.map +1 -0
  29. package/dist/reader/logo.d.ts +4 -0
  30. package/dist/reader/logo.d.ts.map +1 -0
  31. package/dist/reader/logo.js +23 -0
  32. package/dist/reader/logo.js.map +1 -0
  33. package/dist/reader/reader-css.generated.d.ts +2 -0
  34. package/dist/reader/reader-css.generated.d.ts.map +1 -0
  35. package/dist/reader/reader-css.generated.js +6 -0
  36. package/dist/reader/reader-css.generated.js.map +1 -0
  37. package/dist/reader/render.d.ts +26 -0
  38. package/dist/reader/render.d.ts.map +1 -0
  39. package/dist/reader/render.js +238 -0
  40. package/dist/reader/render.js.map +1 -0
  41. package/dist/reader/tokens.d.ts +8 -0
  42. package/dist/reader/tokens.d.ts.map +1 -0
  43. package/dist/reader/tokens.js +80 -0
  44. package/dist/reader/tokens.js.map +1 -0
  45. package/dist/verify/get-verified-delivery.d.ts.map +1 -1
  46. package/dist/verify/get-verified-delivery.js +5 -1
  47. package/dist/verify/get-verified-delivery.js.map +1 -1
  48. package/package.json +7 -1
  49. package/src/builder/cert-chrome-data.ts +10 -0
  50. package/src/builder/cert-review-card.tsx +31 -2
  51. package/src/builder/envelope-face.ts +54 -5
  52. package/src/builder/index.tsx +3 -0
  53. package/src/reader/face.ts +35 -0
  54. package/src/reader/helpers.ts +178 -0
  55. package/src/reader/index.ts +14 -0
  56. package/src/reader/logo.ts +28 -0
  57. package/src/reader/reader-css.generated.ts +5 -0
  58. package/src/reader/reader.css +550 -0
  59. package/src/reader/render.ts +326 -0
  60. package/src/reader/tokens.ts +93 -0
  61. package/src/verify/get-verified-delivery.ts +5 -1
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The CertREV mark the reader face paints in the card cap (18px) and the memo footer (17px): the Liquid
3
+ * `certrev-reader-logo` snippet's inline SVG data URI, byte for byte, so a Builder page and a Shopify page carry the
4
+ * same image. White on a dark accent, black (the demo's logo-mono) on a light one.
5
+ *
6
+ * The four `d` strings below are the snippet's, copied rather than retyped; the golden tests compare the whole
7
+ * element, so a slipped digit fails there.
8
+ */
9
+ import { escapeHtml } from '../components/escape.js'
10
+
11
+ export type ReaderLogoInk = 'white' | 'mono'
12
+
13
+ const MARK_PATHS: readonly string[] = [
14
+ 'M67.59 221.77L138.77 292.95C145.8 299.98 145.8 311.44 138.77 318.47L123.02 334.22C116 341.25 104.54 341.25 97.5 334.22L26.32 263.04C19.29 256.01 19.29 244.55 26.32 237.52L42.07 221.77C49.1 214.74 60.56 214.74 67.59 221.77Z',
15
+ 'M96.79 335.08L81.12 319.42C73.8 312.1 73.8 300.23 81.12 292.92L315.88 58.16C323.2 50.85 335.06 50.85 342.38 58.16L358.04 73.83C365.36 81.14 365.36 93.01 358.04 100.33L123.29 335.08C115.97 342.4 104.1 342.4 96.79 335.08Z',
16
+ 'M203.5 335.14L187.83 319.48C180.52 312.16 180.52 300.29 187.83 292.98L315.88 164.93C323.2 157.62 335.06 157.62 342.38 164.93L358.04 180.6C365.36 187.92 365.36 199.78 358.04 207.1L230 335.14C222.68 342.46 210.82 342.46 203.5 335.14Z',
17
+ 'M310.21 335.2L294.54 319.54C287.23 312.22 287.23 300.36 294.54 293.04L315.88 271.71C323.2 264.39 335.06 264.39 342.38 271.71L358.04 287.37C365.36 294.69 365.36 306.55 358.04 313.87L336.71 335.2C329.39 342.52 317.53 342.52 310.21 335.2Z',
18
+ ]
19
+
20
+ /** The `<img>` for the mark: `size` is the pixel width and height, `alt` is '' where the words carry the meaning. */
21
+ export function readerLogo(ink: ReaderLogoInk, size: number, alt: string): string {
22
+ const fill = ink === 'white' ? 'ffffff' : '000000'
23
+ const paths = MARK_PATHS.map((d) => `%3Cpath fill='%23${fill}' d='${d}'/%3E`).join('')
24
+ return (
25
+ `<img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 375 375'%3E${paths}%3C/svg%3E" ` +
26
+ `alt="${escapeHtml(alt)}" width="${escapeHtml(String(size))}" height="${escapeHtml(String(size))}" decoding="async">`
27
+ )
28
+ }
@@ -0,0 +1,5 @@
1
+ // biome-ignore-all format: generated file
2
+ // biome-ignore-all lint: generated file
3
+ // GENERATED by scripts/refresh-reader.mjs from src/reader/reader.css (the portal reader stylesheet, byte for
4
+ // byte). Do not edit: run the script. reader-css.test.ts asserts this string equals the .css file.
5
+ export const READER_CSS = "/* CERTREV-READER-GEN:BEGIN */\n/* GENERATED by scripts/build-cert-reader-css.mjs from src/lib/cert-render/reader/site-snapshot/ (certrev.com,\n * component Reader, \"What your reader sees\"). DO NOT EDIT: run `pnpm build:cert-reader-css`. The face is driven by\n * four variables the Liquid root sets inline: --cr-ba accent, --cr-ba-fg accent foreground, --cr-br corner, --cr-bf\n * font. */\n.certrev-reader {\n\tcolor: #141414;\n\tfont-family: var(--cr-bf);\n\tfont-size: 16px;\n\tline-height: 1.65;\n\t-webkit-font-smoothing: antialiased;\n\ttext-rendering: optimizelegibility;\n}\n.certrev-reader,\n.certrev-reader *,\n.certrev-reader *:before,\n.certrev-reader *:after {\n\tbox-sizing: border-box;\n}\n.certrev-reader .certrev-r-card {\n\tz-index: 1;\n\tborder: 1px solid #14141421;\n\tborder-radius: calc(var(--cr-br) * 0.7);\n\tbackground: #fff;\n\tflex-shrink: 0;\n\tmargin: 12px 0 0;\n\tposition: relative;\n\toverflow: hidden;\n}\n.certrev-reader .certrev-r-card.pad {\n\tpadding: 15px 18px;\n\toverflow: visible;\n}\n.certrev-reader .certrev-r-card.pad .certrev-r-bys {\n\tgap: 14px;\n}\n.certrev-reader .certrev-r-cap {\n\twhite-space: nowrap;\n\tbackground: var(--cr-ba);\n\tcolor: var(--cr-ba-fg);\n\tfont-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\tletter-spacing: 0.14em;\n\ttext-transform: uppercase;\n\talign-items: center;\n\tgap: 11px;\n\tpadding: 14px 20px;\n\tfont-size: 10.5px;\n\tfont-weight: 700;\n\tdisplay: flex;\n}\n.certrev-reader .certrev-r-cap.center {\n\tletter-spacing: 0.16em;\n\tjustify-content: center;\n\tpadding: 12px;\n}\n.certrev-reader .certrev-r-cap img {\n\tflex-shrink: 0;\n\twidth: 18px;\n\theight: 18px;\n\tdisplay: block;\n}\n.certrev-reader .certrev-r-cap-body {\n\tpadding: 15px 18px 13px;\n}\n.certrev-reader .certrev-r-bys {\n\tgrid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr);\n\tgap: 20px;\n\tdisplay: grid;\n}\n.certrev-reader .certrev-r-by {\n\talign-items: flex-start;\n\tgap: 12px;\n\tdisplay: flex;\n}\n.certrev-reader .certrev-r-by > div {\n\tmin-width: 0;\n}\n.certrev-reader .certrev-r-by b {\n\tfont-size: 14.5px;\n\tfont-weight: 700;\n\tline-height: 1.3;\n\tdisplay: block;\n}\n.certrev-reader .certrev-r-by em {\n\tcolor: #14141495;\n\tmargin-top: 4px;\n\tfont-size: 12.5px;\n\tfont-style: normal;\n\tline-height: 1.45;\n\tdisplay: block;\n}\n.certrev-reader .certrev-r-role {\n\tfont-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\tletter-spacing: 0.14em;\n\ttext-transform: uppercase;\n\tcolor: #14141495;\n\tmargin-top: 9px;\n\tfont-size: 9px;\n\tdisplay: block;\n}\n.certrev-reader .certrev-r-role.on {\n\tcolor: #141414;\n\tfont-weight: 700;\n}\n.certrev-reader .certrev-r-face {\n\tbackground: #14141412;\n\twidth: 42px;\n\theight: 42px;\n\tcolor: #141414;\n\tborder-radius: 50%;\n\tflex-shrink: 0;\n\tdisplay: block;\n\toverflow: hidden;\n}\n.certrev-reader .certrev-r-face.sm {\n\twidth: 36px;\n\theight: 36px;\n}\n.certrev-reader .certrev-r-face.lg {\n\twidth: 46px;\n\theight: 46px;\n}\n.certrev-reader .certrev-r-face svg {\n\tfill: currentColor;\n\topacity: 0.38;\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: block;\n}\n.certrev-reader .certrev-r-rule {\n\tbackground: #14141421;\n\theight: 1px;\n\tmargin: 15px 0 12px;\n}\n.certrev-reader .certrev-r-foot {\n\tjustify-content: space-between;\n\talign-items: center;\n\tgap: 16px;\n\tfont-size: 12.5px;\n\tdisplay: flex;\n}\n.certrev-reader .certrev-r-foot span {\n\twhite-space: nowrap;\n}\n.certrev-reader .certrev-r-foot em {\n\tfont-style: normal;\n\tfont-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\tletter-spacing: 0.14em;\n\ttext-transform: uppercase;\n\tcolor: #14141495;\n\tmargin-right: 9px;\n\tfont-size: 9.5px;\n}\n.certrev-reader .certrev-r-foot span + span {\n\tcolor: #14141495;\n}\n.certrev-reader .certrev-r-kick {\n\tfont-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\tletter-spacing: 0.16em;\n\ttext-transform: uppercase;\n\tcolor: #14141495;\n\tmargin-bottom: 14px;\n\tfont-size: 9.5px;\n}\n.certrev-reader .certrev-r-memo {\n\tgap: 15px;\n\tdisplay: flex;\n}\n.certrev-reader .certrev-r-memo > div {\n\tflex: 1;\n\tmin-width: 0;\n}\n.certrev-reader .certrev-r-memo-name {\n\tcolor: #14141495;\n\tmargin-bottom: 11px;\n\tfont-size: 15px;\n}\n.certrev-reader .certrev-r-memo-name b {\n\tcolor: #141414;\n\tfont-weight: 700;\n}\n.certrev-reader blockquote {\n\tborder-left: 3px solid var(--cr-ba);\n\tcolor: #141414b8;\n\ttext-wrap: pretty;\n\tmargin: 0;\n\tpadding-left: 16px;\n\tfont-size: 13.5px;\n\tfont-style: italic;\n\tline-height: 1.55;\n}\n.certrev-reader .certrev-r-links {\n\tgap: 22px;\n\tmargin-top: 14px;\n\tdisplay: flex;\n}\n.certrev-reader .certrev-r-links a {\n\tcolor: #141414;\n\twhite-space: nowrap;\n\tfont-size: 13.5px;\n\tfont-weight: 700;\n\ttext-decoration: none;\n}\n.certrev-reader .certrev-r-links a:hover {\n\tcolor: var(--cr-ba);\n}\n.certrev-reader .certrev-r-vfoot {\n\talign-items: baseline;\n\tgap: 16px;\n\tdisplay: flex;\n}\n.certrev-reader .certrev-r-vfoot .certrev-r-scope {\n\tflex: 1;\n\tmin-width: 0;\n\tmargin-top: 0;\n}\n.certrev-reader .certrev-r-verified {\n\tcolor: #141414b8;\n\tflex-shrink: 0;\n\talign-items: center;\n\tgap: 9px;\n\tfont-size: 12.5px;\n\tdisplay: inline-flex;\n}\n.certrev-reader .certrev-r-verified img {\n\tflex-shrink: 0;\n\twidth: 17px;\n\theight: 17px;\n\tdisplay: block;\n}\n.certrev-reader .certrev-r-verified b {\n\tfont-family: \"Plus Jakarta Sans\", -apple-system, system-ui, Helvetica, Arial, sans-serif;\n\tfont-weight: 800;\n}\n.certrev-reader .certrev-r-scope {\n\tcolor: #14141495;\n\ttext-wrap: pretty;\n\tmargin-top: 9px;\n\tfont-size: 12.5px;\n\tline-height: 1.5;\n}\n.certrev-reader .certrev-r-scope em {\n\tfont-style: normal;\n\tfont-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\tletter-spacing: 0.1em;\n\ttext-transform: uppercase;\n\tfont-size: 9.5px;\n}\n.certrev-reader .certrev-r-side {\n\tz-index: 1;\n\tfloat: right;\n\tborder: 1px solid #14141421;\n\tborder-radius: var(--cr-br);\n\twidth: 268px;\n\tbox-shadow: 0 4px 18px #14141412;\n\tbackground: #fff;\n\tmargin: 2px 0 18px 28px;\n\tposition: relative;\n\toverflow: hidden;\n}\n.certrev-reader .certrev-r-side-body {\n\tpadding: 18px;\n}\n.certrev-reader .certrev-r-side-body .certrev-r-by b {\n\tfont-size: 14px;\n}\n.certrev-reader .certrev-r-side-body p {\n\tcolor: #141414b8;\n\ttext-wrap: pretty;\n\tmargin: 15px 0 0;\n\tfont-size: 13px;\n\tline-height: 1.55;\n}\n.certrev-reader .certrev-r-side-body blockquote {\n\tmargin-top: 15px;\n\tpadding-left: 15px;\n\tfont-size: 13.5px;\n\tline-height: 1.55;\n}\n.certrev-reader .certrev-r-side-body .certrev-r-scope {\n\tmargin-top: 15px;\n\tfont-size: 11.5px;\n}\n.certrev-reader .certrev-r-side-links {\n\tborder-top: 1px solid #14141421;\n\tgrid-template-columns: 1fr 1fr;\n\tdisplay: grid;\n}\n.certrev-reader .certrev-r-side-links a {\n\ttext-align: center;\n\tcolor: #141414;\n\tpadding: 13px;\n\tfont-size: 13px;\n\tfont-weight: 700;\n\ttext-decoration: none;\n}\n.certrev-reader .certrev-r-side-links a:first-child {\n\tborder-right: 1px solid #14141421;\n}\n.certrev-reader .certrev-r-side-links a:hover {\n\tcolor: var(--cr-ba);\n}\n.certrev-reader .certrev-r-pill {\n\tz-index: 3;\n\tbackground: var(--cr-ba);\n\tcolor: var(--cr-ba-fg);\n\tborder-radius: 999px;\n\talign-items: center;\n\tgap: 13px;\n\tpadding: 12px 21px;\n\tdisplay: inline-flex;\n\tposition: absolute;\n\tbottom: 26px;\n\tright: 26px;\n\tbox-shadow: 0 10px 26px #14141429;\n}\n.certrev-reader .certrev-r-pill span {\n\twhite-space: nowrap;\n\tfont-family: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\tletter-spacing: 0.14em;\n\ttext-transform: uppercase;\n\tfont-size: 10.5px;\n\tfont-weight: 700;\n}\n.certrev-reader .certrev-r-pill a {\n\tcolor: inherit;\n\ttext-underline-offset: 3px;\n\tfont-size: 13.5px;\n\tfont-weight: 700;\n\ttext-decoration: underline;\n}\n.certrev-reader .certrev-r-pill i {\n\topacity: 0.42;\n\tfont-style: normal;\n}\n@media (max-width: 820px) {\n\t.certrev-reader .certrev-r-side {\n\t\tfloat: none;\n\t\twidth: auto;\n\t\tmargin: 20px 0;\n\t}\n\t.certrev-reader .certrev-r-bys {\n\t\tgrid-template-columns: 1fr;\n\t\tgap: 18px;\n\t}\n\t.certrev-reader .certrev-r-cap {\n\t\tletter-spacing: 0.1em;\n\t\tpadding: 12px 16px;\n\t\tfont-size: 9.5px;\n\t}\n\t.certrev-reader .certrev-r-cap-body,\n\t.certrev-reader .certrev-r-card.pad {\n\t\tpadding: 16px 18px;\n\t}\n\t.certrev-reader .certrev-r-pill {\n\t\tgap: 10px;\n\t\tpadding: 10px 16px;\n\t\tbottom: 20px;\n\t\tright: 20px;\n\t}\n}\n@media (max-width: 560px) {\n\t.certrev-reader .certrev-r-links {\n\t\tflex-direction: column;\n\t\tgap: 9px;\n\t}\n\t.certrev-reader .certrev-r-foot {\n\t\tflex-direction: column;\n\t\talign-items: flex-start;\n\t\tgap: 6px;\n\t}\n\t.certrev-reader .certrev-r-foot span {\n\t\twhite-space: normal;\n\t}\n\t.certrev-reader .certrev-r-vfoot {\n\t\tflex-direction: column;\n\t\talign-items: flex-start;\n\t\tgap: 10px;\n\t}\n\t.certrev-reader .certrev-r-vfoot .certrev-r-scope {\n\t\twidth: 100%;\n\t}\n\t.certrev-reader .certrev-r-cap {\n\t\twhite-space: normal;\n\t\tletter-spacing: 0.08em;\n\t\tpadding: 11px 14px;\n\t\tfont-size: 9px;\n\t}\n\t.certrev-reader .certrev-r-cap-body,\n\t.certrev-reader .certrev-r-card.pad {\n\t\tpadding: 14px 15px;\n\t}\n\t.certrev-reader .certrev-r-foot {\n\t\tflex-wrap: wrap;\n\t\tgap: 8px 14px;\n\t}\n\t.certrev-reader .certrev-r-links {\n\t\tflex-wrap: wrap;\n\t\tgap: 16px;\n\t}\n\t.certrev-reader .certrev-r-vfoot {\n\t\tflex-wrap: wrap;\n\t\tgap: 10px;\n\t}\n\t.certrev-reader .certrev-r-face.lg {\n\t\twidth: 38px;\n\t\theight: 38px;\n\t}\n\t.certrev-reader .certrev-r-side {\n\t\tmargin: 16px 0;\n\t}\n\t.certrev-reader .certrev-r-side-links a {\n\t\tpadding: 12px 8px;\n\t}\n\t.certrev-reader .certrev-r-pill {\n\t\ttext-align: center;\n\t\tflex-wrap: wrap;\n\t\tjustify-content: center;\n\t\tgap: 6px 12px;\n\t\tpadding: 11px 14px;\n\t\tbottom: 14px;\n\t\tleft: 14px;\n\t\tright: 14px;\n\t}\n\t.certrev-reader .certrev-r-pill span {\n\t\twhite-space: normal;\n\t}\n}\n/* Theme-bleed armor (hand-written, not from the snapshot; see build-cert-reader-css.mjs). */\n.certrev-reader img {\n\tmargin: 0 !important;\n\tmax-width: 100% !important;\n\tfloat: none !important;\n}\n.certrev-reader a {\n\tbackground-image: none !important;\n}\n.certrev-reader .certrev-r-links a,\n.certrev-reader .certrev-r-side-links a {\n\ttext-decoration: none !important;\n}\n.certrev-reader .certrev-r-links a:not(:hover),\n.certrev-reader .certrev-r-side-links a:not(:hover) {\n\tcolor: #141414 !important;\n}\n.certrev-reader .certrev-r-links a:hover,\n.certrev-reader .certrev-r-side-links a:hover {\n\tcolor: var(--cr-ba) !important;\n}\n.certrev-reader .certrev-r-pill a {\n\tcolor: inherit !important;\n\ttext-decoration: underline !important;\n}\n.certrev-reader .certrev-r-face img {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n\tobject-fit: cover;\n}\n.certrev-reader .certrev-r-bys.solo {\n\tgrid-template-columns: minmax(0, 1fr);\n}\n.certrev-reader .certrev-r-foot a {\n\tcolor: inherit !important;\n\ttext-decoration: underline !important;\n}\n.certrev-reader .certrev-r-pill {\n\tposition: fixed;\n\tmargin-bottom: env(safe-area-inset-bottom, 0px);\n}\n.certrev-memo-wrap[data-certrev-placement=\"rail\"] .certrev-reader .certrev-r-side {\n\tfloat: none;\n\twidth: auto;\n\tmargin: 0;\n}\n.certrev-memo-wrap[data-certrev-placement=\"body-fallback\"] .certrev-reader .certrev-r-side,\n.certrev-sidebar-wrap:not([data-certrev-placement]) .certrev-reader .certrev-r-side {\n\tfloat: none;\n\twidth: auto;\n\tmax-width: 360px;\n\tmargin: 0 auto;\n}\n.certrev-reader .certrev-r-side-links.single {\n\tgrid-template-columns: minmax(0, 1fr);\n}\n.certrev-reader .certrev-r-side-links.single a:first-child {\n\tborder-right: 0;\n}\n/* Reader-only font aliases (generated from the CERTREV-FONTS rules above: the same files and unicode ranges, only the family and\n * the weight range differ, so the reader paints weights the legacy card does not declare). */\n@font-face {\n\tfont-family: \"CertREV Reader Serif\";\n\tfont-style: normal;\n\tfont-weight: 400 700;\n\tfont-display: swap;\n\tsrc: url(\"https://assets.certrev.com/fonts/cert-playfair-latin-ext.woff2\") format(\"woff2\");\n\tunicode-range:\n\t\tU+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;\n}\n\n@font-face {\n\tfont-family: \"CertREV Reader Serif\";\n\tfont-style: normal;\n\tfont-weight: 400 700;\n\tfont-display: swap;\n\tsrc: url(\"https://assets.certrev.com/fonts/cert-playfair-latin.woff2\") format(\"woff2\");\n\tunicode-range:\n\t\tU+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;\n}\n\n@font-face {\n\tfont-family: \"CertREV Reader Serif\";\n\tfont-style: italic;\n\tfont-weight: 400 700;\n\tfont-display: swap;\n\tsrc: url(\"https://assets.certrev.com/fonts/cert-playfair-italic-latin-ext.woff2\") format(\"woff2\");\n\tunicode-range:\n\t\tU+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;\n}\n\n@font-face {\n\tfont-family: \"CertREV Reader Serif\";\n\tfont-style: italic;\n\tfont-weight: 400 700;\n\tfont-display: swap;\n\tsrc: url(\"https://assets.certrev.com/fonts/cert-playfair-italic-latin.woff2\") format(\"woff2\");\n\tunicode-range:\n\t\tU+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;\n}\n\n@font-face {\n\tfont-family: \"CertREV Reader Grotesk\";\n\tfont-style: normal;\n\tfont-weight: 400 800;\n\tfont-display: swap;\n\tsrc: url(\"https://assets.certrev.com/fonts/cert-jakarta-latin-ext.woff2\") format(\"woff2\");\n\tunicode-range:\n\t\tU+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;\n}\n\n@font-face {\n\tfont-family: \"CertREV Reader Grotesk\";\n\tfont-style: normal;\n\tfont-weight: 400 800;\n\tfont-display: swap;\n\tsrc: url(\"https://assets.certrev.com/fonts/cert-jakarta-latin.woff2\") format(\"woff2\");\n\tunicode-range:\n\t\tU+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;\n}\n/* CERTREV-READER-GEN:END */\n"
@@ -0,0 +1,550 @@
1
+ /* CERTREV-READER-GEN:BEGIN */
2
+ /* GENERATED by scripts/build-cert-reader-css.mjs from src/lib/cert-render/reader/site-snapshot/ (certrev.com,
3
+ * component Reader, "What your reader sees"). DO NOT EDIT: run `pnpm build:cert-reader-css`. The face is driven by
4
+ * four variables the Liquid root sets inline: --cr-ba accent, --cr-ba-fg accent foreground, --cr-br corner, --cr-bf
5
+ * font. */
6
+ .certrev-reader {
7
+ color: #141414;
8
+ font-family: var(--cr-bf);
9
+ font-size: 16px;
10
+ line-height: 1.65;
11
+ -webkit-font-smoothing: antialiased;
12
+ text-rendering: optimizelegibility;
13
+ }
14
+ .certrev-reader,
15
+ .certrev-reader *,
16
+ .certrev-reader *:before,
17
+ .certrev-reader *:after {
18
+ box-sizing: border-box;
19
+ }
20
+ .certrev-reader .certrev-r-card {
21
+ z-index: 1;
22
+ border: 1px solid #14141421;
23
+ border-radius: calc(var(--cr-br) * 0.7);
24
+ background: #fff;
25
+ flex-shrink: 0;
26
+ margin: 12px 0 0;
27
+ position: relative;
28
+ overflow: hidden;
29
+ }
30
+ .certrev-reader .certrev-r-card.pad {
31
+ padding: 15px 18px;
32
+ overflow: visible;
33
+ }
34
+ .certrev-reader .certrev-r-card.pad .certrev-r-bys {
35
+ gap: 14px;
36
+ }
37
+ .certrev-reader .certrev-r-cap {
38
+ white-space: nowrap;
39
+ background: var(--cr-ba);
40
+ color: var(--cr-ba-fg);
41
+ font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
42
+ letter-spacing: 0.14em;
43
+ text-transform: uppercase;
44
+ align-items: center;
45
+ gap: 11px;
46
+ padding: 14px 20px;
47
+ font-size: 10.5px;
48
+ font-weight: 700;
49
+ display: flex;
50
+ }
51
+ .certrev-reader .certrev-r-cap.center {
52
+ letter-spacing: 0.16em;
53
+ justify-content: center;
54
+ padding: 12px;
55
+ }
56
+ .certrev-reader .certrev-r-cap img {
57
+ flex-shrink: 0;
58
+ width: 18px;
59
+ height: 18px;
60
+ display: block;
61
+ }
62
+ .certrev-reader .certrev-r-cap-body {
63
+ padding: 15px 18px 13px;
64
+ }
65
+ .certrev-reader .certrev-r-bys {
66
+ grid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr);
67
+ gap: 20px;
68
+ display: grid;
69
+ }
70
+ .certrev-reader .certrev-r-by {
71
+ align-items: flex-start;
72
+ gap: 12px;
73
+ display: flex;
74
+ }
75
+ .certrev-reader .certrev-r-by > div {
76
+ min-width: 0;
77
+ }
78
+ .certrev-reader .certrev-r-by b {
79
+ font-size: 14.5px;
80
+ font-weight: 700;
81
+ line-height: 1.3;
82
+ display: block;
83
+ }
84
+ .certrev-reader .certrev-r-by em {
85
+ color: #14141495;
86
+ margin-top: 4px;
87
+ font-size: 12.5px;
88
+ font-style: normal;
89
+ line-height: 1.45;
90
+ display: block;
91
+ }
92
+ .certrev-reader .certrev-r-role {
93
+ font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
94
+ letter-spacing: 0.14em;
95
+ text-transform: uppercase;
96
+ color: #14141495;
97
+ margin-top: 9px;
98
+ font-size: 9px;
99
+ display: block;
100
+ }
101
+ .certrev-reader .certrev-r-role.on {
102
+ color: #141414;
103
+ font-weight: 700;
104
+ }
105
+ .certrev-reader .certrev-r-face {
106
+ background: #14141412;
107
+ width: 42px;
108
+ height: 42px;
109
+ color: #141414;
110
+ border-radius: 50%;
111
+ flex-shrink: 0;
112
+ display: block;
113
+ overflow: hidden;
114
+ }
115
+ .certrev-reader .certrev-r-face.sm {
116
+ width: 36px;
117
+ height: 36px;
118
+ }
119
+ .certrev-reader .certrev-r-face.lg {
120
+ width: 46px;
121
+ height: 46px;
122
+ }
123
+ .certrev-reader .certrev-r-face svg {
124
+ fill: currentColor;
125
+ opacity: 0.38;
126
+ width: 100%;
127
+ height: 100%;
128
+ display: block;
129
+ }
130
+ .certrev-reader .certrev-r-rule {
131
+ background: #14141421;
132
+ height: 1px;
133
+ margin: 15px 0 12px;
134
+ }
135
+ .certrev-reader .certrev-r-foot {
136
+ justify-content: space-between;
137
+ align-items: center;
138
+ gap: 16px;
139
+ font-size: 12.5px;
140
+ display: flex;
141
+ }
142
+ .certrev-reader .certrev-r-foot span {
143
+ white-space: nowrap;
144
+ }
145
+ .certrev-reader .certrev-r-foot em {
146
+ font-style: normal;
147
+ font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
148
+ letter-spacing: 0.14em;
149
+ text-transform: uppercase;
150
+ color: #14141495;
151
+ margin-right: 9px;
152
+ font-size: 9.5px;
153
+ }
154
+ .certrev-reader .certrev-r-foot span + span {
155
+ color: #14141495;
156
+ }
157
+ .certrev-reader .certrev-r-kick {
158
+ font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
159
+ letter-spacing: 0.16em;
160
+ text-transform: uppercase;
161
+ color: #14141495;
162
+ margin-bottom: 14px;
163
+ font-size: 9.5px;
164
+ }
165
+ .certrev-reader .certrev-r-memo {
166
+ gap: 15px;
167
+ display: flex;
168
+ }
169
+ .certrev-reader .certrev-r-memo > div {
170
+ flex: 1;
171
+ min-width: 0;
172
+ }
173
+ .certrev-reader .certrev-r-memo-name {
174
+ color: #14141495;
175
+ margin-bottom: 11px;
176
+ font-size: 15px;
177
+ }
178
+ .certrev-reader .certrev-r-memo-name b {
179
+ color: #141414;
180
+ font-weight: 700;
181
+ }
182
+ .certrev-reader blockquote {
183
+ border-left: 3px solid var(--cr-ba);
184
+ color: #141414b8;
185
+ text-wrap: pretty;
186
+ margin: 0;
187
+ padding-left: 16px;
188
+ font-size: 13.5px;
189
+ font-style: italic;
190
+ line-height: 1.55;
191
+ }
192
+ .certrev-reader .certrev-r-links {
193
+ gap: 22px;
194
+ margin-top: 14px;
195
+ display: flex;
196
+ }
197
+ .certrev-reader .certrev-r-links a {
198
+ color: #141414;
199
+ white-space: nowrap;
200
+ font-size: 13.5px;
201
+ font-weight: 700;
202
+ text-decoration: none;
203
+ }
204
+ .certrev-reader .certrev-r-links a:hover {
205
+ color: var(--cr-ba);
206
+ }
207
+ .certrev-reader .certrev-r-vfoot {
208
+ align-items: baseline;
209
+ gap: 16px;
210
+ display: flex;
211
+ }
212
+ .certrev-reader .certrev-r-vfoot .certrev-r-scope {
213
+ flex: 1;
214
+ min-width: 0;
215
+ margin-top: 0;
216
+ }
217
+ .certrev-reader .certrev-r-verified {
218
+ color: #141414b8;
219
+ flex-shrink: 0;
220
+ align-items: center;
221
+ gap: 9px;
222
+ font-size: 12.5px;
223
+ display: inline-flex;
224
+ }
225
+ .certrev-reader .certrev-r-verified img {
226
+ flex-shrink: 0;
227
+ width: 17px;
228
+ height: 17px;
229
+ display: block;
230
+ }
231
+ .certrev-reader .certrev-r-verified b {
232
+ font-family: "Plus Jakarta Sans", -apple-system, system-ui, Helvetica, Arial, sans-serif;
233
+ font-weight: 800;
234
+ }
235
+ .certrev-reader .certrev-r-scope {
236
+ color: #14141495;
237
+ text-wrap: pretty;
238
+ margin-top: 9px;
239
+ font-size: 12.5px;
240
+ line-height: 1.5;
241
+ }
242
+ .certrev-reader .certrev-r-scope em {
243
+ font-style: normal;
244
+ font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
245
+ letter-spacing: 0.1em;
246
+ text-transform: uppercase;
247
+ font-size: 9.5px;
248
+ }
249
+ .certrev-reader .certrev-r-side {
250
+ z-index: 1;
251
+ float: right;
252
+ border: 1px solid #14141421;
253
+ border-radius: var(--cr-br);
254
+ width: 268px;
255
+ box-shadow: 0 4px 18px #14141412;
256
+ background: #fff;
257
+ margin: 2px 0 18px 28px;
258
+ position: relative;
259
+ overflow: hidden;
260
+ }
261
+ .certrev-reader .certrev-r-side-body {
262
+ padding: 18px;
263
+ }
264
+ .certrev-reader .certrev-r-side-body .certrev-r-by b {
265
+ font-size: 14px;
266
+ }
267
+ .certrev-reader .certrev-r-side-body p {
268
+ color: #141414b8;
269
+ text-wrap: pretty;
270
+ margin: 15px 0 0;
271
+ font-size: 13px;
272
+ line-height: 1.55;
273
+ }
274
+ .certrev-reader .certrev-r-side-body blockquote {
275
+ margin-top: 15px;
276
+ padding-left: 15px;
277
+ font-size: 13.5px;
278
+ line-height: 1.55;
279
+ }
280
+ .certrev-reader .certrev-r-side-body .certrev-r-scope {
281
+ margin-top: 15px;
282
+ font-size: 11.5px;
283
+ }
284
+ .certrev-reader .certrev-r-side-links {
285
+ border-top: 1px solid #14141421;
286
+ grid-template-columns: 1fr 1fr;
287
+ display: grid;
288
+ }
289
+ .certrev-reader .certrev-r-side-links a {
290
+ text-align: center;
291
+ color: #141414;
292
+ padding: 13px;
293
+ font-size: 13px;
294
+ font-weight: 700;
295
+ text-decoration: none;
296
+ }
297
+ .certrev-reader .certrev-r-side-links a:first-child {
298
+ border-right: 1px solid #14141421;
299
+ }
300
+ .certrev-reader .certrev-r-side-links a:hover {
301
+ color: var(--cr-ba);
302
+ }
303
+ .certrev-reader .certrev-r-pill {
304
+ z-index: 3;
305
+ background: var(--cr-ba);
306
+ color: var(--cr-ba-fg);
307
+ border-radius: 999px;
308
+ align-items: center;
309
+ gap: 13px;
310
+ padding: 12px 21px;
311
+ display: inline-flex;
312
+ position: absolute;
313
+ bottom: 26px;
314
+ right: 26px;
315
+ box-shadow: 0 10px 26px #14141429;
316
+ }
317
+ .certrev-reader .certrev-r-pill span {
318
+ white-space: nowrap;
319
+ font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
320
+ letter-spacing: 0.14em;
321
+ text-transform: uppercase;
322
+ font-size: 10.5px;
323
+ font-weight: 700;
324
+ }
325
+ .certrev-reader .certrev-r-pill a {
326
+ color: inherit;
327
+ text-underline-offset: 3px;
328
+ font-size: 13.5px;
329
+ font-weight: 700;
330
+ text-decoration: underline;
331
+ }
332
+ .certrev-reader .certrev-r-pill i {
333
+ opacity: 0.42;
334
+ font-style: normal;
335
+ }
336
+ @media (max-width: 820px) {
337
+ .certrev-reader .certrev-r-side {
338
+ float: none;
339
+ width: auto;
340
+ margin: 20px 0;
341
+ }
342
+ .certrev-reader .certrev-r-bys {
343
+ grid-template-columns: 1fr;
344
+ gap: 18px;
345
+ }
346
+ .certrev-reader .certrev-r-cap {
347
+ letter-spacing: 0.1em;
348
+ padding: 12px 16px;
349
+ font-size: 9.5px;
350
+ }
351
+ .certrev-reader .certrev-r-cap-body,
352
+ .certrev-reader .certrev-r-card.pad {
353
+ padding: 16px 18px;
354
+ }
355
+ .certrev-reader .certrev-r-pill {
356
+ gap: 10px;
357
+ padding: 10px 16px;
358
+ bottom: 20px;
359
+ right: 20px;
360
+ }
361
+ }
362
+ @media (max-width: 560px) {
363
+ .certrev-reader .certrev-r-links {
364
+ flex-direction: column;
365
+ gap: 9px;
366
+ }
367
+ .certrev-reader .certrev-r-foot {
368
+ flex-direction: column;
369
+ align-items: flex-start;
370
+ gap: 6px;
371
+ }
372
+ .certrev-reader .certrev-r-foot span {
373
+ white-space: normal;
374
+ }
375
+ .certrev-reader .certrev-r-vfoot {
376
+ flex-direction: column;
377
+ align-items: flex-start;
378
+ gap: 10px;
379
+ }
380
+ .certrev-reader .certrev-r-vfoot .certrev-r-scope {
381
+ width: 100%;
382
+ }
383
+ .certrev-reader .certrev-r-cap {
384
+ white-space: normal;
385
+ letter-spacing: 0.08em;
386
+ padding: 11px 14px;
387
+ font-size: 9px;
388
+ }
389
+ .certrev-reader .certrev-r-cap-body,
390
+ .certrev-reader .certrev-r-card.pad {
391
+ padding: 14px 15px;
392
+ }
393
+ .certrev-reader .certrev-r-foot {
394
+ flex-wrap: wrap;
395
+ gap: 8px 14px;
396
+ }
397
+ .certrev-reader .certrev-r-links {
398
+ flex-wrap: wrap;
399
+ gap: 16px;
400
+ }
401
+ .certrev-reader .certrev-r-vfoot {
402
+ flex-wrap: wrap;
403
+ gap: 10px;
404
+ }
405
+ .certrev-reader .certrev-r-face.lg {
406
+ width: 38px;
407
+ height: 38px;
408
+ }
409
+ .certrev-reader .certrev-r-side {
410
+ margin: 16px 0;
411
+ }
412
+ .certrev-reader .certrev-r-side-links a {
413
+ padding: 12px 8px;
414
+ }
415
+ .certrev-reader .certrev-r-pill {
416
+ text-align: center;
417
+ flex-wrap: wrap;
418
+ justify-content: center;
419
+ gap: 6px 12px;
420
+ padding: 11px 14px;
421
+ bottom: 14px;
422
+ left: 14px;
423
+ right: 14px;
424
+ }
425
+ .certrev-reader .certrev-r-pill span {
426
+ white-space: normal;
427
+ }
428
+ }
429
+ /* Theme-bleed armor (hand-written, not from the snapshot; see build-cert-reader-css.mjs). */
430
+ .certrev-reader img {
431
+ margin: 0 !important;
432
+ max-width: 100% !important;
433
+ float: none !important;
434
+ }
435
+ .certrev-reader a {
436
+ background-image: none !important;
437
+ }
438
+ .certrev-reader .certrev-r-links a,
439
+ .certrev-reader .certrev-r-side-links a {
440
+ text-decoration: none !important;
441
+ }
442
+ .certrev-reader .certrev-r-links a:not(:hover),
443
+ .certrev-reader .certrev-r-side-links a:not(:hover) {
444
+ color: #141414 !important;
445
+ }
446
+ .certrev-reader .certrev-r-links a:hover,
447
+ .certrev-reader .certrev-r-side-links a:hover {
448
+ color: var(--cr-ba) !important;
449
+ }
450
+ .certrev-reader .certrev-r-pill a {
451
+ color: inherit !important;
452
+ text-decoration: underline !important;
453
+ }
454
+ .certrev-reader .certrev-r-face img {
455
+ display: block;
456
+ width: 100%;
457
+ height: 100%;
458
+ object-fit: cover;
459
+ }
460
+ .certrev-reader .certrev-r-bys.solo {
461
+ grid-template-columns: minmax(0, 1fr);
462
+ }
463
+ .certrev-reader .certrev-r-foot a {
464
+ color: inherit !important;
465
+ text-decoration: underline !important;
466
+ }
467
+ .certrev-reader .certrev-r-pill {
468
+ position: fixed;
469
+ margin-bottom: env(safe-area-inset-bottom, 0px);
470
+ }
471
+ .certrev-memo-wrap[data-certrev-placement="rail"] .certrev-reader .certrev-r-side {
472
+ float: none;
473
+ width: auto;
474
+ margin: 0;
475
+ }
476
+ .certrev-memo-wrap[data-certrev-placement="body-fallback"] .certrev-reader .certrev-r-side,
477
+ .certrev-sidebar-wrap:not([data-certrev-placement]) .certrev-reader .certrev-r-side {
478
+ float: none;
479
+ width: auto;
480
+ max-width: 360px;
481
+ margin: 0 auto;
482
+ }
483
+ .certrev-reader .certrev-r-side-links.single {
484
+ grid-template-columns: minmax(0, 1fr);
485
+ }
486
+ .certrev-reader .certrev-r-side-links.single a:first-child {
487
+ border-right: 0;
488
+ }
489
+ /* Reader-only font aliases (generated from the CERTREV-FONTS rules above: the same files and unicode ranges, only the family and
490
+ * the weight range differ, so the reader paints weights the legacy card does not declare). */
491
+ @font-face {
492
+ font-family: "CertREV Reader Serif";
493
+ font-style: normal;
494
+ font-weight: 400 700;
495
+ font-display: swap;
496
+ src: url("https://assets.certrev.com/fonts/cert-playfair-latin-ext.woff2") format("woff2");
497
+ unicode-range:
498
+ 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;
499
+ }
500
+
501
+ @font-face {
502
+ font-family: "CertREV Reader Serif";
503
+ font-style: normal;
504
+ font-weight: 400 700;
505
+ font-display: swap;
506
+ src: url("https://assets.certrev.com/fonts/cert-playfair-latin.woff2") format("woff2");
507
+ unicode-range:
508
+ 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;
509
+ }
510
+
511
+ @font-face {
512
+ font-family: "CertREV Reader Serif";
513
+ font-style: italic;
514
+ font-weight: 400 700;
515
+ font-display: swap;
516
+ src: url("https://assets.certrev.com/fonts/cert-playfair-italic-latin-ext.woff2") format("woff2");
517
+ unicode-range:
518
+ 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;
519
+ }
520
+
521
+ @font-face {
522
+ font-family: "CertREV Reader Serif";
523
+ font-style: italic;
524
+ font-weight: 400 700;
525
+ font-display: swap;
526
+ src: url("https://assets.certrev.com/fonts/cert-playfair-italic-latin.woff2") format("woff2");
527
+ unicode-range:
528
+ 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;
529
+ }
530
+
531
+ @font-face {
532
+ font-family: "CertREV Reader Grotesk";
533
+ font-style: normal;
534
+ font-weight: 400 800;
535
+ font-display: swap;
536
+ src: url("https://assets.certrev.com/fonts/cert-jakarta-latin-ext.woff2") format("woff2");
537
+ unicode-range:
538
+ 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;
539
+ }
540
+
541
+ @font-face {
542
+ font-family: "CertREV Reader Grotesk";
543
+ font-style: normal;
544
+ font-weight: 400 800;
545
+ font-display: swap;
546
+ src: url("https://assets.certrev.com/fonts/cert-jakarta-latin.woff2") format("woff2");
547
+ unicode-range:
548
+ 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;
549
+ }
550
+ /* CERTREV-READER-GEN:END */