diff --git a/_layouts/landing.html b/_layouts/landing.html index 2443365..d8ce614 100644 --- a/_layouts/landing.html +++ b/_layouts/landing.html @@ -8,7 +8,7 @@ {%- include header.html -%}
-
+

Understand and mitigate security threats others won't see coming.

@@ -18,8 +18,12 @@
-
- +
diff --git a/_sass/base.scss b/_sass/base.scss index c5b790a..d1ee07f 100644 --- a/_sass/base.scss +++ b/_sass/base.scss @@ -10,54 +10,140 @@ /** * Style variables */ -$base-font-family: 'Rubik', monospace !default; -$base-font-size: 1.125rem !default; -$mobile-font-size: 1.125rem !default; -$base-line-height: 1.5 !default; -$container-width: 90% !default; -$container-max-width: 1000px !default; +$base-font-family: 'Rubik', monospace !default; +$base-font-size: 1.125rem !default; +$mobile-font-size: 1.125rem !default; +$base-line-height: 1.5 !default; +$container-width: 90% !default; +$container-max-width: 1000px !default; /** * Global */ -body { background-color: var(--background-color); margin: 0 auto; padding: 0; font-family: $base-font-family; font-size: $base-font-size; color: var(--text-color); text-align: left; line-height: $base-line-height !important; } -h1 { font-size: 32px; } -h2 { font-size: 28px; } -h3 { font-size: 24px; } -h4 { font-size: 20px; } -h5 { font-size: 18px; } -h6 { font-size: 16px; } -h1, h2, h3, h4, h5, h6 { margin: 0px; margin-top: 12px; margin-bottom: 12px; font-weight: bold; color: var(--text-color); } -p, ul, ol { margin: 0px; color: var(--text-color); } -a { text-decoration: underline; color: var(--link-color); } -a:hover { - color: var(--background-color); - background-color: var(--base-color); +body { + background-color: var(--background-color); + margin: 0 auto; + padding: 0; + font-family: $base-font-family; + font-size: $base-font-size; + color: var(--text-color); + text-align: left; + line-height: $base-line-height !important; +} + +h1 { + font-size: 32px; +} + +h2 { + font-size: 28px; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 20px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0px; + margin-top: 12px; + margin-bottom: 12px; + font-weight: bold; + color: var(--text-color); +} + +p, +ul, +ol { + margin: 0px; + color: var(--text-color); +} + +a { + text-decoration: underline; + color: var(--link-color); +} + +a:hover { + color: var(--background-color); + background-color: var(--base-color); transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out; } -@media only screen and (max-device-width: 500px) { * { font-size: $mobile-font-size; } } +@media only screen and (max-device-width: 500px) { + * { + font-size: $mobile-font-size; + } +} /** * Layout */ -.container { width: $container-width; max-width: $container-max-width; margin-right: auto; margin-left: auto; } -p { word-wrap: break-word; word-break: break-word; white-space: pre-wrap; margin-bottom: 15px; } -footer { color: var(--text-color); border-top: var(--border); margin-top: 0; padding-top: 10px; text-align: right; } -header { margin-top: 50px; margin-bottom: 50px; } -header p { text-align: left; margin: 0; } -footer { margin-bottom: 20px; } -hr { margin-top: 20px; } +.container { + width: $container-width; + max-width: $container-max-width; + margin-right: auto; + margin-left: auto; +} + +p { + word-wrap: break-word; + word-break: break-word; + white-space: pre-wrap; + margin-bottom: 15px; +} + +footer { + color: var(--text-color); + border-top: var(--border); + margin-top: 0; + padding-top: 10px; + text-align: right; +} + +header { + margin-top: 50px; + margin-bottom: 50px; +} + +header p { + text-align: left; + margin: 0; +} + +footer { + margin-bottom: 20px; +} + +hr { + margin-top: 20px; +} /** * Navbar */ -.menu-logo { +.menu-logo { height: 60px; } #home-link:hover { - background: none; + background: none; text-decoration: none; } @@ -72,7 +158,7 @@ hr { margin-top: 20px; } .header-page-links a { margin: 0px 15px; font-size: 1.3rem; - text-decoration: none; + text-decoration: none; } .header-page-links a:hover { @@ -88,54 +174,55 @@ hr { margin-top: 20px; } } .menu-button-container { - display: none; - width: 50px; - height: 50px; - cursor: pointer; - flex-direction: column; - justify-content: center; - align-items: center; + display: none; + width: 50px; + height: 50px; + cursor: pointer; + flex-direction: column; + justify-content: center; + align-items: center; } #menu-toggle { - display: none; + display: none; } .menu-button, .menu-button::before, .menu-button::after { - display: block; - background-color: #fff; - position: absolute; - height: 4px; - width: 30px; - transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1); - border-radius: 2px; + display: block; + background-color: #fff; + position: absolute; + height: 4px; + width: 30px; + transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1); + border-radius: 2px; } .menu-button::before { - content: ''; - margin-top: -8px; + content: ''; + margin-top: -8px; } .menu-button::after { - content: ''; - margin-top: 8px; + content: ''; + margin-top: 8px; } -#menu-toggle:checked + .menu-button-container .menu-button::before { - margin-top: 0px; - transform: rotate(405deg); +#menu-toggle:checked+.menu-button-container .menu-button::before { + margin-top: 0px; + transform: rotate(405deg); } -#menu-toggle:checked + .menu-button-container .menu-button { - background: rgba(255, 255, 255, 0); +#menu-toggle:checked+.menu-button-container .menu-button { + background: rgba(255, 255, 255, 0); } -#menu-toggle:checked + .menu-button-container .menu-button::after { - margin-top: 0px; - transform: rotate(-405deg); +#menu-toggle:checked+.menu-button-container .menu-button::after { + margin-top: 0px; + transform: rotate(-405deg); } + .menu-content { position: absolute; display: none; @@ -147,7 +234,7 @@ hr { margin-top: 20px; } } .inner-menu-content { - border-bottom: 1px solid white; + border-bottom: 1px solid white; } .menu-content div { @@ -159,34 +246,39 @@ hr { margin-top: 20px; } width: 40px; height: 40px; } - .menu-button-container { - display: flex; - } - #menu-toggle ~ .menu li { - height: 0; - margin: 0; - padding: 0; - border: 0; - transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1); - } - #menu-toggle:checked ~ .menu li { - border: 1px solid #333; - height: 2.5em; - padding: 0.5em; - transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1); - } - .menu > li { - display: flex; - justify-content: center; - margin: 0; - padding: 0.5em 0; - width: 100%; - color: white; - background-color: #222; - } - .menu > li:not(:last-child) { - border-bottom: 1px solid #444; - } + + .menu-button-container { + display: flex; + } + + #menu-toggle~.menu li { + height: 0; + margin: 0; + padding: 0; + border: 0; + transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1); + } + + #menu-toggle:checked~.menu li { + border: 1px solid #333; + height: 2.5em; + padding: 0.5em; + transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1); + } + + .menu>li { + display: flex; + justify-content: center; + margin: 0; + padding: 0.5em 0; + width: 100%; + color: white; + background-color: #222; + } + + .menu>li:not(:last-child) { + border-bottom: 1px solid #444; + } } /** @@ -217,56 +309,142 @@ hr { margin-top: 20px; } /** * Highlight/Markup */ -::selection { background: var(--selection-background); color: var(--selection-text); } -::-moz-selection { background: var(--selection-background); color: var(--selection-text); } +::selection { + background: var(--selection-background); + color: var(--selection-text); +} + +::-moz-selection { + background: var(--selection-background); + color: var(--selection-text); +} /** * Lists */ -:not(.menu) > ul { list-style: none; } -:not(.menu) > ul { list-style-type: none; } -:not(.menu) > ul > li:before { content: "-"; margin-right: 9px; } -.right-menu > ul > li:before { content: "" !important; margin-right: 9px; } +:not(.menu)>ul { + list-style: none; +} + +:not(.menu)>ul { + list-style-type: none; +} + +:not(.menu)>ul>li:before { + content: "-"; + margin-right: 9px; +} + +.right-menu>ul>li:before { + content: "" !important; + margin-right: 9px; +} /** * Header/Navigation */ -.menu { - border-bottom: var(--border); margin-bottom: 20px; +.menu { + border-bottom: var(--border); + margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center; padding-bottom: 25px; } -.menu ul { margin-top: 12px; margin-bottom: 12px; padding-left: 0px; list-style-type: none; text-align: right; } -.menu ul li { display: inline; margin-left: 10px; } + +.menu ul { + margin-top: 12px; + margin-bottom: 12px; + padding-left: 0px; + list-style-type: none; + text-align: right; +} + +.menu ul li { + display: inline; + margin-left: 10px; +} /** * Form */ -input, select, textarea { padding: 0; margin: 0; -webkit-appearance: none; -webkit-border-radius: 0; border: none; } -input[type=text], select, textarea { width: 100%; resize: none; background-color: var(--background-color); color: var(--text-color); caret-color: var(--text-color); font-size: $base-font-size; font-family: $base-font-family; line-height: $base-line-height; } -input, select, textarea, textarea::-webkit-input-placeholder { text-indent: 0px; } -::placeholder { color: var(--placeholder-color); opacity: 1; } -:-ms-input-placeholder { color: var(--placeholder-color); } -::-ms-input-placeholder { color: var(--placeholder-color); } -input[type=submit] { font-size: $base-font-size; font-family: $base-font-family; line-height: $base-line-height; cursor: pointer; color: var(--link-color); background-color: var(--background-color); } -input[type=submit]:hover { color: var(--background-color); background-color: var(--base-color); } -*:focus { outline: none; } -textarea { vertical-align: top; } +input, +select, +textarea { + padding: 0; + margin: 0; + -webkit-appearance: none; + -webkit-border-radius: 0; + border: none; +} + +input[type=text], +select, +textarea { + width: 100%; + resize: none; + background-color: var(--background-color); + color: var(--text-color); + caret-color: var(--text-color); + font-size: $base-font-size; + font-family: $base-font-family; + line-height: $base-line-height; +} + +input, +select, +textarea, +textarea::-webkit-input-placeholder { + text-indent: 0px; +} + +::placeholder { + color: var(--placeholder-color); + opacity: 1; +} + +:-ms-input-placeholder { + color: var(--placeholder-color); +} + +::-ms-input-placeholder { + color: var(--placeholder-color); +} + +input[type=submit] { + font-size: $base-font-size; + font-family: $base-font-family; + line-height: $base-line-height; + cursor: pointer; + color: var(--link-color); + background-color: var(--background-color); +} + +input[type=submit]:hover { + color: var(--background-color); + background-color: var(--base-color); +} + +*:focus { + outline: none; +} + +textarea { + vertical-align: top; +} /** * Homepage */ .particles-wrapper { - background-color: #222; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - overflow: hidden; + background-color: #222; + width: 100%; + height: 100%; + padding: 0; + margin: 0; + overflow: hidden; } .flex-container { @@ -321,67 +499,327 @@ section { /** * Code and syntax highlighting */ -.lineno { color: var(--code-color-1); margin-right: 15px; } -figure.highlight { margin: 5px 0; } -pre { background-color: var(--background-color); border: none; padding: 0; margin: 0; overflow:auto; font-size: $base-font-size; color: var(--text-color); line-height: 1.7 !important; font-family: $base-font-family !important; } -.highlight .hll { background-color: var(--code-color-2); } -.highlight .c { color: var(--code-color-1); font-style: italic } /* Comment */ -.highlight .err { color: var(--code-color-3); background-color: var(--code-color-4); } /* Error */ -.highlight .k { color: var(--code-color-5); } /* Keyword */ -.highlight .cm { color: var(--code-color-1); font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: var(--code-color-6); } /* Comment.Preproc */ -.highlight .c1 { color: var(--code-color-1); font-style: italic } /* Comment.Single */ -.highlight .cs { color: var(--code-color-5); font-style: italic } /* Comment.Special */ -.highlight .gd { color: var(--code-color-7); } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: var(--code-color-7); } /* Generic.Error */ -.highlight .gh { color: var(--code-color-8); font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: var(--code-color-9); } /* Generic.Inserted */ -.highlight .go { color: var(--code-color-10); } /* Generic.Output */ -.highlight .gp { color: var(--code-color-11); } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: var(--code-color-12); font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: var(--code-color-7); } /* Generic.Traceback */ -.highlight .kc { color: var(--code-color-5); } /* Keyword.Constant */ -.highlight .kd { color: var(--code-color-5); } /* Keyword.Declaration */ -.highlight .kn { color: var(--code-color-5); } /* Keyword.Namespace */ -.highlight .kp { color: var(--code-color-5); } /* Keyword.Pseudo */ -.highlight .kr { color: var(--code-color-5); } /* Keyword.Reserved */ -.highlight .kt { color: var(--code-color-13); } /* Keyword.Type */ -.highlight .m { color: var(--code-color-14); } /* Literal.Number */ -.highlight .s { color: var(--code-color-15); } /* Literal.String */ -.highlight .na { color: var(--code-color-16); } /* Name.Attribute */ -.highlight .nb { color: var(--code-color-13); } /* Name.Builtin */ -.highlight .nc { color: var(--code-color-9); text-decoration: underline } /* Name.Class */ -.highlight .no { color: var(--code-color-7); } /* Name.Constant */ -.highlight .nd { color: var(--code-color-10); } /* Name.Decorator */ -.highlight .ni { color: var(--code-color-17); font-weight: bold } /* Name.Entity */ -.highlight .nf { color: var(--code-color-9); } /* Name.Function */ -.highlight .nn { color: var(--code-color-13); text-decoration: underline } /* Name.Namespace */ -.highlight .nt { color: var(--code-color-16); font-weight: bold } /* Name.Tag */ -.highlight .nv { color: var(--code-color-7); } /* Name.Variable */ -.highlight .ow { color: var(--code-color-5); } /* Operator.Word */ -.highlight .w { color: var(--code-color-18); } /* Text.Whitespace */ -.highlight .mf { color: var(--code-color-14); } /* Literal.Number.Float */ -.highlight .mh { color: var(--code-color-14); } /* Literal.Number.Hex */ -.highlight .mi { color: var(--code-color-14); } /* Literal.Number.Integer */ -.highlight .mo { color: var(--code-color-14); } /* Literal.Number.Oct */ -.highlight .sb { color: var(--code-color-15); } /* Literal.String.Backtick */ -.highlight .sc { color: var(--code-color-15); } /* Literal.String.Char */ -.highlight .sd { color: var(--code-color-15); } /* Literal.String.Doc */ -.highlight .s2 { color: var(--code-color-15); } /* Literal.String.Double */ -.highlight .se { color: var(--code-color-15); } /* Literal.String.Escape */ -.highlight .sh { color: var(--code-color-15); } /* Literal.String.Heredoc */ -.highlight .si { color: var(--code-color-15); } /* Literal.String.Interpol */ -.highlight .sx { color: var(--code-color-15); } /* Literal.String.Other */ -.highlight .sr { color: var(--code-color-14); } /* Literal.String.Regex */ -.highlight .s1 { color: var(--code-color-15); } /* Literal.String.Single */ -.highlight .ss { color: var(--code-color-5); } /* Literal.String.Symbol */ -.highlight .bp { color: var(--code-color-13); } /* Name.Builtin.Pseudo */ -.highlight .vc { color: var(--code-color-7); } /* Name.Variable.Class */ -.highlight .vg { color: var(--code-color-7); } /* Name.Variable.Global */ -.highlight .vi { color: var(--code-color-7); } /* Name.Variable.Instance */ -.highlight .il { color: var(--code-color-14); } /* Literal.Number.Integer.Long */ +.lineno { + color: var(--code-color-1); + margin-right: 15px; +} + +figure.highlight { + margin: 5px 0; +} + +pre { + background-color: var(--background-color); + border: none; + padding: 0; + margin: 0; + overflow: auto; + font-size: $base-font-size; + color: var(--text-color); + line-height: 1.7 !important; + font-family: $base-font-family !important; +} + +.highlight .hll { + background-color: var(--code-color-2); +} + +.highlight .c { + color: var(--code-color-1); + font-style: italic +} + +/* Comment */ +.highlight .err { + color: var(--code-color-3); + background-color: var(--code-color-4); +} + +/* Error */ +.highlight .k { + color: var(--code-color-5); +} + +/* Keyword */ +.highlight .cm { + color: var(--code-color-1); + font-style: italic +} + +/* Comment.Multiline */ +.highlight .cp { + color: var(--code-color-6); +} + +/* Comment.Preproc */ +.highlight .c1 { + color: var(--code-color-1); + font-style: italic +} + +/* Comment.Single */ +.highlight .cs { + color: var(--code-color-5); + font-style: italic +} + +/* Comment.Special */ +.highlight .gd { + color: var(--code-color-7); +} + +/* Generic.Deleted */ +.highlight .ge { + font-style: italic +} + +/* Generic.Emph */ +.highlight .gr { + color: var(--code-color-7); +} + +/* Generic.Error */ +.highlight .gh { + color: var(--code-color-8); + font-weight: bold +} + +/* Generic.Heading */ +.highlight .gi { + color: var(--code-color-9); +} + +/* Generic.Inserted */ +.highlight .go { + color: var(--code-color-10); +} + +/* Generic.Output */ +.highlight .gp { + color: var(--code-color-11); +} + +/* Generic.Prompt */ +.highlight .gs { + font-weight: bold +} + +/* Generic.Strong */ +.highlight .gu { + color: var(--code-color-12); + font-weight: bold +} + +/* Generic.Subheading */ +.highlight .gt { + color: var(--code-color-7); +} + +/* Generic.Traceback */ +.highlight .kc { + color: var(--code-color-5); +} + +/* Keyword.Constant */ +.highlight .kd { + color: var(--code-color-5); +} + +/* Keyword.Declaration */ +.highlight .kn { + color: var(--code-color-5); +} + +/* Keyword.Namespace */ +.highlight .kp { + color: var(--code-color-5); +} + +/* Keyword.Pseudo */ +.highlight .kr { + color: var(--code-color-5); +} + +/* Keyword.Reserved */ +.highlight .kt { + color: var(--code-color-13); +} + +/* Keyword.Type */ +.highlight .m { + color: var(--code-color-14); +} + +/* Literal.Number */ +.highlight .s { + color: var(--code-color-15); +} + +/* Literal.String */ +.highlight .na { + color: var(--code-color-16); +} + +/* Name.Attribute */ +.highlight .nb { + color: var(--code-color-13); +} + +/* Name.Builtin */ +.highlight .nc { + color: var(--code-color-9); + text-decoration: underline +} + +/* Name.Class */ +.highlight .no { + color: var(--code-color-7); +} + +/* Name.Constant */ +.highlight .nd { + color: var(--code-color-10); +} + +/* Name.Decorator */ +.highlight .ni { + color: var(--code-color-17); + font-weight: bold +} + +/* Name.Entity */ +.highlight .nf { + color: var(--code-color-9); +} + +/* Name.Function */ +.highlight .nn { + color: var(--code-color-13); + text-decoration: underline +} + +/* Name.Namespace */ +.highlight .nt { + color: var(--code-color-16); + font-weight: bold +} + +/* Name.Tag */ +.highlight .nv { + color: var(--code-color-7); +} + +/* Name.Variable */ +.highlight .ow { + color: var(--code-color-5); +} + +/* Operator.Word */ +.highlight .w { + color: var(--code-color-18); +} + +/* Text.Whitespace */ +.highlight .mf { + color: var(--code-color-14); +} + +/* Literal.Number.Float */ +.highlight .mh { + color: var(--code-color-14); +} + +/* Literal.Number.Hex */ +.highlight .mi { + color: var(--code-color-14); +} + +/* Literal.Number.Integer */ +.highlight .mo { + color: var(--code-color-14); +} + +/* Literal.Number.Oct */ +.highlight .sb { + color: var(--code-color-15); +} + +/* Literal.String.Backtick */ +.highlight .sc { + color: var(--code-color-15); +} + +/* Literal.String.Char */ +.highlight .sd { + color: var(--code-color-15); +} + +/* Literal.String.Doc */ +.highlight .s2 { + color: var(--code-color-15); +} + +/* Literal.String.Double */ +.highlight .se { + color: var(--code-color-15); +} + +/* Literal.String.Escape */ +.highlight .sh { + color: var(--code-color-15); +} + +/* Literal.String.Heredoc */ +.highlight .si { + color: var(--code-color-15); +} + +/* Literal.String.Interpol */ +.highlight .sx { + color: var(--code-color-15); +} + +/* Literal.String.Other */ +.highlight .sr { + color: var(--code-color-14); +} + +/* Literal.String.Regex */ +.highlight .s1 { + color: var(--code-color-15); +} + +/* Literal.String.Single */ +.highlight .ss { + color: var(--code-color-5); +} + +/* Literal.String.Symbol */ +.highlight .bp { + color: var(--code-color-13); +} + +/* Name.Builtin.Pseudo */ +.highlight .vc { + color: var(--code-color-7); +} + +/* Name.Variable.Class */ +.highlight .vg { + color: var(--code-color-7); +} + +/* Name.Variable.Global */ +.highlight .vi { + color: var(--code-color-7); +} + +/* Name.Variable.Instance */ +.highlight .il { + color: var(--code-color-14); +} + +/* Literal.Number.Integer.Long */ .hide { @@ -393,19 +831,108 @@ pre { background-color: var(--background-color); border: none; padding: 0; ma display: inline-block; } + /** - * Media Queries + * Carousel + */ + +.carousel-container { + padding-left: 80px; +} + +#carousel { + display: flex; + flex-direction: column; + align-items: center; + overflow: hidden; + height: 320px; + padding-left: 100px; + position: relative; +} + +.carousel-item { + display: flex; + justify-content: center; + align-items: center; + max-width: 400px; + height: 80px; + width: 100%; + font-size: 16px; + opacity: 0.5; + margin: 5px 0; + position: absolute; + left: 0; + right: 0; + transition: transform 1s ease, font-size 1s ease, opacity 1s ease; + transform-origin: center; + visibility: hidden; + overflow: hidden; +} + +.carousel-link { + text-align: left; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + text-overflow: ellipsis; + line-height: 1.2; + max-height: 2.4em; + width: 100%; + margin: 0 10px; + white-space: normal; +} + +.carousel-item.active { + transform: translateY(0) scale(1.2); + font-size: 20px; + opacity: 1; + visibility: visible; +} +/** end carousel */ + +*, +*::before, +*::after { + box-sizing: border-box; +} + +body { + font-family: 'Work Sans', sans-serif; + font-weight: 400; + width: 100%; +} + +.wrapper { + background: linear-gradient(60deg, #420285, #08BDBD); + height: 100%; + width: 100%; + display: flex; + justify-content: center; +} + +.title { + text-transform: uppercase; + font-size: 20px; + margin-top: 10px; +} + +/** + * media queries */ @media (max-width: 1020px) { .flex-container-inner { width: 100% !important; } + .flex-container { display: inline-block; } + .hide { display: inline-block; } + .show { display: none; } @@ -415,9 +942,15 @@ pre { background-color: var(--background-color); border: none; padding: 0; ma .companies { flex-wrap: wrap; } + .companies div { width: 100%; height: 170px; border-bottom: none; } + + .carousel-container { + padding-top: 50px; + padding-left: 10px; + } } \ No newline at end of file diff --git a/assets/js/carousel-items.json b/assets/js/carousel-items.json new file mode 100644 index 0000000..b20e831 --- /dev/null +++ b/assets/js/carousel-items.json @@ -0,0 +1,122 @@ +[ + { + "link": "https://www.wired.com/story/the-untold-story-of-solarwinds-the-boldest-supply-chain-hack-ever/", + "description": "SolarWind: The Untold Story of the Boldest Supply-Chain Hack Ever" + }, + { + "link": "https://www.theverge.com/2018/4/24/17275982/myetherwallet-hack-bgp-dns-hijacking-stolen-ethereum", + "description": "Hackers emptied Ethereum wallets by breaking the basic infrastructure of the internet" + }, + { + "link": "https://milksad.info/", + "description": "A practical explanation of how weak entropy can ruin your day - and your savings." + }, + { + "link": "https://thehackerblog.com/zero-days-without-incident-compromising-angular-via-expired-npm-publisher-email-domains-7kZplW4x/", + "description": "Compromising Angular via Expired npm Publisher Email Domains" + }, + { + "link": "https://blog.ryotak.net/post/homebrew-security-incident-en/", + "description": "Remote code execution in Homebrew by compromising the official Cask repository" + }, + { + "link": "https://gizmodo.com/u-s-federal-investigators-are-reportedly-looking-into-1846707144link4", + "description": "U.S. Federal Investigators Are Reportedly Looking Into Codecov Security Breach, Undetected for Months" + }, + { + "link": "https://www.bleepingcomputer.com/news/security/big-sabotage-famous-npm-package-deletes-files-to-protest-ukraine-war/", + "description": "BIG sabotage: Famous npm package deletes files to protest Ukraine war" + }, + { + "link": "https://certitude.consulting/blog/en/invisible-backdoor/", + "description": "The Invisible JavaScript Backdoor" + }, + { + "link": "https://thehackernews.com/2022/06/multiple-backdoored-python-libraries.html?m=1", + "description": "Multiple Backdoored Python Libraries Caught Stealing AWS Secrets and Keys" + }, + { + "link": "https://www.wired.com/story/3cx-supply-chain-attack-times-two/", + "description": "The Huge 3CX Breach Was Actually 2 Linked Supply Chain Attacks" + }, + { + "link": "https://www.zdnet.com/article/iota-cryptocurrency-shuts-down-entire-network-after-wallet-hack/", + "description": "IOTA cryptocurrency shuts down entire network after wallet hack " + }, + { + "link": "https://arstechnica.com/information-technology/2021/02/supply-chain-attack-that-fooled-apple-and-microsoft-is-attracting-copycats/", + "description": "New type of supply-chain attack hit Apple, Microsoft and 33 other companies" + }, + { + "link": "https://www.bankinfosecurity.com/crypto-exchange-klayswap-loses-19m-after-bgp-hijack-a-18518", + "description": "Crypto Exchange KLAYswap Loses $1.9M After BGP Hijack" + }, + { + "link": "https://www.businessinsider.com/kidnapped-crypto-exec-released-after-paying-1-million-bitcoin-ransom-2017-12", + "description": "A kidnapped crypto executive was reportedly released after paying a $1 million bitcoin ransom" + }, + { + "link": "https://www.independent.co.uk/tech/bitcoin-robbery-torture-cryptocurrency-netherlands-a8807986.html", + "description": "Bitcoin trader brutally tortured with drill in cryptocurrency robbery" + }, + { + "link": "https://www.vice.com/en/article/ne4pvg/police-in-ottawa-canada-charged-a-teen-with-armed-bitcoin-robbery-are-hunting-two-suspects", + "description": "Three Armed Men Attempted to Rob a Bitcoin Exchange In Canada" + }, + { + "link": "https://www.birminghammail.co.uk/news/midlands-news/watch-masked-raiders-hold-up-16599570", + "description": "Watch - Masked raiders hold up Bitcoin Exchange store in Sparkhill in front of dozens of witnesses" + }, + { + "link": "https://www.nzherald.co.nz/nz/crypto-heist-raiders-steal-safe-containing-4m-in-cryptocurrency-from-westmere-home/PI3L5LMS6PCSVABJDYSW5O4YGA/", + "description": "Crypto heist: Raiders steal safe containing $4m in cryptocurrency from Westmere home" + }, + { + "link": "https://www.computerworld.com/article/2538534/data-center-robbery-leads-to-new-thinking-on-security.html", + "description": "Data center robbery leads to new thinking on security" + }, + { + "link": "https://www.thirdsector.co.uk/plan-uk-alerts-supporters-theft-computer-servers-its-offices/management/article/1375208", + "description": "Plan UK alerts supporters to theft of computer servers from its offices" + }, + { + "link": "https://www.pcmag.com/news/vudu-resets-passwords-after-user-data-stolen-in-burglary", + "description": "Vudu Resets Passwords After User Data Stolen in Burglary" + }, + { + "link": "https://finance.yahoo.com/news/hackers-scored-data-center-logins-020028440.html", + "description": "Hackers Scored Data Center Logins for Some of the World's Biggest Companies" + }, + { + "link": "https://www.cbsnews.com/news/nsa-broke-into-yahoo-and-google-data-centers-around-world-report-says/", + "description": "NSA broke into Yahoo and Google data centers around world, report says" + }, + { + "link": "https://www.vice.com/en/article/3kxy4k/high-tech-japanese-hotel-service-robots-easily-hackable", + "description": "High-Tech Japanese Hotel Finds Out Its Service Robots Are Easily Hackable" + }, + { + "link": "https://www.washingtonpost.com/news/innovations/wp/2017/07/21/how-a-fish-tank-helped-hack-a-casino/", + "description": "How a fish tank helped hack a casino" + }, + { + "link": "https://www.wsj.com/articles/fraudsters-use-ai-to-mimic-ceos-voice-in-unusual-cybercrime-case-11567157402", + "description": "Fraudsters Used AI to Mimic CEO's Voice in Unusual Cybercrime Case" + }, + { + "link": "https://www.forbes.com/sites/iainmartin/2023/08/21/blockchain-capitals-bart-stephens-lost-63-million-in-sim-swap-crypto-hack/?sh=6cc4576bf74c", + "description": "Blockchain Capital's Bart Stephens Lost $6.3 Million In SIM-Swap Crypto Hack" + }, + { + "link": "https://www.wsj.com/articles/he-thought-his-phone-was-secure-then-he-lost-24-million-to-hackers-11573221600", + "description": "He Thought His Phone Was Secure; Then He Lost $24 Million to Hackers" + }, + { + "link": "https://arstechnica.com/information-technology/2018/02/tesla-cloud-resources-are-hacked-to-run-cryptocurrency-mining-malware/", + "description": "Tesla cloud resources are hacked to run cryptocurrency-mining malware" + }, + { + "link": "https://www.wired.com/story/sea-turtle-dns-hijacking/", + "description": "Cyberspies Hijacked the Internet Domains of Entire Countries" + } +] diff --git a/assets/js/main.js b/assets/js/main.js index 4621183..c99fe57 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -8,3 +8,58 @@ collapsibleButton.addEventListener("click", function () { menuContent.style.display = "block"; } }); + +document.addEventListener('DOMContentLoaded', function () { + fetch('../assets/js/carousel-items.json') + .then(response => response.json()) + .then(data => { + createCarouselItems(data); + initializeCarousel(); + }) + .catch(error => console.error('Error loading JSON:', error)); +}); + +function createCarouselItems(items) { + const carousel = document.querySelector('#carousel'); + items.forEach(item => { + const itemDiv = document.createElement('div'); + itemDiv.className = 'carousel-item' + + const link = document.createElement('a'); + link.className = 'carousel-link'; + link.href = item.link; + link.target = '_blank'; + link.rel = 'noopener noreferrer'; + const linkText = document.createTextNode(item.description); + + link.appendChild(linkText); + itemDiv.appendChild(link); + carousel.appendChild(itemDiv); + }); +} + +function initializeCarousel() { + const carousel = document.querySelector('#carousel'); + const items = Array.from(carousel.children); + const totalItems = items.length; + const middleIndex = Math.floor(totalItems / 2); + let currentIndex = -middleIndex; + + function cycleItems() { + currentIndex = (currentIndex - 1 + totalItems) % totalItems; + updateCarouselItems(); + } + + function updateCarouselItems() { + items.forEach((item, index) => { + let positionIndex = (currentIndex + index + totalItems) % totalItems; + let offset = positionIndex - middleIndex; + item.style.transform = `translateY(${offset * 100}%)`; + item.classList.toggle('active', positionIndex === middleIndex); + item.style.visibility = 'visible'; + }); + } + + updateCarouselItems(); + setInterval(cycleItems, 7000); +} \ No newline at end of file