@anthusai/papyrus 0.0.0 → 1.0.0-next.2

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/amplify/auth/resource.js +61 -0
  3. package/amplify/auth/resource.ts +65 -0
  4. package/amplify/data/resource.js +2037 -0
  5. package/amplify/data/resource.ts +2148 -0
  6. package/amplify/data/schema.js +1850 -0
  7. package/amplify/data/schema.ts +1953 -0
  8. package/amplify/functions/assignment-action/handler.ts +1416 -0
  9. package/amplify/functions/assignment-action/resource.js +8 -0
  10. package/amplify/functions/assignment-action/resource.ts +9 -0
  11. package/amplify/functions/category-action/handler.ts +2259 -0
  12. package/amplify/functions/category-action/resource.js +8 -0
  13. package/amplify/functions/category-action/resource.ts +9 -0
  14. package/amplify/functions/console-chat-responder/Cargo.lock +3456 -0
  15. package/amplify/functions/console-chat-responder/Cargo.toml +26 -0
  16. package/amplify/functions/console-chat-responder/Dockerfile +19 -0
  17. package/amplify/functions/console-chat-responder/py/execute_tactus_runner.py +116 -0
  18. package/amplify/functions/console-chat-responder/resource.js +153 -0
  19. package/amplify/functions/console-chat-responder/resource.ts +179 -0
  20. package/amplify/functions/console-chat-responder/src/main.rs +3242 -0
  21. package/amplify/functions/email-submission-processor/handler.py +46 -0
  22. package/amplify/functions/email-submission-processor/requirements.txt +2 -0
  23. package/amplify/functions/email-submission-processor/resource.js +56 -0
  24. package/amplify/functions/email-submission-processor/resource.ts +69 -0
  25. package/amplify/functions/graphql-jwt-authorizer/handler.ts +193 -0
  26. package/amplify/functions/graphql-jwt-authorizer/resource.js +14 -0
  27. package/amplify/functions/graphql-jwt-authorizer/resource.ts +15 -0
  28. package/amplify/functions/knowledge-query/handler.py +1 -0
  29. package/amplify/functions/knowledge-query/requirements.txt +3 -0
  30. package/amplify/functions/knowledge-query/resource.js +50 -0
  31. package/amplify/functions/knowledge-query/resource.ts +61 -0
  32. package/amplify/functions/manage-user-role/handler.ts +799 -0
  33. package/amplify/functions/manage-user-role/resource.js +8 -0
  34. package/amplify/functions/manage-user-role/resource.ts +9 -0
  35. package/amplify/functions/model-attachment-upload/handler.ts +387 -0
  36. package/amplify/functions/model-attachment-upload/resource.js +8 -0
  37. package/amplify/functions/model-attachment-upload/resource.ts +9 -0
  38. package/amplify/functions/newsroom-summary/handler.ts +321 -0
  39. package/amplify/functions/newsroom-summary/resource.js +8 -0
  40. package/amplify/functions/newsroom-summary/resource.ts +9 -0
  41. package/amplify/functions/procedure-action/handler.ts +621 -0
  42. package/amplify/functions/procedure-action/resource.js +8 -0
  43. package/amplify/functions/procedure-action/resource.ts +9 -0
  44. package/amplify/functions/reader-settings/handler.ts +322 -0
  45. package/amplify/functions/reader-settings/resource.js +8 -0
  46. package/amplify/functions/reader-settings/resource.ts +9 -0
  47. package/amplify/functions/ses-inbound-receive/handler.ts +493 -0
  48. package/amplify/functions/ses-inbound-receive/resource.js +8 -0
  49. package/amplify/functions/ses-inbound-receive/resource.ts +9 -0
  50. package/amplify/functions/shared/amplify-secrets.ts +65 -0
  51. package/amplify/functions/shared/console-chat-enqueue.ts +117 -0
  52. package/amplify/functions/shared/email-mime-intake.ts +196 -0
  53. package/amplify/functions/shared/email-submission.ts +415 -0
  54. package/amplify/functions/shared/inbound-email-intake.ts +37 -0
  55. package/amplify/functions/shared/lambda-data-client.ts +21 -0
  56. package/amplify/functions/shared/model-payloads.ts +186 -0
  57. package/amplify/functions/shared/python-bundle.js +115 -0
  58. package/amplify/functions/shared/python-bundle.ts +141 -0
  59. package/amplify/functions/shared/slack-events.ts +111 -0
  60. package/amplify/functions/slack-delivery/handler.py +112 -0
  61. package/amplify/functions/slack-delivery/requirements.txt +2 -0
  62. package/amplify/functions/slack-delivery/resource.js +38 -0
  63. package/amplify/functions/slack-delivery/resource.ts +51 -0
  64. package/amplify/functions/slack-events/handler.ts +155 -0
  65. package/amplify/functions/slack-events/resource.js +11 -0
  66. package/amplify/functions/slack-events/resource.ts +12 -0
  67. package/amplify/inbound-email/stack.js +46 -0
  68. package/amplify/inbound-email/stack.ts +61 -0
  69. package/amplify/package.json +3 -0
  70. package/amplify/site-backend-config.js +1 -0
  71. package/amplify/site-backend-config.ts +30 -0
  72. package/amplify/site-backend.js +587 -0
  73. package/amplify/site-backend.ts +704 -0
  74. package/amplify/storage/resource.js +18 -0
  75. package/amplify/storage/resource.ts +19 -0
  76. package/app/[year]/[month]/[day]/[articleSlug]/page.tsx +62 -0
  77. package/app/[year]/[month]/[day]/edition-route-page.tsx +53 -0
  78. package/app/[year]/[month]/[day]/page/[pageNumber]/page.tsx +32 -0
  79. package/app/[year]/[month]/[day]/page.tsx +22 -0
  80. package/app/[year]/[month]/[day]/section/[sectionKey]/page.tsx +32 -0
  81. package/app/api/archive/editions/route.ts +18 -0
  82. package/app/api/media/[...path]/route.ts +35 -0
  83. package/app/api/revalidate/route.ts +94 -0
  84. package/app/archive/page.tsx +24 -0
  85. package/app/articles/[slug]/page.tsx +35 -0
  86. package/app/globals.css +10329 -0
  87. package/app/layout.tsx +146 -0
  88. package/app/newsroom/[section]/[...selection]/page.tsx +50 -0
  89. package/app/newsroom/[section]/page.tsx +47 -0
  90. package/app/newsroom/forum/[threadId]/page.tsx +35 -0
  91. package/app/newsroom/insights/[threadId]/page.tsx +22 -0
  92. package/app/newsroom/insights/page.tsx +14 -0
  93. package/app/newsroom/layout.tsx +12 -0
  94. package/app/newsroom/page.tsx +31 -0
  95. package/app/newsroom/sections/[sectionId]/page.tsx +17 -0
  96. package/app/page.tsx +272 -0
  97. package/app/settings/page.tsx +14 -0
  98. package/app/tailwind.css +65 -0
  99. package/bin/papyrus-app.mjs +10 -0
  100. package/bin/papyrus-infra.mjs +39 -0
  101. package/components/ai-elements/conversation.tsx +168 -0
  102. package/components/ai-elements/message.tsx +360 -0
  103. package/components/ai-elements/model-selector.tsx +30 -0
  104. package/components/ai-elements/prompt-input.tsx +1461 -0
  105. package/components/ai-elements/shimmer.tsx +76 -0
  106. package/components/ai-elements/suggestion.tsx +54 -0
  107. package/components/ai-elements/tool.tsx +173 -0
  108. package/components/amplify-client-provider.tsx +140 -0
  109. package/components/archive-grid.tsx +89 -0
  110. package/components/archive-shell.tsx +41 -0
  111. package/components/article-video.tsx +47 -0
  112. package/components/blog-page-background.tsx +20 -0
  113. package/components/dev-sandbox-editor-sign-in.tsx +60 -0
  114. package/components/news-desk-client-provider.tsx +211 -0
  115. package/components/news-desk-page.tsx +119 -0
  116. package/components/news-desk-taxonomy-client.ts +3684 -0
  117. package/components/newspaper.tsx +1929 -0
  118. package/components/newsroom-assignments-view.tsx +664 -0
  119. package/components/newsroom-ops-overview.tsx +226 -0
  120. package/components/newsroom-ops-shell.tsx +319 -0
  121. package/components/newsroom-references-view.tsx +598 -0
  122. package/components/newsroom-topics-view.tsx +425 -0
  123. package/components/papyrus-console-shell.tsx +1912 -0
  124. package/components/pictogram-figure.tsx +65 -0
  125. package/components/presentation-footer.tsx +146 -0
  126. package/components/reader-auth-control.tsx +162 -0
  127. package/components/reader-auth-state.ts +122 -0
  128. package/components/reader-settings.ts +332 -0
  129. package/components/reader-theme-control.tsx +85 -0
  130. package/components/reference-source-preview.tsx +163 -0
  131. package/components/settings-page.tsx +239 -0
  132. package/components/topic-steering-workspace.tsx +18063 -0
  133. package/components/ui/badge.tsx +30 -0
  134. package/components/ui/button-group.tsx +87 -0
  135. package/components/ui/button.tsx +58 -0
  136. package/components/ui/card.tsx +32 -0
  137. package/components/ui/command.tsx +194 -0
  138. package/components/ui/dialog.tsx +158 -0
  139. package/components/ui/dropdown-menu.tsx +266 -0
  140. package/components/ui/hover-card.tsx +51 -0
  141. package/components/ui/input-group.tsx +158 -0
  142. package/components/ui/input.tsx +20 -0
  143. package/components/ui/scroll-area.tsx +16 -0
  144. package/components/ui/select.tsx +199 -0
  145. package/components/ui/separator.tsx +23 -0
  146. package/components/ui/sheet.tsx +92 -0
  147. package/components/ui/spinner.tsx +10 -0
  148. package/components/ui/tabs.tsx +113 -0
  149. package/components/ui/textarea.tsx +18 -0
  150. package/components/ui/tooltip.tsx +66 -0
  151. package/components/use-resolved-papyrus-theme.ts +47 -0
  152. package/infra/amplify-app-shell.js +109 -0
  153. package/infra/amplify-app-shell.ts +155 -0
  154. package/infra/index.js +12 -0
  155. package/lib/amplify-outputs-guard.ts +24 -0
  156. package/lib/amplify-outputs-path.ts +16 -0
  157. package/lib/amplify-server-runtime.ts +63 -0
  158. package/lib/archive-data.ts +30 -0
  159. package/lib/archive-types.ts +15 -0
  160. package/lib/articles.ts +320 -0
  161. package/lib/cached-content-repository.ts +89 -0
  162. package/lib/category-dashboard.ts +37 -0
  163. package/lib/category-repository.ts +1907 -0
  164. package/lib/console-chat-client.ts +1316 -0
  165. package/lib/console-web-context.ts +118 -0
  166. package/lib/content-load-timing.ts +23 -0
  167. package/lib/content-repository.ts +40 -0
  168. package/lib/content-types.ts +104 -0
  169. package/lib/define-site.js +3 -0
  170. package/lib/define-site.ts +21 -0
  171. package/lib/demo-amplify-outputs.ts +15 -0
  172. package/lib/dev-sandbox-editor-auth.ts +18 -0
  173. package/lib/doctrine.ts +128 -0
  174. package/lib/edition-routes.ts +155 -0
  175. package/lib/edition-sections.ts +111 -0
  176. package/lib/empty-edition-layout-plan.ts +109 -0
  177. package/lib/excerpts.ts +8 -0
  178. package/lib/graphql-content-repository.ts +986 -0
  179. package/lib/image-url.ts +10 -0
  180. package/lib/layout-plan.ts +981 -0
  181. package/lib/layout-scenarios.ts +564 -0
  182. package/lib/markus-body.ts +168 -0
  183. package/lib/markus-ir.ts +235 -0
  184. package/lib/markus-projection.ts +243 -0
  185. package/lib/markus-to-article.ts +93 -0
  186. package/lib/news-desk-session.ts +160 -0
  187. package/lib/newspaper-layout.ts +3459 -0
  188. package/lib/newsroom-assignments.ts +173 -0
  189. package/lib/newsroom-base-path.ts +48 -0
  190. package/lib/newsroom-card-layout.ts +102 -0
  191. package/lib/newsroom-category-drilldown.ts +133 -0
  192. package/lib/newsroom-demo-dashboard.ts +267 -0
  193. package/lib/newsroom-demo-profile.ts +46 -0
  194. package/lib/newsroom-forum-routes.ts +153 -0
  195. package/lib/newsroom-index-filters.ts +202 -0
  196. package/lib/newsroom-knowledge-query-request.ts +51 -0
  197. package/lib/newsroom-list-selection.ts +42 -0
  198. package/lib/newsroom-nav.ts +42 -0
  199. package/lib/newsroom-references.ts +116 -0
  200. package/lib/newsroom-sections.ts +52 -0
  201. package/lib/newsroom-topics.ts +118 -0
  202. package/lib/papyrus-object-kinds.ts +24 -0
  203. package/lib/papyrus-web-locations.ts +480 -0
  204. package/lib/pilobol-sample.ts +167 -0
  205. package/lib/presentation-footer.ts +92 -0
  206. package/lib/pretext-layout.ts +179 -0
  207. package/lib/public-placeholder-config.ts +102 -0
  208. package/lib/publication-items.ts +181 -0
  209. package/lib/reader-route-config.ts +1 -0
  210. package/lib/reader-static-params.ts +56 -0
  211. package/lib/reader-storage-url.ts +63 -0
  212. package/lib/reference-display.ts +74 -0
  213. package/lib/reference-policy.ts +97 -0
  214. package/lib/reference-source-preview.ts +175 -0
  215. package/lib/renderer-config.ts +50 -0
  216. package/lib/renderer.ts +87 -0
  217. package/lib/reporting-story-budget.ts +638 -0
  218. package/lib/semantic-graph.ts +554 -0
  219. package/lib/site-brand-tenant.ts +41 -0
  220. package/lib/site-brand.ts +179 -0
  221. package/lib/site-renderer.ts +17 -0
  222. package/lib/site-stack.ts +195 -0
  223. package/lib/themed-image.ts +30 -0
  224. package/lib/utils.ts +6 -0
  225. package/middleware.ts +78 -0
  226. package/package.json +296 -1
  227. package/publications/anth_us/brand.ts +68 -0
  228. package/publications/anth_us/theme.css +66 -0
  229. package/publications/papyrus/theme.css +11 -0
  230. package/publications/pilobol_us/brand.ts +37 -0
  231. package/publications/pilobol_us/theme.css +140 -0
  232. package/publications/threat_intelligence/blog-defense/graph.ts +636 -0
  233. package/publications/threat_intelligence/blog-defense/layout.ts +934 -0
  234. package/publications/threat_intelligence/blog-defense/page-background.tsx +590 -0
  235. package/publications/threat_intelligence/brand.ts +40 -0
  236. package/publications/threat_intelligence/pictograms/art.tsx +608 -0
  237. package/publications/threat_intelligence/pictograms/figure.tsx +82 -0
  238. package/publications/threat_intelligence/pictograms/registry.ts +30 -0
  239. package/publications/threat_intelligence/pictograms/system.tsx +305 -0
  240. package/publications/threat_intelligence/seed/seed-edition-content.json +629 -0
  241. package/publications/threat_intelligence/theme.css +1440 -0
  242. package/renderers/markus/index.ts +25 -0
  243. package/renderers/markus/stubs.tsx +33 -0
  244. package/renderers/pretext/article-page.tsx +174 -0
  245. package/renderers/pretext/index.ts +30 -0
  246. package/renderers/pretext/layouts.ts +16 -0
  247. package/renderers/pretext/presentation-shell.tsx +477 -0
  248. package/routes.manifest.json +182 -0
  249. package/scripts/fixtures/pilobol-sample.ast.json +234 -0
  250. package/src/backend.js +1 -0
  251. package/src/backend.ts +3 -0
  252. package/src/sync.mjs +87 -0
  253. package/src/with-papyrus.d.mts +2 -0
  254. package/src/with-papyrus.mjs +47 -0
@@ -0,0 +1,1440 @@
1
+ /* Threat Intelligence publication theme tokens and brand styling. */
2
+ /* Extracted from app/globals.css to keep Papyrus framework CSS publication-agnostic. */
3
+
4
+ /* Shared --ti-* tokens (were scattered in :root, @media dark, .dark-theme blocks) */
5
+ :root {
6
+ --ti-alarm-red: var(--tomato-11);
7
+ --ti-section-rule: var(--ti-alarm-red);
8
+ --ti-footer-control: var(--slate-11);
9
+ --ti-footer-control-selected: var(--slate-12);
10
+ }
11
+
12
+ /* Tailwind theme bridge for TI tokens */
13
+ :root {
14
+ --color-ti-section-rule: var(--ti-section-rule);
15
+ --color-ti-footer-control: var(--ti-footer-control);
16
+ --color-ti-footer-control-selected: var(--ti-footer-control-selected);
17
+ }
18
+
19
+ @media (prefers-color-scheme: dark) {
20
+ :root:not([data-papyrus-theme="light"]):not(.light-theme) {
21
+ --ti-alarm-red: var(--tomato-9);
22
+ --ti-pictogram-edge: var(--slate-6);
23
+ --ti-pictogram-node: var(--slate-5);
24
+ --ti-pictogram-throb: var(--tomato-8);
25
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
26
+ --ti-pictogram-compromised: var(--ti-alarm-red);
27
+ --ti-pictogram-compromised-stroke: var(--sand-2);
28
+ }
29
+ }
30
+
31
+ :root.dark-theme,
32
+ :root[data-papyrus-theme="dark"] {
33
+ --ti-alarm-red: var(--tomato-9);
34
+ }
35
+
36
+ /* Main TI brand block (was lines 10139-11541 of globals.css) */
37
+
38
+ :root[data-site-brand="threat-intelligence"] {
39
+ color-scheme: light;
40
+ --background: var(--sand-2);
41
+ --foreground: var(--sand-11);
42
+ --foreground-strong: var(--sand-12);
43
+ --foreground-muted: var(--sand-10);
44
+ --card: var(--sand-1);
45
+ --card-foreground: var(--sand-11);
46
+ --popover: var(--sand-1);
47
+ --popover-foreground: var(--sand-11);
48
+ --primary: var(--sand-12);
49
+ --primary-foreground: var(--sand-1);
50
+ --secondary: var(--sand-3);
51
+ --secondary-foreground: var(--sand-11);
52
+ --muted: var(--sand-3);
53
+ --muted-foreground: var(--sand-10);
54
+ --accent: var(--sand-4);
55
+ --accent-foreground: var(--sand-11);
56
+ --border: var(--sand-6);
57
+ --input: var(--sand-6);
58
+ --ring: var(--sand-8);
59
+ --surface: var(--sand-1);
60
+ --surface-foreground: var(--sand-11);
61
+ --danger: var(--tomato-9);
62
+ --danger-foreground: var(--sand-1);
63
+ --ti-alarm-red: var(--tomato-11);
64
+ --ti-pictogram-edge: var(--slate-8);
65
+ --ti-pictogram-node: var(--slate-8);
66
+ --ti-pictogram-muted: var(--slate-6);
67
+ --ti-pictogram-throb: var(--tomato-8);
68
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
69
+ --ti-pictogram-compromised: var(--ti-alarm-red);
70
+ --ti-pictogram-compromised-stroke: var(--sand-1);
71
+ --ti-pictogram-accent-glow: rgb(234 88 12 / 0.18);
72
+ --ti-cta-background: var(--ti-alarm-red);
73
+ --ti-cta-background-hover: var(--ti-alarm-red);
74
+ --ti-cta-foreground: var(--danger-foreground);
75
+ --ti-neutral-button-background: var(--ti-headline-color);
76
+ --ti-section-rule: var(--ti-alarm-red);
77
+ --ti-footer-control: var(--sand-11);
78
+ --ti-footer-control-selected: var(--sand-12);
79
+ --ti-rhythm: 7px;
80
+ --ti-copy-font-size: 18px;
81
+ --ti-copy-line-height: calc(var(--ti-rhythm) * 4);
82
+ --ti-meta-font-size: 12px;
83
+ --ti-meta-line-height: calc(var(--ti-rhythm) * 2);
84
+ --ti-meta-letter-spacing: 0.09em;
85
+ --ti-deck-font-size: clamp(18px, 1.35vw, 20px);
86
+ --ti-deck-line-height: var(--ti-copy-line-height);
87
+ --ti-secondary-headline-line-box: calc(var(--ti-rhythm) * 6);
88
+ --ti-secondary-headline-font-size: clamp(34px, 2.65vw, 42px);
89
+ --ti-lead-headline-line-box: calc(var(--ti-rhythm) * 8);
90
+ --ti-lead-headline-font-size: clamp(42px, 4.2vw, 56px);
91
+ --ti-section-band-height: var(--ti-secondary-headline-line-box);
92
+ --ti-section-label-scale: 1.34;
93
+ --ti-section-label-scale-trimmed: 1.48;
94
+ --ti-masthead-word-line-box: clamp(calc(var(--ti-rhythm) * 8), 7.1vw, calc(var(--ti-rhythm) * 13));
95
+ --ti-masthead-font-size: calc(var(--ti-masthead-word-line-box) * 1.42);
96
+ --ti-stack-gap: var(--ti-rhythm);
97
+ --ti-section-nav-gap: var(--ti-rhythm);
98
+ --ti-section-content-gap: calc(var(--ti-rhythm) * 7);
99
+ --ti-section-stack-gap: calc(var(--ti-rhythm) * 12);
100
+ --ti-footer-card-min-height: calc(var(--ti-rhythm) * 20);
101
+ --ti-headline-color: var(--sand-12);
102
+ --ti-body-color: var(--sand-11);
103
+ --ti-secondary-color: var(--sand-10);
104
+ --ti-panel-surface: var(--sand-1);
105
+ --ti-panel-background: var(--sand-2);
106
+ --ink-rgb: 99 99 94;
107
+ --ink-solid-rgb: 33 32 28;
108
+ --ink-display-alpha: 0.92;
109
+ --paper: var(--background);
110
+ --paper-rgb: 249 249 248;
111
+ --paper-deep: var(--sand-3);
112
+ --empty-bg: var(--sand-3);
113
+ --substrate-rgb: 242 242 240;
114
+ --paper-grain-alpha: 0;
115
+ --paper-grain-highlight-alpha: 0;
116
+ --paper-fiber-alpha: 0;
117
+ --paper-mottle-light-alpha: 0;
118
+ --paper-mottle-shadow-alpha: 0;
119
+ --paper-edge-left-alpha: 0;
120
+ --paper-edge-right-alpha: 0;
121
+ --paper-edge-right-highlight-alpha: 0;
122
+ --paper-edge-top-alpha: 0;
123
+ --paper-edge-bottom-alpha: 0;
124
+ --paper-background: var(--background);
125
+ --paper-background-size: 100% 100%;
126
+ --paper-page-background: var(--paper-background);
127
+ --paper-page-background-size: 100% 100%;
128
+ --paper-drop-shadow: 0 18px 44px -34px rgb(15 23 42 / 0.38);
129
+ --site-body-font:
130
+ var(--font-sans), "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
131
+ --site-display-font:
132
+ var(--font-sans), "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
133
+ --site-ui-font:
134
+ var(--font-sans), "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
135
+ }
136
+
137
+ @media (prefers-color-scheme: dark) {
138
+ :root[data-site-brand="threat-intelligence"]:not([data-papyrus-theme="light"]):not(.light-theme) {
139
+ color-scheme: dark;
140
+ --background: var(--sand-2);
141
+ --foreground: var(--sand-11);
142
+ --foreground-strong: var(--sand-12);
143
+ --foreground-muted: var(--sand-10);
144
+ --card: var(--sand-1);
145
+ --card-foreground: var(--sand-11);
146
+ --popover: var(--sand-1);
147
+ --popover-foreground: var(--sand-11);
148
+ --primary: var(--sand-12);
149
+ --primary-foreground: var(--sand-1);
150
+ --secondary: var(--sand-3);
151
+ --secondary-foreground: var(--sand-11);
152
+ --muted: var(--sand-3);
153
+ --muted-foreground: var(--sand-10);
154
+ --accent: var(--sand-4);
155
+ --accent-foreground: var(--sand-11);
156
+ --border: var(--sand-6);
157
+ --input: var(--sand-6);
158
+ --ring: var(--sand-8);
159
+ --surface: var(--sand-1);
160
+ --surface-foreground: var(--sand-11);
161
+ --destructive-foreground: var(--sand-12);
162
+ --danger-foreground: var(--destructive-foreground);
163
+ --ti-alarm-red: var(--tomato-9);
164
+ --ti-pictogram-edge: var(--slate-6);
165
+ --ti-pictogram-node: var(--slate-5);
166
+ --ti-pictogram-muted: var(--slate-7);
167
+ --ti-pictogram-throb: var(--tomato-8);
168
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
169
+ --ti-pictogram-compromised: var(--ti-alarm-red);
170
+ --ti-pictogram-compromised-stroke: var(--sand-2);
171
+ --ti-pictogram-accent-glow: rgb(251 146 60 / 0.2);
172
+ --ti-cta-background: var(--tomato-7);
173
+ --ti-cta-background-hover: var(--tomato-6);
174
+ --ti-cta-foreground: var(--sand-12);
175
+ --ti-neutral-button-background: var(--tomato-7);
176
+ --ti-headline-color: var(--sand-12);
177
+ --ti-body-color: var(--sand-11);
178
+ --ti-secondary-color: var(--sand-10);
179
+ --ti-panel-surface: var(--sand-1);
180
+ --ti-panel-background: var(--sand-2);
181
+ --ti-footer-control: var(--sand-11);
182
+ --ti-footer-control-selected: var(--ti-cta-background);
183
+ --ink-rgb: 181 179 173;
184
+ --ink-solid-rgb: 238 238 236;
185
+ --ink-display-alpha: 0.96;
186
+ --paper: var(--background);
187
+ --paper-rgb: 25 25 24;
188
+ --paper-deep: var(--sand-3);
189
+ --empty-bg: var(--sand-3);
190
+ --substrate-rgb: 17 17 16;
191
+ --paper-background: var(--background);
192
+ --paper-page-background: var(--paper-background);
193
+ --paper-drop-shadow: 0 22px 46px -28px rgb(0 0 0 / 0.86);
194
+ }
195
+ }
196
+
197
+ :root.dark-theme[data-site-brand="threat-intelligence"],
198
+ :root[data-site-brand="threat-intelligence"][data-papyrus-theme="dark"] {
199
+ color-scheme: dark;
200
+ --background: var(--sand-2);
201
+ --foreground: var(--sand-11);
202
+ --foreground-strong: var(--sand-12);
203
+ --foreground-muted: var(--sand-10);
204
+ --card: var(--sand-1);
205
+ --card-foreground: var(--sand-11);
206
+ --popover: var(--sand-1);
207
+ --popover-foreground: var(--sand-11);
208
+ --primary: var(--sand-12);
209
+ --primary-foreground: var(--sand-1);
210
+ --secondary: var(--sand-3);
211
+ --secondary-foreground: var(--sand-11);
212
+ --muted: var(--sand-3);
213
+ --muted-foreground: var(--sand-10);
214
+ --accent: var(--sand-4);
215
+ --accent-foreground: var(--sand-11);
216
+ --border: var(--sand-6);
217
+ --input: var(--sand-6);
218
+ --ring: var(--sand-8);
219
+ --surface: var(--sand-1);
220
+ --surface-foreground: var(--sand-11);
221
+ --destructive-foreground: var(--sand-12);
222
+ --danger-foreground: var(--destructive-foreground);
223
+ --ti-alarm-red: var(--tomato-9);
224
+ --ti-pictogram-edge: var(--slate-6);
225
+ --ti-pictogram-node: var(--slate-5);
226
+ --ti-pictogram-muted: var(--slate-7);
227
+ --ti-pictogram-throb: var(--tomato-8);
228
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
229
+ --ti-pictogram-compromised: var(--ti-alarm-red);
230
+ --ti-pictogram-compromised-stroke: var(--sand-2);
231
+ --ti-pictogram-accent-glow: rgb(251 146 60 / 0.2);
232
+ --ti-cta-background: var(--tomato-7);
233
+ --ti-cta-background-hover: var(--tomato-6);
234
+ --ti-cta-foreground: var(--sand-12);
235
+ --ti-neutral-button-background: var(--tomato-7);
236
+ --ti-headline-color: var(--sand-12);
237
+ --ti-body-color: var(--sand-11);
238
+ --ti-secondary-color: var(--sand-10);
239
+ --ti-panel-surface: var(--sand-1);
240
+ --ti-panel-background: var(--sand-2);
241
+ --ti-footer-control: var(--sand-11);
242
+ --ti-footer-control-selected: var(--ti-cta-background);
243
+ --ink-rgb: 181 179 173;
244
+ --ink-solid-rgb: 238 238 236;
245
+ --ink-display-alpha: 0.96;
246
+ --paper: var(--background);
247
+ --paper-rgb: 25 25 24;
248
+ --paper-deep: var(--sand-3);
249
+ --empty-bg: var(--sand-3);
250
+ --substrate-rgb: 17 17 16;
251
+ --paper-background: var(--background);
252
+ --paper-page-background: var(--paper-background);
253
+ --paper-drop-shadow: 0 22px 46px -28px rgb(0 0 0 / 0.86);
254
+ }
255
+
256
+ :root[data-site-brand="threat-intelligence"] .paper-page,
257
+ :root[data-site-brand="threat-intelligence"] .site-shell,
258
+ :root[data-site-brand="threat-intelligence"] .presentation-page,
259
+ :root[data-site-brand="threat-intelligence"] .article-page,
260
+ :root[data-site-brand="threat-intelligence"] .settings-page {
261
+ font-family: var(--site-body-font);
262
+ }
263
+
264
+ :root[data-site-brand="threat-intelligence"] body {
265
+ --ti-body-page-padding-x: clamp(18px, 4vw, 56px);
266
+ --ti-blog-rail-max-width: 1180px;
267
+ --ti-body-rail-width: min(
268
+ calc(100vw - (var(--ti-body-page-padding-x) * 2)),
269
+ var(--ti-blog-rail-max-width),
270
+ calc(var(--ti-masthead-font-size) * 9.55)
271
+ );
272
+ --ti-body-rail-margin: max(0px, calc((100vw - var(--ti-body-rail-width)) * 0.5));
273
+ --ti-body-background-mark-size: clamp(300px, 33vw, 470px);
274
+ --ti-body-background-mark-right: calc(var(--ti-body-rail-margin) - (var(--ti-body-background-mark-size) * 0.3));
275
+ --ti-body-background-mark-top: clamp(-180px, -9vw, -112px);
276
+
277
+ background: var(--background);
278
+ overflow-x: hidden;
279
+ overflow-x: clip;
280
+ overflow-y: visible;
281
+ position: relative;
282
+ }
283
+
284
+ :root[data-site-brand="threat-intelligence"] body:has(.presentation-page--blog)::before {
285
+ content: none;
286
+ display: none;
287
+ }
288
+
289
+ :root[data-site-brand="threat-intelligence"] body:has(.presentation-page--blog) .papyrus-console-page {
290
+ position: relative;
291
+ z-index: 1;
292
+ }
293
+
294
+ :root[data-site-brand="threat-intelligence"] .masthead h1,
295
+ :root[data-site-brand="threat-intelligence"] .presentation-header h1,
296
+ :root[data-site-brand="threat-intelligence"] .presentation-item__header h2,
297
+ :root[data-site-brand="threat-intelligence"] .article-page h1 {
298
+ font-family: var(--site-display-font);
299
+ letter-spacing: 0;
300
+ }
301
+
302
+ :root[data-site-brand="threat-intelligence"] .masthead h1 {
303
+ font-size: clamp(2rem, 4.9vw, 4rem);
304
+ line-height: 1.06;
305
+ text-transform: uppercase;
306
+ }
307
+
308
+ :root[data-site-brand="threat-intelligence"] .masthead::before,
309
+ :root[data-site-brand="threat-intelligence"] .masthead::after {
310
+ display: none;
311
+ }
312
+
313
+ :root[data-site-brand="threat-intelligence"] .masthead__rule,
314
+ :root[data-site-brand="threat-intelligence"] .masthead__meta::after {
315
+ border-top-width: 1px;
316
+ }
317
+
318
+ :root[data-site-brand="threat-intelligence"] .presentation-header p,
319
+ :root[data-site-brand="threat-intelligence"] .presentation-section-header p,
320
+ :root[data-site-brand="threat-intelligence"] .presentation-item__header p,
321
+ :root[data-site-brand="threat-intelligence"] .presentation-header span,
322
+ :root[data-site-brand="threat-intelligence"] .presentation-section-header span,
323
+ :root[data-site-brand="threat-intelligence"] .presentation-item__header span {
324
+ font-family: var(--site-ui-font);
325
+ }
326
+
327
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header {
328
+ --threat-intelligence-masthead-rhythm: var(--ti-stack-gap);
329
+
330
+ align-content: center;
331
+ align-items: end;
332
+ border-bottom: 0;
333
+ border-top: 0;
334
+ display: grid;
335
+ gap: 0;
336
+ grid-template-columns: minmax(0, 0.77fr) minmax(160px, 0.23fr);
337
+ margin-left: auto;
338
+ margin-right: auto;
339
+ margin-bottom: calc(var(--ti-rhythm) * 2);
340
+ max-width: var(--ti-blog-rail-width);
341
+ min-height: clamp(196px, 22vw, 308px);
342
+ padding: clamp(18px, 3vw, 40px) 0 clamp(18px, 2.8vw, 32px);
343
+ position: relative;
344
+ width: var(--ti-blog-rail-width);
345
+ }
346
+
347
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__copy-stack {
348
+ align-self: end;
349
+ display: grid;
350
+ gap: var(--threat-intelligence-masthead-rhythm);
351
+ grid-column: 1;
352
+ grid-row: 1;
353
+ max-width: min(100%, 58rem);
354
+ min-width: 0;
355
+ width: min(100%, 58rem);
356
+ }
357
+
358
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header h1 {
359
+ display: contents;
360
+ margin: 0;
361
+ }
362
+
363
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header h1 span {
364
+ color: var(--ti-alarm-red);
365
+ display: block;
366
+ font-family: var(--site-display-font);
367
+ font-size: var(--ti-masthead-font-size);
368
+ font-style: normal;
369
+ font-weight: 900;
370
+ letter-spacing: 0;
371
+ line-height: var(--ti-masthead-word-line-box);
372
+ max-width: 100%;
373
+ overflow-wrap: normal;
374
+ text-wrap: balance;
375
+ text-transform: uppercase;
376
+ width: 100%;
377
+ }
378
+
379
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__meta {
380
+ align-items: baseline;
381
+ border-left: 0;
382
+ display: flex;
383
+ flex-direction: row;
384
+ flex-wrap: wrap;
385
+ gap: var(--ti-rhythm) calc(var(--ti-rhythm) * 3);
386
+ justify-content: space-between;
387
+ margin-top: 0;
388
+ max-width: 100%;
389
+ min-width: 0;
390
+ padding-left: 0;
391
+ width: 100%;
392
+ }
393
+
394
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__date {
395
+ align-items: center;
396
+ color: var(--ti-headline-color);
397
+ display: inline-flex;
398
+ font-size: var(--ti-meta-font-size);
399
+ font-style: normal;
400
+ font-weight: 900;
401
+ line-height: var(--ti-meta-line-height);
402
+ letter-spacing: var(--ti-meta-letter-spacing);
403
+ margin: 0;
404
+ text-transform: uppercase;
405
+ }
406
+
407
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__subtitle {
408
+ align-items: center;
409
+ color: var(--ti-headline-color);
410
+ display: inline-flex;
411
+ font-size: var(--ti-meta-font-size);
412
+ font-style: normal;
413
+ font-weight: 900;
414
+ line-height: var(--ti-meta-line-height);
415
+ max-width: 18rem;
416
+ letter-spacing: var(--ti-meta-letter-spacing);
417
+ text-transform: uppercase;
418
+ }
419
+
420
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__tagline {
421
+ color: var(--ti-body-color);
422
+ display: block;
423
+ font-size: var(--ti-deck-font-size);
424
+ font-style: normal;
425
+ font-weight: 650;
426
+ line-height: var(--ti-deck-line-height);
427
+ max-width: min(100%, 58rem);
428
+ width: 100%;
429
+ text-transform: none;
430
+ }
431
+
432
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-edition-video {
433
+ grid-column: 1 / -1;
434
+ margin: 0 auto calc(var(--ti-rhythm) * 6);
435
+ max-width: var(--ti-blog-rail-width);
436
+ width: var(--ti-blog-rail-width);
437
+ }
438
+
439
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-edition-video__figure {
440
+ margin: 0;
441
+ }
442
+
443
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-edition-video__figure .article-video__player {
444
+ border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
445
+ border-radius: 0;
446
+ max-height: none;
447
+ object-fit: contain;
448
+ }
449
+
450
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-nav {
451
+ border-bottom: 0;
452
+ border-top: 0;
453
+ gap: var(--ti-section-nav-gap) calc(var(--ti-rhythm) * 3);
454
+ margin-left: auto;
455
+ margin-right: auto;
456
+ margin-bottom: calc(var(--ti-rhythm) * 8);
457
+ max-width: var(--ti-blog-rail-width);
458
+ padding-bottom: calc(var(--ti-rhythm) * 2);
459
+ width: var(--ti-blog-rail-width);
460
+ }
461
+
462
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog {
463
+ --ti-blog-rail-max-width: 1180px;
464
+ --ti-blog-rail-width: min(100%, var(--ti-blog-rail-max-width), calc(var(--ti-masthead-font-size) * 9.55));
465
+ --ti-blog-rail-margin: max(0px, calc((100% - var(--ti-blog-rail-width)) * 0.5));
466
+
467
+ background: var(--background);
468
+ isolation: isolate;
469
+ overflow-x: hidden;
470
+ overflow-x: clip;
471
+ overflow-y: visible;
472
+ position: relative;
473
+ }
474
+
475
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog > :not(.blog-page-background) {
476
+ position: relative;
477
+ z-index: 1;
478
+ }
479
+
480
+ :root[data-site-brand="threat-intelligence"] .blog-page-background {
481
+ --ti-pictogram-edge: var(--slate-8);
482
+ --ti-pictogram-node: var(--slate-8);
483
+ --ti-pictogram-throb: var(--tomato-8);
484
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
485
+ --ti-pictogram-compromised: var(--ti-alarm-red);
486
+ --ti-pictogram-compromised-stroke: var(--sand-1);
487
+ height: clamp(340px, 48vw, 760px);
488
+ left: 40%;
489
+ opacity: 1;
490
+ overflow: hidden;
491
+ pointer-events: none;
492
+ position: absolute;
493
+ right: auto;
494
+ top: clamp(10px, 1.6vw, 22px);
495
+ width: 60%;
496
+ z-index: 0;
497
+ }
498
+
499
+ :root[data-site-brand="threat-intelligence"][data-papyrus-theme="dark"] .blog-page-background {
500
+ --ti-pictogram-edge: var(--slate-6);
501
+ --ti-pictogram-node: var(--slate-5);
502
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
503
+ --ti-pictogram-compromised-stroke: var(--sand-2);
504
+ }
505
+
506
+ @media (prefers-color-scheme: dark) {
507
+ :root[data-site-brand="threat-intelligence"]:not([data-papyrus-theme="light"]) .blog-page-background {
508
+ --ti-pictogram-edge: var(--slate-6);
509
+ --ti-pictogram-node: var(--slate-5);
510
+ --ti-pictogram-core-glow: var(--ti-alarm-red);
511
+ --ti-pictogram-compromised-stroke: var(--sand-2);
512
+ }
513
+ }
514
+
515
+ :root[data-site-brand="threat-intelligence"] .blog-page-background__svg {
516
+ display: block;
517
+ height: 100%;
518
+ width: 100%;
519
+ overflow: visible;
520
+ }
521
+
522
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-nav a {
523
+ border-bottom: 2px solid transparent;
524
+ color: var(--ti-headline-color);
525
+ display: inline-flex;
526
+ align-items: center;
527
+ font-size: var(--ti-meta-font-size);
528
+ font-weight: 900;
529
+ letter-spacing: var(--ti-meta-letter-spacing);
530
+ line-height: var(--ti-meta-line-height);
531
+ min-height: var(--ti-copy-line-height);
532
+ padding: 0 0 var(--ti-rhythm);
533
+ }
534
+
535
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-nav a:hover {
536
+ border-bottom-color: var(--ti-alarm-red);
537
+ color: var(--ti-headline-color);
538
+ text-decoration: none;
539
+ }
540
+
541
+ :root[data-site-brand="threat-intelligence"] .blog-sections {
542
+ gap: var(--ti-section-stack-gap);
543
+ max-width: var(--ti-blog-rail-width);
544
+ width: var(--ti-blog-rail-width);
545
+ }
546
+
547
+ :root[data-site-brand="threat-intelligence"] .blog-section {
548
+ display: grid;
549
+ gap: 0;
550
+ max-width: 100%;
551
+ min-width: 0;
552
+ width: 100%;
553
+ }
554
+
555
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header,
556
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item,
557
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__copy {
558
+ max-width: 100%;
559
+ min-width: 0;
560
+ }
561
+
562
+ @media (min-width: 1100px) {
563
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) {
564
+ column-gap: clamp(28px, 4vw, 52px);
565
+ grid-template-columns: repeat(2, minmax(0, 1fr));
566
+ }
567
+
568
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-section-header,
569
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="0"] {
570
+ grid-column: 1 / -1;
571
+ }
572
+
573
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="1"],
574
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="2"] {
575
+ align-self: stretch;
576
+ grid-template-columns: minmax(0, 1fr);
577
+ }
578
+
579
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="1"] .presentation-item__copy,
580
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="2"] .presentation-item__copy {
581
+ display: flex;
582
+ flex-direction: column;
583
+ height: 100%;
584
+ }
585
+
586
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="1"] .presentation-item__text-frame,
587
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="2"] .presentation-item__text-frame {
588
+ margin-bottom: 1em;
589
+ }
590
+
591
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="1"] .presentation-item__cta,
592
+ :root[data-site-brand="threat-intelligence"] .blog-section:has(> .presentation-item[data-item-index="2"]) > .presentation-item[data-item-index="2"] .presentation-item__cta {
593
+ margin-top: auto;
594
+ }
595
+ }
596
+
597
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header {
598
+ --threat-intelligence-section-rule-height: var(--ti-section-band-height);
599
+ --threat-intelligence-section-label-scale: var(--ti-section-label-scale);
600
+ --threat-intelligence-section-label-scale-trimmed: var(--ti-section-label-scale-trimmed);
601
+ --threat-intelligence-section-gap-x: var(--ti-rhythm);
602
+ --threat-intelligence-section-label-pad-x: 2px;
603
+
604
+ align-items: center;
605
+ border-bottom: 0;
606
+ border-top: 0;
607
+ display: grid;
608
+ gap: calc(var(--ti-rhythm) * 2) var(--threat-intelligence-section-gap-x);
609
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
610
+ grid-template-rows: var(--threat-intelligence-section-rule-height) auto;
611
+ margin-bottom: var(--ti-section-content-gap);
612
+ min-height: 0;
613
+ padding: 0;
614
+ }
615
+
616
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header::before {
617
+ background: var(--ti-alarm-red);
618
+ content: "";
619
+ grid-column: 1;
620
+ grid-row: 1;
621
+ height: var(--threat-intelligence-section-rule-height);
622
+ }
623
+
624
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header::after {
625
+ background: var(--ti-alarm-red);
626
+ content: "";
627
+ grid-column: 3;
628
+ grid-row: 1;
629
+ height: var(--threat-intelligence-section-rule-height);
630
+ }
631
+
632
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header p {
633
+ align-items: center;
634
+ background: var(--background);
635
+ color: var(--ti-headline-color);
636
+ display: inline-flex;
637
+ font-family: var(--site-display-font);
638
+ font-size: calc(var(--threat-intelligence-section-rule-height) * var(--threat-intelligence-section-label-scale));
639
+ font-weight: 900;
640
+ grid-column: 2;
641
+ grid-row: 1;
642
+ height: var(--threat-intelligence-section-rule-height);
643
+ justify-content: center;
644
+ justify-self: center;
645
+ letter-spacing: 0;
646
+ line-height: 1;
647
+ margin: 0;
648
+ padding: 0 var(--threat-intelligence-section-label-pad-x);
649
+ text-transform: uppercase;
650
+ width: max-content;
651
+ }
652
+
653
+ @supports (text-box-trim: trim-both) {
654
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header p {
655
+ font-size: calc(var(--threat-intelligence-section-rule-height) * var(--threat-intelligence-section-label-scale-trimmed));
656
+ text-box-edge: cap alphabetic;
657
+ text-box-trim: trim-both;
658
+ }
659
+ }
660
+
661
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header span {
662
+ color: var(--ti-body-color);
663
+ font-size: var(--ti-copy-font-size);
664
+ grid-column: 2;
665
+ grid-row: 2;
666
+ justify-self: center;
667
+ line-height: var(--ti-copy-line-height);
668
+ max-width: 46rem;
669
+ padding: 0;
670
+ }
671
+
672
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item {
673
+ border-bottom: 0;
674
+ gap: calc(var(--ti-rhythm) * 3) calc(var(--ti-rhythm) * 4);
675
+ padding-bottom: calc(var(--ti-rhythm) * 4);
676
+ }
677
+
678
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item + .presentation-item {
679
+ border-top: calc(var(--ti-rhythm) * 1.5) solid var(--sand-a4);
680
+ padding-top: calc(var(--ti-rhythm) * 4);
681
+ }
682
+
683
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__video {
684
+ grid-column: 1 / -1;
685
+ margin: calc(var(--ti-rhythm) * 2) 0 0;
686
+ }
687
+
688
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__video-figure {
689
+ margin: 0;
690
+ }
691
+
692
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__video .article-video__player {
693
+ border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
694
+ max-height: none;
695
+ object-fit: contain;
696
+ }
697
+
698
+ :root[data-site-brand="threat-intelligence"] .article-page__hero-video {
699
+ margin: 0 0 calc(var(--ti-rhythm) * 5);
700
+ }
701
+
702
+ :root[data-site-brand="threat-intelligence"] .article-page__hero-video .article-video__player {
703
+ border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
704
+ max-height: none;
705
+ object-fit: contain;
706
+ }
707
+
708
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog {
709
+ grid-template-columns: minmax(0, 1fr);
710
+ }
711
+
712
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-has-image="true"] {
713
+ grid-template-columns: minmax(0, 0.72fr) minmax(240px, 0.28fr);
714
+ }
715
+
716
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"] {
717
+ gap: calc(var(--ti-rhythm) * 4) calc(var(--ti-rhythm) * 6);
718
+ padding-bottom: calc(var(--ti-rhythm) * 6);
719
+ }
720
+
721
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"][data-has-image="true"] {
722
+ grid-template-columns: minmax(0, 0.64fr) minmax(320px, 0.36fr);
723
+ }
724
+
725
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__header p {
726
+ display: none;
727
+ }
728
+
729
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__header h2 {
730
+ color: var(--ti-headline-color);
731
+ font-size: var(--ti-secondary-headline-font-size);
732
+ font-weight: 900;
733
+ letter-spacing: 0;
734
+ line-height: var(--ti-secondary-headline-line-box);
735
+ margin-bottom: calc(var(--ti-rhythm) * 2);
736
+ overflow-wrap: anywhere;
737
+ }
738
+
739
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-role="lead"] .presentation-item__header h2 {
740
+ font-size: var(--ti-lead-headline-font-size);
741
+ line-height: var(--ti-lead-headline-line-box);
742
+ }
743
+
744
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__header span {
745
+ color: var(--ti-body-color);
746
+ font-size: var(--ti-deck-font-size);
747
+ font-weight: 650;
748
+ line-height: var(--ti-deck-line-height);
749
+ max-width: none;
750
+ width: 100%;
751
+ }
752
+
753
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__cta {
754
+ background: var(--ti-cta-background);
755
+ color: var(--ti-cta-foreground);
756
+ display: flex;
757
+ font-family: var(--site-ui-font);
758
+ font-size: var(--ti-meta-font-size);
759
+ font-weight: 900;
760
+ letter-spacing: var(--ti-meta-letter-spacing);
761
+ line-height: var(--ti-meta-line-height);
762
+ margin-right: auto;
763
+ margin-top: calc(var(--ti-rhythm) * 3);
764
+ padding: calc(var(--ti-rhythm) * 1.5) calc(var(--ti-rhythm) * 2.25);
765
+ text-transform: uppercase;
766
+ width: max-content;
767
+ }
768
+
769
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__cta:hover {
770
+ background: var(--ti-cta-background-hover);
771
+ }
772
+
773
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__image {
774
+ align-self: start;
775
+ }
776
+
777
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__image img {
778
+ aspect-ratio: 16 / 11;
779
+ background: var(--background);
780
+ border: 1px solid var(--sand-a5);
781
+ object-fit: contain;
782
+ }
783
+
784
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .pictogram-figure__frame {
785
+ aspect-ratio: 16 / 11;
786
+ background: var(--background);
787
+ border: 1px solid var(--sand-a5);
788
+ }
789
+
790
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"] .presentation-item__image img {
791
+ aspect-ratio: 1 / 1;
792
+ }
793
+
794
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"] .pictogram-figure__frame {
795
+ aspect-ratio: 1 / 1;
796
+ }
797
+
798
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__text-frame {
799
+ max-width: none;
800
+ width: 100%;
801
+ }
802
+
803
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation {
804
+ background: var(--sand-a3);
805
+ border: 0;
806
+ box-sizing: border-box;
807
+ color: var(--ti-body-color);
808
+ display: grid;
809
+ font-family: var(--site-ui-font);
810
+ gap: calc(var(--ti-rhythm) * 4);
811
+ grid-template-columns: minmax(0, 1fr);
812
+ grid-template-rows: auto auto auto;
813
+ height: auto;
814
+ margin-left: auto;
815
+ margin-right: auto;
816
+ margin-top: calc(var(--ti-rhythm) * 14);
817
+ max-width: var(--ti-blog-rail-width);
818
+ overflow: visible;
819
+ padding: calc(var(--ti-rhythm) * 5);
820
+ width: var(--ti-blog-rail-width);
821
+ }
822
+
823
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__heading {
824
+ align-items: center;
825
+ align-self: stretch;
826
+ background: var(--ti-panel-background);
827
+ border-bottom: 0;
828
+ display: flex;
829
+ flex-direction: row;
830
+ gap: calc(var(--ti-rhythm) * 4);
831
+ grid-column: 1;
832
+ grid-row: 1;
833
+ justify-content: space-between;
834
+ line-height: var(--ti-copy-line-height);
835
+ min-height: 0;
836
+ overflow: hidden;
837
+ padding: calc(var(--ti-rhythm) * 4) calc(var(--ti-rhythm) * 5) calc(var(--ti-rhythm) * 4) calc(var(--ti-rhythm) * 8);
838
+ position: relative;
839
+ text-align: left;
840
+ }
841
+
842
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__heading::before {
843
+ background: var(--ti-alarm-red);
844
+ bottom: 0;
845
+ content: "";
846
+ left: 0;
847
+ position: absolute;
848
+ top: 0;
849
+ width: calc(var(--ti-rhythm) * 3);
850
+ }
851
+
852
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__brand {
853
+ display: grid;
854
+ gap: var(--ti-rhythm);
855
+ min-width: 0;
856
+ position: relative;
857
+ z-index: 1;
858
+ }
859
+
860
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__brand-title {
861
+ color: var(--ti-alarm-red);
862
+ display: block;
863
+ font-family: var(--site-display-font);
864
+ font-size: var(--ti-secondary-headline-font-size);
865
+ font-weight: 900;
866
+ letter-spacing: 0;
867
+ line-height: var(--ti-secondary-headline-line-box);
868
+ max-width: 100%;
869
+ text-transform: uppercase;
870
+ }
871
+
872
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__brand-subtitle {
873
+ color: var(--ti-headline-color);
874
+ display: block;
875
+ font-size: var(--ti-meta-font-size);
876
+ font-weight: 900;
877
+ letter-spacing: var(--ti-meta-letter-spacing);
878
+ line-height: var(--ti-meta-line-height);
879
+ text-transform: uppercase;
880
+ }
881
+
882
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__meta {
883
+ background: var(--sand-a4);
884
+ color: var(--ti-headline-color);
885
+ display: inline-flex;
886
+ flex: 0 0 auto;
887
+ font-size: var(--ti-meta-font-size);
888
+ font-weight: 900;
889
+ letter-spacing: var(--ti-meta-letter-spacing);
890
+ line-height: var(--ti-meta-line-height);
891
+ padding: var(--ti-rhythm) calc(var(--ti-rhythm) * 2);
892
+ position: relative;
893
+ text-transform: uppercase;
894
+ z-index: 1;
895
+ }
896
+
897
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__sections {
898
+ display: grid;
899
+ gap: calc(var(--ti-rhythm) * 2);
900
+ grid-column: 1;
901
+ grid-row: 2;
902
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
903
+ grid-template-rows: none;
904
+ }
905
+
906
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__section-link {
907
+ align-items: stretch;
908
+ background: var(--ti-panel-background);
909
+ color: var(--ti-headline-color);
910
+ display: grid;
911
+ gap: calc(var(--ti-rhythm) * 2);
912
+ grid-template-rows: auto minmax(0, 1fr);
913
+ height: auto;
914
+ line-height: normal;
915
+ min-height: calc(var(--ti-rhythm) * 14);
916
+ padding: calc(var(--ti-rhythm) * 2.5);
917
+ text-decoration: none;
918
+ }
919
+
920
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__section-link:hover {
921
+ background: var(--ti-cta-background);
922
+ color: var(--ti-cta-foreground);
923
+ text-decoration: none;
924
+ }
925
+
926
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__section-name {
927
+ color: var(--ti-alarm-red);
928
+ font-family: var(--site-ui-font);
929
+ font-size: var(--ti-meta-font-size);
930
+ font-weight: 860;
931
+ letter-spacing: var(--ti-meta-letter-spacing);
932
+ line-height: var(--ti-meta-line-height);
933
+ }
934
+
935
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__section-link:hover .front-footer__section-name {
936
+ color: inherit;
937
+ }
938
+
939
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__section-title {
940
+ color: inherit;
941
+ font-family: var(--site-display-font);
942
+ font-size: clamp(22px, 1.7vw, 28px);
943
+ font-style: normal;
944
+ font-weight: 900;
945
+ letter-spacing: 0;
946
+ line-height: var(--ti-copy-line-height);
947
+ min-width: 0;
948
+ overflow: hidden;
949
+ text-overflow: ellipsis;
950
+ white-space: normal;
951
+ }
952
+
953
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utilities {
954
+ align-items: center;
955
+ border-left: 0;
956
+ display: flex;
957
+ flex-direction: row;
958
+ flex-wrap: wrap;
959
+ gap: calc(var(--ti-rhythm) * 1.5);
960
+ grid-column: 1;
961
+ grid-row: 3;
962
+ justify-content: flex-start;
963
+ min-width: 0;
964
+ padding-left: 0;
965
+ text-align: left;
966
+ }
967
+
968
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utility-link {
969
+ background: var(--ti-neutral-button-background);
970
+ color: var(--ti-cta-foreground);
971
+ display: inline-flex;
972
+ font-size: var(--ti-meta-font-size);
973
+ font-weight: 900;
974
+ height: auto;
975
+ letter-spacing: var(--ti-meta-letter-spacing);
976
+ line-height: var(--ti-meta-line-height);
977
+ padding: calc(var(--ti-rhythm) * 1.5) calc(var(--ti-rhythm) * 2);
978
+ text-decoration: none;
979
+ text-transform: uppercase;
980
+ }
981
+
982
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utility-link:hover {
983
+ background: var(--ti-cta-background-hover);
984
+ text-decoration: none;
985
+ }
986
+
987
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utility-link[aria-disabled="true"] {
988
+ background: var(--sand-a5);
989
+ color: var(--ti-secondary-color);
990
+ }
991
+
992
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control {
993
+ background: var(--sand-a4);
994
+ border: 1px solid var(--sand-a6);
995
+ color: var(--ti-footer-control);
996
+ flex: 0 0 auto;
997
+ height: calc(var(--ti-rhythm) * 6);
998
+ }
999
+
1000
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control .reader-theme-control__button {
1001
+ color: inherit;
1002
+ height: calc(var(--ti-rhythm) * 6 - 2px);
1003
+ width: calc(var(--ti-rhythm) * 6 - 2px);
1004
+ }
1005
+
1006
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control .reader-theme-control__button + .reader-theme-control__button {
1007
+ border-left: 1px solid var(--sand-a6);
1008
+ }
1009
+
1010
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control .reader-theme-control__button:hover {
1011
+ background: var(--sand-a4);
1012
+ }
1013
+
1014
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control .reader-theme-control__button[data-selected="true"] {
1015
+ background: var(--ti-footer-control-selected);
1016
+ color: var(--ti-cta-foreground);
1017
+ }
1018
+
1019
+ @media (max-width: 1024px) {
1020
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header {
1021
+ grid-template-columns: 1fr;
1022
+ min-height: clamp(210px, 38vw, 300px);
1023
+ padding-top: clamp(22px, 5vw, 38px);
1024
+ }
1025
+
1026
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header h1 {
1027
+ max-width: min(100%, 42rem);
1028
+ }
1029
+
1030
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__copy-stack {
1031
+ grid-column: 1;
1032
+ grid-row: 1;
1033
+ max-width: min(85vw, 36rem);
1034
+ width: min(85vw, 36rem);
1035
+ }
1036
+
1037
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__meta {
1038
+ align-items: flex-start;
1039
+ border-left: 0;
1040
+ border-top: 0;
1041
+ flex-direction: column;
1042
+ gap: calc(var(--ti-rhythm) * 0.75);
1043
+ justify-content: flex-start;
1044
+ max-width: min(85vw, 36rem);
1045
+ padding-left: 0;
1046
+ padding-top: 0;
1047
+ width: min(85vw, 36rem);
1048
+ }
1049
+
1050
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__subtitle,
1051
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__tagline {
1052
+ max-width: min(85vw, 36rem);
1053
+ }
1054
+
1055
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__date {
1056
+ margin-left: 0;
1057
+ }
1058
+
1059
+ :root[data-site-brand="threat-intelligence"] .blog-page-background {
1060
+ height: clamp(300px, 62vw, 520px);
1061
+ left: 44%;
1062
+ opacity: 1;
1063
+ right: 0;
1064
+ top: -16px;
1065
+ width: 56%;
1066
+ }
1067
+
1068
+ :root[data-site-brand="threat-intelligence"] body {
1069
+ --ti-body-background-mark-size: clamp(280px, 58vw, 420px);
1070
+ --ti-body-background-mark-top: clamp(-92px, -8vw, -42px);
1071
+ }
1072
+
1073
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog,
1074
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-has-image="true"],
1075
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"],
1076
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"][data-has-image="true"] {
1077
+ grid-template-columns: 1fr;
1078
+ }
1079
+
1080
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"] .presentation-item__image img {
1081
+ aspect-ratio: 16 / 10;
1082
+ }
1083
+
1084
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__image {
1085
+ grid-column: 1;
1086
+ grid-row: auto;
1087
+ }
1088
+
1089
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__header span,
1090
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__text-frame {
1091
+ max-width: none;
1092
+ width: 100%;
1093
+ }
1094
+
1095
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header {
1096
+ --threat-intelligence-section-gap-x: var(--ti-rhythm);
1097
+
1098
+ grid-template-columns: auto minmax(0, 1fr);
1099
+ grid-template-rows: var(--threat-intelligence-section-rule-height) auto;
1100
+ }
1101
+
1102
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header::before {
1103
+ display: none;
1104
+ }
1105
+
1106
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header::after {
1107
+ display: block;
1108
+ grid-column: 2;
1109
+ grid-row: 1;
1110
+ }
1111
+
1112
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header p {
1113
+ grid-column: 1;
1114
+ grid-row: 1;
1115
+ justify-self: start;
1116
+ }
1117
+
1118
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header span {
1119
+ grid-column: 1 / -1;
1120
+ grid-row: 2;
1121
+ justify-self: start;
1122
+ }
1123
+
1124
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation {
1125
+ grid-template-columns: 1fr;
1126
+ }
1127
+
1128
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__heading,
1129
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__sections,
1130
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utilities {
1131
+ grid-column: 1;
1132
+ }
1133
+
1134
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__heading {
1135
+ align-items: flex-start;
1136
+ flex-direction: column;
1137
+ grid-row: 1;
1138
+ justify-content: space-between;
1139
+ min-height: 0;
1140
+ }
1141
+
1142
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__sections {
1143
+ grid-row: 2;
1144
+ }
1145
+
1146
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utilities {
1147
+ grid-row: 3;
1148
+ }
1149
+ }
1150
+
1151
+ @media (max-width: 560px) {
1152
+ :root[data-site-brand="threat-intelligence"] .presentation-page {
1153
+ padding-left: 18px;
1154
+ padding-right: 18px;
1155
+ }
1156
+
1157
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog {
1158
+ --ti-masthead-word-line-box: calc(var(--ti-rhythm) * 7);
1159
+ --ti-masthead-font-size: calc(var(--ti-masthead-word-line-box) * 1.06);
1160
+ --ti-blog-rail-width: calc(100vw - 36px);
1161
+ --ti-blog-rail-margin: 0px;
1162
+ }
1163
+
1164
+ :root[data-site-brand="threat-intelligence"] body {
1165
+ --ti-body-page-padding-x: 18px;
1166
+ --ti-masthead-word-line-box: calc(var(--ti-rhythm) * 7);
1167
+ --ti-masthead-font-size: calc(var(--ti-masthead-word-line-box) * 1.06);
1168
+ --ti-body-rail-width: calc(100vw - 36px);
1169
+ --ti-body-rail-margin: 18px;
1170
+ --ti-body-background-mark-size: 300px;
1171
+ --ti-body-background-mark-top: -72px;
1172
+ }
1173
+
1174
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header {
1175
+ margin-bottom: calc(var(--ti-rhythm) * 2);
1176
+ min-height: 220px;
1177
+ padding-bottom: calc(var(--ti-rhythm) * 3);
1178
+ }
1179
+
1180
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__copy-stack {
1181
+ max-width: 85vw;
1182
+ }
1183
+
1184
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header h1 span {
1185
+ font-size: min(var(--ti-masthead-font-size), 13vw);
1186
+ max-width: 85vw;
1187
+ }
1188
+
1189
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-header__meta {
1190
+ gap: var(--ti-rhythm) calc(var(--ti-rhythm) * 2);
1191
+ max-width: 100%;
1192
+ width: 100%;
1193
+ }
1194
+
1195
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-nav {
1196
+ gap: var(--ti-rhythm) calc(var(--ti-rhythm) * 2);
1197
+ margin-bottom: calc(var(--ti-rhythm) * 6);
1198
+ padding-bottom: calc(var(--ti-rhythm) * 2);
1199
+ }
1200
+
1201
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-nav a {
1202
+ font-size: var(--ti-meta-font-size);
1203
+ padding-bottom: var(--ti-rhythm);
1204
+ }
1205
+
1206
+ :root[data-site-brand="threat-intelligence"] .blog-sections {
1207
+ gap: calc(var(--ti-rhythm) * 8);
1208
+ }
1209
+
1210
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-section-header {
1211
+ margin-bottom: calc(var(--ti-rhythm) * 5);
1212
+ }
1213
+
1214
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-index="0"] {
1215
+ padding-bottom: calc(var(--ti-rhythm) * 5);
1216
+ }
1217
+
1218
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item__header h2 {
1219
+ font-size: var(--ti-secondary-headline-font-size);
1220
+ letter-spacing: 0;
1221
+ line-height: var(--ti-secondary-headline-line-box);
1222
+ }
1223
+
1224
+ :root[data-site-brand="threat-intelligence"] .presentation-page--blog .presentation-item--blog[data-item-role="lead"] .presentation-item__header h2 {
1225
+ font-size: var(--ti-lead-headline-font-size);
1226
+ line-height: var(--ti-lead-headline-line-box);
1227
+ }
1228
+
1229
+ :root[data-site-brand="threat-intelligence"] .blog-page-background {
1230
+ height: clamp(260px, 72vw, 360px);
1231
+ left: auto;
1232
+ opacity: 0.9;
1233
+ right: 0;
1234
+ top: 8px;
1235
+ width: min(64%, 300px);
1236
+ }
1237
+
1238
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation {
1239
+ margin-top: calc(var(--ti-rhythm) * 8);
1240
+ padding: calc(var(--ti-rhythm) * 2);
1241
+ }
1242
+
1243
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__heading {
1244
+ gap: calc(var(--ti-rhythm) * 4);
1245
+ padding: calc(var(--ti-rhythm) * 3) calc(var(--ti-rhythm) * 3) calc(var(--ti-rhythm) * 3) calc(var(--ti-rhythm) * 6);
1246
+ }
1247
+
1248
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__sections {
1249
+ grid-template-columns: 1fr;
1250
+ }
1251
+
1252
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__section-link {
1253
+ min-height: 0;
1254
+ }
1255
+
1256
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utilities {
1257
+ align-items: stretch;
1258
+ flex-direction: column;
1259
+ }
1260
+
1261
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__utility-link {
1262
+ justify-content: center;
1263
+ width: 100%;
1264
+ }
1265
+
1266
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control {
1267
+ width: 100%;
1268
+ }
1269
+
1270
+ :root[data-site-brand="threat-intelligence"] :is(.presentation-page--blog, .article-shell--edition) .front-footer--presentation .front-footer__theme-control .reader-theme-control__button {
1271
+ flex: 1 1 0;
1272
+ width: auto;
1273
+ }
1274
+ }
1275
+
1276
+ @media (max-width: 1000px) {
1277
+ :root[data-site-brand="threat-intelligence"] .blog-page-background {
1278
+ left: auto;
1279
+ right: 0;
1280
+ top: clamp(6px, 1.1vw, 14px);
1281
+ width: min(60%, 480px);
1282
+ }
1283
+
1284
+ :root[data-site-brand="threat-intelligence"] body {
1285
+ --ti-body-background-mark-top: calc(-80px + clamp(0px, (1000px - 100vw) * 0.2, 130px));
1286
+ }
1287
+ }
1288
+
1289
+ :root[data-site-brand="threat-intelligence"] .presentation-item__header span,
1290
+ :root[data-site-brand="threat-intelligence"] .presentation-section-header span {
1291
+ color: var(--ti-body-color);
1292
+ font-style: normal;
1293
+ }
1294
+
1295
+ :root[data-site-brand="threat-intelligence"] .presentation-item__image figcaption {
1296
+ color: var(--ti-secondary-color);
1297
+ font-style: normal;
1298
+ }
1299
+
1300
+ :root[data-site-brand="threat-intelligence"] .presentation-item__image img {
1301
+ filter: none;
1302
+ }
1303
+
1304
+ :root[data-site-brand="threat-intelligence"] .presentation-section-nav a,
1305
+ :root[data-site-brand="threat-intelligence"] .presentation-item__header a {
1306
+ color: var(--ti-headline-color);
1307
+ }
1308
+
1309
+ :root[data-site-brand="threat-intelligence"] .article-shell {
1310
+ background: var(--background);
1311
+ }
1312
+
1313
+ :root[data-site-brand="threat-intelligence"] .article-shell--edition {
1314
+ --ti-article-body-rail-width: min(calc(100vw - 60px), 88ch);
1315
+ --ti-blog-rail-width: var(--ti-article-body-rail-width);
1316
+ }
1317
+
1318
+ :root[data-site-brand="threat-intelligence"] .article-nav {
1319
+ border-bottom: 1px solid var(--sand-a6);
1320
+ color: var(--ti-body-color);
1321
+ font-family: var(--site-ui-font);
1322
+ font-size: var(--ti-meta-font-size);
1323
+ font-weight: 900;
1324
+ letter-spacing: var(--ti-meta-letter-spacing);
1325
+ line-height: var(--ti-meta-line-height);
1326
+ text-transform: uppercase;
1327
+ }
1328
+
1329
+ :root[data-site-brand="threat-intelligence"] .article-page .story-label,
1330
+ :root[data-site-brand="threat-intelligence"] .article-page .story-byline {
1331
+ color: var(--ti-body-color);
1332
+ }
1333
+
1334
+ :root[data-site-brand="threat-intelligence"] .article-page {
1335
+ background: transparent;
1336
+ background-size: auto;
1337
+ margin: 0 auto;
1338
+ max-width: calc(88ch + 60px);
1339
+ min-height: auto;
1340
+ }
1341
+
1342
+ :root[data-site-brand="threat-intelligence"] .article-page h1 {
1343
+ color: var(--ti-headline-color);
1344
+ font-size: var(--ti-lead-headline-font-size);
1345
+ font-weight: 900;
1346
+ letter-spacing: 0;
1347
+ line-height: var(--ti-lead-headline-line-box);
1348
+ margin: var(--ti-rhythm) 0 calc(var(--ti-rhythm) * 3);
1349
+ }
1350
+
1351
+ :root[data-site-brand="threat-intelligence"] .article-deck {
1352
+ color: var(--ti-body-color);
1353
+ font-size: var(--ti-deck-font-size);
1354
+ font-style: normal;
1355
+ font-weight: 650;
1356
+ line-height: var(--ti-deck-line-height);
1357
+ }
1358
+
1359
+ :root[data-site-brand="threat-intelligence"] .article-page .story-label {
1360
+ font-size: var(--ti-meta-font-size);
1361
+ font-weight: 900;
1362
+ letter-spacing: var(--ti-meta-letter-spacing);
1363
+ line-height: var(--ti-meta-line-height);
1364
+ }
1365
+
1366
+ :root[data-site-brand="threat-intelligence"] .article-page .story-byline {
1367
+ font-size: var(--ti-meta-font-size);
1368
+ font-weight: 850;
1369
+ letter-spacing: var(--ti-meta-letter-spacing);
1370
+ line-height: var(--ti-meta-line-height);
1371
+ font-style: normal;
1372
+ }
1373
+
1374
+ :root[data-site-brand="threat-intelligence"] .article-page .story-byline {
1375
+ display: flex;
1376
+ flex-wrap: wrap;
1377
+ gap: 0.35rem 0.65rem;
1378
+ }
1379
+
1380
+ :root[data-site-brand="threat-intelligence"] .article-photo img {
1381
+ filter: none;
1382
+ background: var(--background);
1383
+ object-fit: contain;
1384
+ }
1385
+
1386
+ :root[data-site-brand="threat-intelligence"] .article-photo .pictogram-figure__frame {
1387
+ border: 1px solid var(--sand-a5);
1388
+ }
1389
+
1390
+ :root[data-site-brand="threat-intelligence"] .article-body .article-photo {
1391
+ margin-top: 0;
1392
+ }
1393
+
1394
+ :root[data-site-brand="threat-intelligence"] .article-body .article-photo img {
1395
+ height: auto;
1396
+ max-height: none;
1397
+ }
1398
+
1399
+ :root[data-site-brand="threat-intelligence"] .article-body {
1400
+ column-count: 1;
1401
+ column-gap: 0;
1402
+ color: var(--ti-body-color);
1403
+ font-family: var(--site-body-font);
1404
+ font-size: var(--ti-copy-font-size);
1405
+ line-height: var(--ti-copy-line-height);
1406
+ max-width: 88ch;
1407
+ }
1408
+
1409
+ @media (min-width: 900px) {
1410
+ :root[data-site-brand="threat-intelligence"] .article-body .article-photo {
1411
+ float: right;
1412
+ margin: 0 0 1.25rem clamp(1.5rem, 3vw, 2.25rem);
1413
+ width: min(38%, 360px);
1414
+ }
1415
+ }
1416
+
1417
+ :root[data-site-brand="threat-intelligence"] .archive-header {
1418
+ --masthead-height: auto;
1419
+ --masthead-title-line-height: 1.05;
1420
+ --masthead-title-font-size: clamp(2rem, 4.8vw, 3.6rem);
1421
+ --masthead-title-margin-top: 20px;
1422
+ --masthead-title-margin-bottom: 18px;
1423
+ --masthead-title-optical-shift: 0;
1424
+ background: var(--paper-page-background);
1425
+ background-size: var(--paper-page-background-size);
1426
+ border-bottom: 1px solid rgb(var(--rule-rgb) / 0.22);
1427
+ block-size: auto;
1428
+ }
1429
+
1430
+ :root[data-site-brand="threat-intelligence"] .archive-header h1 {
1431
+ font-family: var(--site-display-font);
1432
+ letter-spacing: 0;
1433
+ text-transform: uppercase;
1434
+ }
1435
+
1436
+ :root[data-site-brand="threat-intelligence"] .archive-card__summary h2 {
1437
+ font-family: var(--site-display-font);
1438
+ font-weight: 900;
1439
+ letter-spacing: 0;
1440
+ }