Merge branch 'carousel'
This commit is contained in:
commit
45924dcb9e
|
@ -8,7 +8,7 @@
|
||||||
{%- include header.html -%}
|
{%- include header.html -%}
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<section class="">
|
<section class="flex-container">
|
||||||
<div class="flex-container-inner">
|
<div class="flex-container-inner">
|
||||||
<div class="text-well">
|
<div class="text-well">
|
||||||
<h2>Understand and mitigate security threats others won't see coming.</h2>
|
<h2>Understand and mitigate security threats others won't see coming.</h2>
|
||||||
|
@ -18,8 +18,12 @@
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-container-inner">
|
<div class="flex-container-inner carousel-container">
|
||||||
<!-- <canvas id="canvas"></canvas> -->
|
<div id="carousel"></div>
|
||||||
|
<br>
|
||||||
|
<div style="margin-left: 10px; font-size: 14px">
|
||||||
|
<a style="color: rgb(73, 73, 73)" href="../assets/js/carousel-items.json">Full list of articles</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
865
_sass/base.scss
865
_sass/base.scss
|
@ -10,44 +10,130 @@
|
||||||
/**
|
/**
|
||||||
* Style variables
|
* Style variables
|
||||||
*/
|
*/
|
||||||
$base-font-family: 'Rubik', monospace !default;
|
$base-font-family: 'Rubik', monospace !default;
|
||||||
$base-font-size: 1.125rem !default;
|
$base-font-size: 1.125rem !default;
|
||||||
$mobile-font-size: 1.125rem !default;
|
$mobile-font-size: 1.125rem !default;
|
||||||
$base-line-height: 1.5 !default;
|
$base-line-height: 1.5 !default;
|
||||||
$container-width: 90% !default;
|
$container-width: 90% !default;
|
||||||
$container-max-width: 1000px !default;
|
$container-max-width: 1000px !default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global
|
* 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; }
|
body {
|
||||||
h1 { font-size: 32px; }
|
background-color: var(--background-color);
|
||||||
h2 { font-size: 28px; }
|
margin: 0 auto;
|
||||||
h3 { font-size: 24px; }
|
padding: 0;
|
||||||
h4 { font-size: 20px; }
|
font-family: $base-font-family;
|
||||||
h5 { font-size: 18px; }
|
font-size: $base-font-size;
|
||||||
h6 { font-size: 16px; }
|
color: var(--text-color);
|
||||||
h1, h2, h3, h4, h5, h6 { margin: 0px; margin-top: 12px; margin-bottom: 12px; font-weight: bold; color: var(--text-color); }
|
text-align: left;
|
||||||
p, ul, ol { margin: 0px; color: var(--text-color); }
|
line-height: $base-line-height !important;
|
||||||
a { text-decoration: underline; color: var(--link-color); }
|
}
|
||||||
|
|
||||||
|
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 {
|
a:hover {
|
||||||
color: var(--background-color);
|
color: var(--background-color);
|
||||||
background-color: var(--base-color);
|
background-color: var(--base-color);
|
||||||
transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out;
|
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
|
* Layout
|
||||||
*/
|
*/
|
||||||
.container { width: $container-width; max-width: $container-max-width; margin-right: auto; margin-left: auto; }
|
.container {
|
||||||
p { word-wrap: break-word; word-break: break-word; white-space: pre-wrap; margin-bottom: 15px; }
|
width: $container-width;
|
||||||
footer { color: var(--text-color); border-top: var(--border); margin-top: 0; padding-top: 10px; text-align: right; }
|
max-width: $container-max-width;
|
||||||
header { margin-top: 50px; margin-bottom: 50px; }
|
margin-right: auto;
|
||||||
header p { text-align: left; margin: 0; }
|
margin-left: auto;
|
||||||
footer { margin-bottom: 20px; }
|
}
|
||||||
hr { margin-top: 20px; }
|
|
||||||
|
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
|
* Navbar
|
||||||
|
@ -88,54 +174,55 @@ hr { margin-top: 20px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-button-container {
|
.menu-button-container {
|
||||||
display: none;
|
display: none;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#menu-toggle {
|
#menu-toggle {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-button,
|
.menu-button,
|
||||||
.menu-button::before,
|
.menu-button::before,
|
||||||
.menu-button::after {
|
.menu-button::after {
|
||||||
display: block;
|
display: block;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 4px;
|
height: 4px;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
|
transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-button::before {
|
.menu-button::before {
|
||||||
content: '';
|
content: '';
|
||||||
margin-top: -8px;
|
margin-top: -8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-button::after {
|
.menu-button::after {
|
||||||
content: '';
|
content: '';
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#menu-toggle:checked + .menu-button-container .menu-button::before {
|
#menu-toggle:checked+.menu-button-container .menu-button::before {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
transform: rotate(405deg);
|
transform: rotate(405deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#menu-toggle:checked + .menu-button-container .menu-button {
|
#menu-toggle:checked+.menu-button-container .menu-button {
|
||||||
background: rgba(255, 255, 255, 0);
|
background: rgba(255, 255, 255, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#menu-toggle:checked + .menu-button-container .menu-button::after {
|
#menu-toggle:checked+.menu-button-container .menu-button::after {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
transform: rotate(-405deg);
|
transform: rotate(-405deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-content {
|
.menu-content {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -159,34 +246,39 @@ hr { margin-top: 20px; }
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
.menu-button-container {
|
|
||||||
display: flex;
|
.menu-button-container {
|
||||||
}
|
display: flex;
|
||||||
#menu-toggle ~ .menu li {
|
}
|
||||||
height: 0;
|
|
||||||
margin: 0;
|
#menu-toggle~.menu li {
|
||||||
padding: 0;
|
height: 0;
|
||||||
border: 0;
|
margin: 0;
|
||||||
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
|
padding: 0;
|
||||||
}
|
border: 0;
|
||||||
#menu-toggle:checked ~ .menu li {
|
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
|
||||||
border: 1px solid #333;
|
}
|
||||||
height: 2.5em;
|
|
||||||
padding: 0.5em;
|
#menu-toggle:checked~.menu li {
|
||||||
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
|
border: 1px solid #333;
|
||||||
}
|
height: 2.5em;
|
||||||
.menu > li {
|
padding: 0.5em;
|
||||||
display: flex;
|
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
|
||||||
justify-content: center;
|
}
|
||||||
margin: 0;
|
|
||||||
padding: 0.5em 0;
|
.menu>li {
|
||||||
width: 100%;
|
display: flex;
|
||||||
color: white;
|
justify-content: center;
|
||||||
background-color: #222;
|
margin: 0;
|
||||||
}
|
padding: 0.5em 0;
|
||||||
.menu > li:not(:last-child) {
|
width: 100%;
|
||||||
border-bottom: 1px solid #444;
|
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
|
* Highlight/Markup
|
||||||
*/
|
*/
|
||||||
::selection { background: var(--selection-background); color: var(--selection-text); }
|
::selection {
|
||||||
::-moz-selection { background: var(--selection-background); color: var(--selection-text); }
|
background: var(--selection-background);
|
||||||
|
color: var(--selection-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-moz-selection {
|
||||||
|
background: var(--selection-background);
|
||||||
|
color: var(--selection-text);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lists
|
* Lists
|
||||||
*/
|
*/
|
||||||
:not(.menu) > ul { list-style: none; }
|
:not(.menu)>ul {
|
||||||
:not(.menu) > ul { list-style-type: none; }
|
list-style: 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-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.menu)>ul>li:before {
|
||||||
|
content: "-";
|
||||||
|
margin-right: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-menu>ul>li:before {
|
||||||
|
content: "" !important;
|
||||||
|
margin-right: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Header/Navigation
|
* Header/Navigation
|
||||||
*/
|
*/
|
||||||
.menu {
|
.menu {
|
||||||
border-bottom: var(--border); margin-bottom: 20px;
|
border-bottom: var(--border);
|
||||||
|
margin-bottom: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding-bottom: 25px;
|
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
|
* Form
|
||||||
*/
|
*/
|
||||||
input, select, textarea { padding: 0; margin: 0; -webkit-appearance: none; -webkit-border-radius: 0; border: none; }
|
input,
|
||||||
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; }
|
select,
|
||||||
input, select, textarea, textarea::-webkit-input-placeholder { text-indent: 0px; }
|
textarea {
|
||||||
::placeholder { color: var(--placeholder-color); opacity: 1; }
|
padding: 0;
|
||||||
:-ms-input-placeholder { color: var(--placeholder-color); }
|
margin: 0;
|
||||||
::-ms-input-placeholder { color: var(--placeholder-color); }
|
-webkit-appearance: none;
|
||||||
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); }
|
-webkit-border-radius: 0;
|
||||||
input[type=submit]:hover { color: var(--background-color); background-color: var(--base-color); }
|
border: none;
|
||||||
*:focus { outline: none; }
|
}
|
||||||
textarea { vertical-align: top; }
|
|
||||||
|
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
|
* Homepage
|
||||||
*/
|
*/
|
||||||
.particles-wrapper {
|
.particles-wrapper {
|
||||||
background-color: #222;
|
background-color: #222;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flex-container {
|
.flex-container {
|
||||||
|
@ -321,67 +499,327 @@ section {
|
||||||
/**
|
/**
|
||||||
* Code and syntax highlighting
|
* Code and syntax highlighting
|
||||||
*/
|
*/
|
||||||
.lineno { color: var(--code-color-1); margin-right: 15px; }
|
.lineno {
|
||||||
figure.highlight { margin: 5px 0; }
|
color: var(--code-color-1);
|
||||||
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; }
|
margin-right: 15px;
|
||||||
.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 */
|
figure.highlight {
|
||||||
.highlight .k { color: var(--code-color-5); } /* Keyword */
|
margin: 5px 0;
|
||||||
.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 */
|
pre {
|
||||||
.highlight .cs { color: var(--code-color-5); font-style: italic } /* Comment.Special */
|
background-color: var(--background-color);
|
||||||
.highlight .gd { color: var(--code-color-7); } /* Generic.Deleted */
|
border: none;
|
||||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
padding: 0;
|
||||||
.highlight .gr { color: var(--code-color-7); } /* Generic.Error */
|
margin: 0;
|
||||||
.highlight .gh { color: var(--code-color-8); font-weight: bold } /* Generic.Heading */
|
overflow: auto;
|
||||||
.highlight .gi { color: var(--code-color-9); } /* Generic.Inserted */
|
font-size: $base-font-size;
|
||||||
.highlight .go { color: var(--code-color-10); } /* Generic.Output */
|
color: var(--text-color);
|
||||||
.highlight .gp { color: var(--code-color-11); } /* Generic.Prompt */
|
line-height: 1.7 !important;
|
||||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
font-family: $base-font-family !important;
|
||||||
.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 .hll {
|
||||||
.highlight .kd { color: var(--code-color-5); } /* Keyword.Declaration */
|
background-color: var(--code-color-2);
|
||||||
.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 .c {
|
||||||
.highlight .kt { color: var(--code-color-13); } /* Keyword.Type */
|
color: var(--code-color-1);
|
||||||
.highlight .m { color: var(--code-color-14); } /* Literal.Number */
|
font-style: italic
|
||||||
.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 */
|
/* Comment */
|
||||||
.highlight .nc { color: var(--code-color-9); text-decoration: underline } /* Name.Class */
|
.highlight .err {
|
||||||
.highlight .no { color: var(--code-color-7); } /* Name.Constant */
|
color: var(--code-color-3);
|
||||||
.highlight .nd { color: var(--code-color-10); } /* Name.Decorator */
|
background-color: var(--code-color-4);
|
||||||
.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 */
|
/* Error */
|
||||||
.highlight .nt { color: var(--code-color-16); font-weight: bold } /* Name.Tag */
|
.highlight .k {
|
||||||
.highlight .nv { color: var(--code-color-7); } /* Name.Variable */
|
color: var(--code-color-5);
|
||||||
.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 */
|
/* Keyword */
|
||||||
.highlight .mh { color: var(--code-color-14); } /* Literal.Number.Hex */
|
.highlight .cm {
|
||||||
.highlight .mi { color: var(--code-color-14); } /* Literal.Number.Integer */
|
color: var(--code-color-1);
|
||||||
.highlight .mo { color: var(--code-color-14); } /* Literal.Number.Oct */
|
font-style: italic
|
||||||
.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 */
|
/* Comment.Multiline */
|
||||||
.highlight .s2 { color: var(--code-color-15); } /* Literal.String.Double */
|
.highlight .cp {
|
||||||
.highlight .se { color: var(--code-color-15); } /* Literal.String.Escape */
|
color: var(--code-color-6);
|
||||||
.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 */
|
/* Comment.Preproc */
|
||||||
.highlight .sr { color: var(--code-color-14); } /* Literal.String.Regex */
|
.highlight .c1 {
|
||||||
.highlight .s1 { color: var(--code-color-15); } /* Literal.String.Single */
|
color: var(--code-color-1);
|
||||||
.highlight .ss { color: var(--code-color-5); } /* Literal.String.Symbol */
|
font-style: italic
|
||||||
.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 */
|
/* Comment.Single */
|
||||||
.highlight .vi { color: var(--code-color-7); } /* Name.Variable.Instance */
|
.highlight .cs {
|
||||||
.highlight .il { color: var(--code-color-14); } /* Literal.Number.Integer.Long */
|
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 {
|
.hide {
|
||||||
|
@ -393,19 +831,108 @@ pre { background-color: var(--background-color); border: none; padding: 0; ma
|
||||||
display: inline-block;
|
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) {
|
@media (max-width: 1020px) {
|
||||||
.flex-container-inner {
|
.flex-container-inner {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flex-container {
|
.flex-container {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hide {
|
.hide {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.show {
|
.show {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -415,9 +942,15 @@ pre { background-color: var(--background-color); border: none; padding: 0; ma
|
||||||
.companies {
|
.companies {
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.companies div {
|
.companies div {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 170px;
|
height: 170px;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.carousel-container {
|
||||||
|
padding-top: 50px;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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"
|
||||||
|
}
|
||||||
|
]
|
|
@ -8,3 +8,58 @@ collapsibleButton.addEventListener("click", function () {
|
||||||
menuContent.style.display = "block";
|
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);
|
||||||
|
}
|
Loading…
Reference in New Issue