mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
Changes: - Added support for a new article category: `webinar`. - Added a template page for webinar articles. - Added an additional route for webinar articles that users are taken to to watch the webinar recording. - Added `deliver-webinar-access-request`, an action that updates CRM records when users fill out the form on the webinar template page. - Updated the accepted `intentSignal` values in the create-historical-event helper. - Added an article for the "Beyond the hype, practical AI for device management" webinar. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Public webinar pages (/webinars/:slug and /watch) with optional embedded video and a new page template, script, and styles. * Sidebar signup form (first name, last name, work email) with prefill for signed-in users and improved scroll behavior. * POST API to request webinar access: validates email domain, records a webinar-request event, triggers background CRM sync, and returns a watch view on success. * Static-site build now recognizes webinar articles and enforces embedded-video URL validation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
749 lines
16 KiB
Text
Vendored
749 lines
16 KiB
Text
Vendored
#basic-webinar {
|
|
h1 {
|
|
font-size: 36px;
|
|
}
|
|
hr {
|
|
margin-top: 40px;
|
|
margin-bottom: 40px;
|
|
border-top: 2px solid @core-vibrant-blue-15;
|
|
width: 100%;
|
|
}
|
|
.markdown-heading:hover {
|
|
.markdown-link {
|
|
height: 16px;
|
|
vertical-align: middle;
|
|
margin-left: 8px;
|
|
content: url('/images/icon-link-green-16x16@2x.png');
|
|
}
|
|
}
|
|
|
|
@keyframes copiedText {
|
|
0% {opacity: 0;}
|
|
20% {opacity: 100;}
|
|
30% {opacity: 80;}
|
|
50% {opacity: 60;}
|
|
70% {opacity: 40;}
|
|
80% {opacity: 20;}
|
|
100% {opacity: 0;}
|
|
}
|
|
|
|
[purpose='page-container'] {
|
|
max-width: 1200px;
|
|
padding: 64px;
|
|
}
|
|
[purpose='embedded-video'] {
|
|
position: relative;
|
|
margin-bottom: 40px;
|
|
width: 100%;
|
|
padding-bottom: 56%;
|
|
border-radius: 12px;
|
|
iframe {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
border: none;
|
|
// border-radius: 12px;
|
|
}
|
|
[purpose='video-note'] {
|
|
position: absolute;
|
|
bottom: 0;
|
|
max-width: 480px;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
padding: 16px;
|
|
border-radius: 8px;
|
|
border: 1px solid #E6E3D0;
|
|
background: #FFFEF9;
|
|
p {
|
|
margin-bottom: 0px;
|
|
}
|
|
}
|
|
|
|
}
|
|
[purpose='right-sidebar'] {
|
|
position: sticky;
|
|
top: 144px;
|
|
width: 392px;
|
|
font-size: 14px;
|
|
transition-property: transform;
|
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
transition-duration: 500ms;
|
|
}
|
|
[purpose='form-container'] {
|
|
border-radius: 16px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 100%;
|
|
padding: 32px;
|
|
background: #F8F8F8;
|
|
h4 {
|
|
color: #192147;
|
|
/* Heading/H4 */
|
|
font-family: Inter;
|
|
font-size: 20px;
|
|
font-style: normal;
|
|
font-weight: 700;
|
|
line-height: 120%;
|
|
margin-bottom: 0px;
|
|
}
|
|
}
|
|
[purpose='webinar-recording-form'] {
|
|
display: flex;
|
|
scroll-margin-top: 130px;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: flex-start;
|
|
gap: 32px;
|
|
|
|
label {
|
|
color: #192147;
|
|
|
|
/* Body SM (bold) */
|
|
font-family: Inter;
|
|
font-size: 14px;
|
|
font-style: normal;
|
|
font-weight: 700;
|
|
line-height: 150%;
|
|
}
|
|
input {
|
|
display: flex;
|
|
height: 36px;
|
|
padding: 0 12px;
|
|
align-items: center;
|
|
gap: 8px;
|
|
align-self: stretch;
|
|
border-radius: 6px;
|
|
border: 1px solid #C5C7D1;
|
|
background: #FFF;
|
|
}
|
|
}
|
|
|
|
[purpose='watch-button'] {
|
|
display: flex;
|
|
height: 36px;
|
|
padding: 16px 12px;
|
|
justify-content: center;
|
|
align-items: center;
|
|
gap: 4px;
|
|
flex: 1 0 0;
|
|
color: #FFF;
|
|
text-align: center;
|
|
|
|
/* Body SM (bold) */
|
|
font-family: Inter;
|
|
font-size: 14px;
|
|
font-style: normal;
|
|
font-weight: 700;
|
|
line-height: 150%;
|
|
width: 100%;
|
|
}
|
|
[purpose='watch-cta'] {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
[purpose='watch-button'] {
|
|
max-width: 255px;
|
|
|
|
}
|
|
}
|
|
.header-hidden { // For scrolling the sidebar with the sticky header
|
|
transform: translateY(-120px);
|
|
}
|
|
[purpose='article-container'] {
|
|
max-width: 800px;
|
|
padding-right: 64px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0px;
|
|
}
|
|
[purpose='article-title-and-image'] {
|
|
display: flex;
|
|
flex-direction: row;
|
|
gap: 64px;
|
|
align-items: center;
|
|
}
|
|
[purpose='article-image'] {
|
|
width: calc(~'50% - 32px');
|
|
img {
|
|
height: auto;
|
|
width: 100%;
|
|
}
|
|
}
|
|
[purpose='article-title-and-introduction'] {
|
|
width: 50%;
|
|
padding-top: 64px;
|
|
margin-bottom: 64px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 32px;
|
|
h1 {
|
|
color: #192147;
|
|
|
|
/* Heading/H1 */
|
|
font-family: Inter;
|
|
font-size: 48px;
|
|
font-style: normal;
|
|
font-weight: 800;
|
|
line-height: 120%;
|
|
margin-bottom: 0px;
|
|
}
|
|
|
|
h2 {
|
|
font-size: 24px;
|
|
font-weight: 400;
|
|
line-height: 32px;
|
|
}
|
|
h4 {
|
|
color: #515774;
|
|
font-feature-settings: 'salt' on, 'ss01' on, 'ss02' on;
|
|
font-family: 'Roboto Mono';
|
|
font-size: 16px;
|
|
font-style: normal;
|
|
font-weight: 400;
|
|
line-height: 150%;
|
|
text-transform: uppercase;
|
|
margin-bottom: 0px;
|
|
margin-top: 0px;
|
|
}
|
|
[purpose='article-introduction'] {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 32px;
|
|
p {
|
|
margin-bottom: 0px;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
[purpose='article-content'] {
|
|
word-wrap: break-word;
|
|
h1:first-of-type {
|
|
display: none;
|
|
}
|
|
h1:first-of-type + h2:first-of-type {
|
|
display: none;
|
|
}
|
|
img {
|
|
max-width: 100%;
|
|
width: auto;
|
|
height: auto;
|
|
max-height: 100%;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
padding: 24px 0px 16px 0px;
|
|
}
|
|
h2 {
|
|
color: #192147;
|
|
|
|
/* Heading/H2 */
|
|
font-family: Inter;
|
|
font-size: 32px;
|
|
font-style: normal;
|
|
font-weight: 800;
|
|
line-height: 120%;
|
|
margin-bottom: 32px;
|
|
}
|
|
h3 {
|
|
color: #192147;
|
|
|
|
/* Heading/H3 */
|
|
font-family: Inter;
|
|
font-size: 24px;
|
|
font-style: normal;
|
|
font-weight: 800;
|
|
line-height: 120%;
|
|
margin-top: 40px;
|
|
margin-bottom: 32px;
|
|
}
|
|
h4 {
|
|
font-size: 16px;
|
|
margin-top: 24px;
|
|
margin-bottom: 24px;
|
|
}
|
|
h2 > code:not(.bash):not(.nohighlight):not(.mermaid) {
|
|
padding: 0px 4px;
|
|
font-weight: 400;
|
|
font-size: 22px;
|
|
line-height: inherit;
|
|
}
|
|
h3 > code:not(.bash):not(.nohighlight):not(.mermaid) {
|
|
padding: 0px 4px;
|
|
font-weight: 400;
|
|
font-size: 18px;
|
|
line-height: inherit;
|
|
}
|
|
p {
|
|
font-size: 16px;
|
|
line-height: 150%;
|
|
color: #515774;
|
|
margin-bottom: 32px;
|
|
}
|
|
img + em { // Image captions
|
|
position: relative;
|
|
top: -12px;
|
|
display: flex;
|
|
align-items: center;
|
|
flex-direction: column;
|
|
margin-bottom: 16px;
|
|
}
|
|
ul, ol {
|
|
padding-left: 16px;
|
|
}
|
|
li {
|
|
// padding-bottom: 16px;
|
|
}
|
|
li::marker {
|
|
color: #515774;
|
|
}
|
|
.markdown-heading {
|
|
scroll-margin-top: 140px;
|
|
}
|
|
[purpose='checklist-item'] {
|
|
display: flex;
|
|
input[type='checkbox'] {
|
|
margin-left: -18px;
|
|
min-width: 16px;
|
|
min-height: 16px;
|
|
align-self: center;
|
|
}
|
|
input:checked, input:active {
|
|
accent-color: @core-vibrant-blue;
|
|
}
|
|
[purpose='task'] {
|
|
margin-left: 16px;
|
|
input {
|
|
display: none;
|
|
}
|
|
p {
|
|
margin-bottom: 0px;
|
|
}
|
|
}
|
|
}
|
|
[purpose='checklist-item']::marker {
|
|
display: none;
|
|
}
|
|
ul {
|
|
list-style-type: disc;
|
|
padding-left: 16px;
|
|
margin-bottom: 32px;
|
|
}
|
|
li {
|
|
line-height: 24px;
|
|
// padding-bottom: 16px;
|
|
p { // Making sure our list items stay a consistent size if the contents get wrapped in a <p> tag coverted from Markdown.
|
|
margin-bottom: 0;
|
|
}
|
|
ol, ul { // adding padding to nested lists
|
|
padding-top: 16px;
|
|
li:last-child { // removing the padding from the last item of nested lists
|
|
padding-bottom: 0px;
|
|
}
|
|
}
|
|
}
|
|
ol {
|
|
counter-reset: custom-counter;
|
|
list-style-type: none;
|
|
padding-inline-start: 0px;
|
|
padding: 0;
|
|
margin-top: 16px;
|
|
margin-bottom: 20px;
|
|
ul > li {
|
|
text-indent: 0px;
|
|
margin-left: 0px;
|
|
}
|
|
> li {
|
|
counter-increment: custom-counter;
|
|
margin-left: 36px;
|
|
text-indent: -36px;
|
|
padding-left: 0px;
|
|
margin-bottom: 16px;
|
|
code:not(.nohighlight):not(.mermaid) {
|
|
display: inline;
|
|
}
|
|
p {
|
|
display: inline;
|
|
margin-bottom: 0px;
|
|
}
|
|
blockquote {
|
|
text-indent: 0px;
|
|
}
|
|
}
|
|
> li::before {
|
|
content: counter(custom-counter);
|
|
background-color: #E2E4EA;
|
|
width: 24px;
|
|
font-size: 13px;
|
|
display: inline-block;
|
|
border-radius: 50%;
|
|
margin-right: 10px;
|
|
padding: 2px 4px;
|
|
text-align: center;
|
|
line-height: 20px;
|
|
text-indent: 0px;
|
|
}
|
|
}
|
|
a > code:not(.hljs):not(.nohighlight):not(.mermaid) {
|
|
color: inherit;
|
|
text-decoration: inherit;
|
|
}
|
|
code:not(.bash):not(.hljs):not(.nohighlight):not(.mermaid) {
|
|
background: #F1F0FF;
|
|
padding: 4px 8px;
|
|
font-family: @code-font;
|
|
font-size: 13px;
|
|
line-height: 16px;
|
|
color: @core-fleet-black;
|
|
}
|
|
pre {
|
|
code {
|
|
background: none;
|
|
padding: 0px;
|
|
font-family: @code-font;
|
|
font-size: 13px;
|
|
line-height: 16px;
|
|
color: @core-fleet-black;
|
|
}
|
|
padding: 24px;
|
|
border: 1px solid #E2E4EA;
|
|
border-radius: 6px;
|
|
margin: 0px 0px 40px;
|
|
font-family: @code-font;
|
|
background: #F9FAFC;
|
|
white-space: break-spaces;
|
|
}
|
|
code.mermaid:not([data-processed='true']) {
|
|
opacity: 0;
|
|
}
|
|
code.mermaid {
|
|
color: @core-fleet-black-75;
|
|
margin-bottom: 16px;
|
|
font-family: @code-font;
|
|
display: inline-block;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
background: #fff;
|
|
svg {
|
|
max-height: 600px;
|
|
}
|
|
}
|
|
blockquote {
|
|
display: block;
|
|
position: relative;
|
|
}
|
|
[purpose='quote'] {
|
|
margin: 72px 0 32px 0px;
|
|
font-style: italic;
|
|
line-height: 150%;
|
|
font-size: 20px;
|
|
max-width: 640px;
|
|
p {
|
|
margin-top: 8px;
|
|
}
|
|
}
|
|
[purpose='large-quote'] {
|
|
margin: 72px 0 32px 0px;
|
|
font-style: italic;
|
|
line-height: 150%;
|
|
margin-bottom: 24px;
|
|
font-size: 16px;
|
|
p:last-of-type {
|
|
margin-bottom: 0px;
|
|
}
|
|
strong {
|
|
color: #515774;
|
|
font-family: Inter;
|
|
font-size: 12px;
|
|
font-style: normal;
|
|
font-weight: 700;
|
|
line-height: 18px;
|
|
}
|
|
}
|
|
[purpose='large-quote']::before, [purpose='quote']::before {
|
|
content: ' ';
|
|
background-image: url('/images/icon-quote-21x17@2x.png');
|
|
background-repeat: no-repeat;
|
|
background-size: 21px 17px;
|
|
display: block;
|
|
position: relative;
|
|
top: -16px;
|
|
left: 0px;
|
|
width: 21px;
|
|
height: 17px;
|
|
}
|
|
[purpose='attribution-quote'], [purpose='large-quote'] {
|
|
margin: 72px 0 32px 0px;
|
|
p {
|
|
font-style: italic;
|
|
line-height: 150%;
|
|
margin-bottom: 24px;
|
|
font-size: 20px;
|
|
}
|
|
p:last-of-type {
|
|
margin-bottom: 0px;
|
|
}
|
|
strong {
|
|
color: #515774;
|
|
font-family: Inter;
|
|
font-size: 12px;
|
|
font-style: normal;
|
|
font-weight: 700;
|
|
line-height: 18px;
|
|
}
|
|
}
|
|
[purpose='attribution-quote']::before {
|
|
content: ' ';
|
|
background-image: url('/images/icon-quote-21x17@2x.png');
|
|
background-repeat: no-repeat;
|
|
background-size: 21px 17px;
|
|
display: block;
|
|
position: relative;
|
|
top: -16px;
|
|
left: 0px;
|
|
width: 21px;
|
|
height: 17px;
|
|
}
|
|
[purpose='checklist'] {
|
|
margin-bottom: 32px;
|
|
p {
|
|
font-size: 16px;
|
|
line-height: 150%;
|
|
font-style: normal;
|
|
font-weight: 400;
|
|
padding-left: 40px;
|
|
text-indent: -40px;
|
|
margin-bottom: 16px;
|
|
padding-top: 12px;
|
|
padding-bottom: 12px;
|
|
&:last-of-type {
|
|
margin-bottom: 0px;
|
|
}
|
|
}
|
|
p::before {
|
|
content: ' ';
|
|
background-image: url('/images/icon-checkbox-checked-24x24@2x.png');
|
|
background-size: 24px 24px;
|
|
display: inline-block;
|
|
position: relative;
|
|
top: 7px;
|
|
margin-right: 16px;
|
|
width: 24px;
|
|
height: 24px;
|
|
}
|
|
}
|
|
[purpose='tip'] {
|
|
margin: 16px 0 32px;
|
|
background: #F7F7FC;
|
|
border: 1px solid @core-vibrant-blue-50;
|
|
padding: 16px;
|
|
border-radius: 8px;
|
|
display: flex;
|
|
img {
|
|
display: flex;
|
|
margin: 4px 12px 0 0;
|
|
height: 16px;
|
|
width: 16px;
|
|
padding: 0px;
|
|
}
|
|
p {
|
|
display: block;
|
|
margin-bottom: 16px;
|
|
line-height: 24px;
|
|
font-size: 16px;
|
|
}
|
|
p:only-child, p:last-child {
|
|
margin-bottom: 0px;
|
|
}
|
|
ul:last-child {
|
|
margin-bottom: 0px;
|
|
}
|
|
li:last-child {
|
|
padding-bottom: 0px;
|
|
}
|
|
:first-child {// Remove top padding from the first element inside purpose="tip" blockquotes
|
|
padding-top: 0;
|
|
}
|
|
}
|
|
[purpose='embedded-content'] {
|
|
position: relative;
|
|
margin-bottom: 40px;
|
|
width: 100%;
|
|
padding-bottom: 57%;
|
|
iframe {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
}
|
|
[purpose='embedded-document'] {
|
|
margin-bottom: 40px;
|
|
width: 100%;
|
|
height: 800px;
|
|
}
|
|
table {
|
|
table-layout: auto;
|
|
border: 1px solid @border-lt-gray;
|
|
border-collapse: collapse;
|
|
font-size: 16px;
|
|
line-height: 28px;
|
|
margin-bottom: 16px;
|
|
max-width: 100%;
|
|
th {
|
|
font-weight: @bold;
|
|
border: 1px solid @border-lt-gray;
|
|
padding: 8px 7px 7px 8px;
|
|
}
|
|
td {
|
|
border: 1px solid @border-lt-gray;
|
|
padding: 8px 7px 7px 8px;
|
|
}
|
|
}
|
|
}
|
|
[purpose='social-share-and-edit-buttons'] {
|
|
padding-top: 24px;
|
|
margin-top: 64px;
|
|
border-top: 1px solid #E2E4EA;
|
|
[purpose='social-share-buttons'] {
|
|
gap: 16px;
|
|
img {
|
|
width: 20px;
|
|
height: 20px;
|
|
padding: 0;
|
|
}
|
|
}
|
|
[purpose='edit-link'] {
|
|
a {
|
|
font-size: 14px;
|
|
line-height: 20px;
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
gap: 12px;
|
|
text-decoration: none;
|
|
img {
|
|
width: 16px;
|
|
padding: 0;
|
|
height: 16px;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
@media (max-width: 991px) {
|
|
[purpose='page-container'] {
|
|
max-width: 1200px;
|
|
padding: 48px;
|
|
}
|
|
[purpose='right-sidebar'] {
|
|
margin-top: 64px;
|
|
margin-bottom: 48px;
|
|
width: 100%;
|
|
}
|
|
.header-hidden {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
[purpose='article-container'] {
|
|
max-width: 100%;
|
|
padding-right: 0px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
[purpose='article-content'] {
|
|
padding-bottom: 0px;
|
|
}
|
|
[purpose='webinar-recording-form'] {
|
|
max-width: 324px;
|
|
}
|
|
[purpose='article-title-and-introduction'] {
|
|
margin-bottom: 0px;
|
|
padding-top: 0px;
|
|
width: 100%;
|
|
}
|
|
[purpose='article-title-and-image'] {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 48px;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
[purpose='article-image'] {
|
|
width: 100%;
|
|
img {
|
|
height: unset;
|
|
width: 100%;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (max-width: 769px) {
|
|
[purpose='article-title'] {
|
|
padding-top: 40px;
|
|
margin-bottom: 8px;
|
|
h1 {
|
|
font-size: 28px;
|
|
line-height: 38px;
|
|
}
|
|
}
|
|
[purpose='article-content'] {
|
|
img {
|
|
padding-bottom: 0px;
|
|
}
|
|
img + em { // Image captions
|
|
top: 4px;
|
|
margin-bottom: 16px;
|
|
}
|
|
}
|
|
|
|
}
|
|
@media (max-width: 575px) {
|
|
[purpose='page-container'] {
|
|
padding: 32px 24px;
|
|
}
|
|
[purpose='article-title-and-introduction'] {
|
|
h1 {
|
|
color: #192147;
|
|
|
|
/* Heading/H1 */
|
|
font-family: Inter;
|
|
font-size: 32px;
|
|
font-style: normal;
|
|
font-weight: 800;
|
|
line-height: 120%;
|
|
}
|
|
|
|
}
|
|
[purpose='article-content'] {
|
|
h2 {
|
|
color: #192147;
|
|
|
|
/* Heading/H2 */
|
|
font-family: Inter;
|
|
font-size: 24px;
|
|
font-style: normal;
|
|
font-weight: 800;
|
|
line-height: 120%;
|
|
}
|
|
h3 {
|
|
color: #192147;
|
|
|
|
/* Heading/H3 */
|
|
font-family: Inter;
|
|
font-size: 20px;
|
|
font-style: normal;
|
|
font-weight: 800;
|
|
line-height: 120%;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|