|
|
| (6 intermediate revisions by the same user not shown) |
| Line 84: |
Line 84: |
|
| |
|
| == Explore by Topic == | | == Explore by Topic == |
| | {{Portal Box |
| | |title=Explore by Topic |
| | |subtitle=Browse cybersecurity topics, techniques, tools, and resources. |
|
| |
|
| <!-- ================================
| | |1={{CyberTopic |
| EXPLORE BY TOPIC - CYBERSECURITY
| | |icon=🌐 |
| MediaWiki carousel
| | |title=Network Security |
| ================================ -->
| | |description=Networks, firewalls, protocols, and defensive architecture. |
| | |link=Network Security |
| | }} |
|
| |
|
| <div class="cyber-topic-carousel">
| | |2={{CyberTopic |
| | |icon=🎯 |
| | |title=Threat Intelligence |
| | |description=Threat actors, indicators, campaigns, and intelligence analysis. |
| | |link=Threat Intelligence |
| | }} |
|
| |
|
| <div class="cyber-topic-header">
| | |3={{CyberTopic |
| <h2>Explore by Topic</h2>
| | |icon=🔎 |
| <p>Browse cybersecurity topics and resources.</p>
| | |title=Digital Forensics |
| </div>
| | |description=Evidence collection, investigations, and forensic analysis. |
| | |link=Digital Forensics |
| | }} |
|
| |
|
| <div class="cyber-topic-window">
| | |4={{CyberTopic |
| <div class="cyber-topic-track" id="cyberTopicTrack">
| | |icon=🚨 |
| | |title=Incident Response |
| | |description=Detection, containment, eradication, and recovery. |
| | |link=Incident Response |
| | }} |
|
| |
|
| <!-- CARD 1 -->
| | |5={{CyberTopic |
| <a class="cyber-topic-card" href="/wiki/Network_Security">
| | |icon=🦠 |
| <div class="cyber-topic-icon">🌐</div>
| | |title=Malware |
| <div class="cyber-topic-content">
| | |description=Viruses, ransomware, trojans, analysis, and prevention. |
| <h3>Network Security</h3>
| | |link=Malware |
| <p>Networks, firewalls, protocols, and defensive architecture.</p>
| | }} |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
|
| <!-- CARD 2 -->
| | |6={{CyberTopic |
| <a class="cyber-topic-card" href="/wiki/Threat_Intelligence">
| | |icon=💻 |
| <div class="cyber-topic-icon">🎯</div>
| | |title=Application Security |
| <div class="cyber-topic-content">
| | |description=Secure development, vulnerabilities, APIs, and web security. |
| <h3>Threat Intelligence</h3>
| | |link=Application Security |
| <p>Threat actors, indicators, campaigns, and intelligence analysis.</p>
| | }} |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
|
| <!-- CARD 3 -->
| | |7={{CyberTopic |
| <a class="cyber-topic-card" href="/wiki/Digital_Forensics">
| | |icon=🔐 |
| <div class="cyber-topic-icon">🔎</div>
| | |title=Identity & Access |
| <div class="cyber-topic-content">
| | |description=Authentication, authorization, credentials, and access control. |
| <h3>Digital Forensics</h3>
| | |link=Identity and Access Management |
| <p>Investigations, evidence collection, and forensic analysis.</p>
| | }} |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
|
| <!-- CARD 4 -->
| | |8={{CyberTopic |
| <a class="cyber-topic-card" href="/wiki/Incident_Response">
| | |icon=☁️ |
| <div class="cyber-topic-icon">🚨</div>
| | |title=Cloud Security |
| <div class="cyber-topic-content">
| | |description=Cloud infrastructure, workloads, containers, and security controls. |
| <h3>Incident Response</h3>
| | |link=Cloud Security |
| <p>Detection, containment, eradication, and recovery.</p>
| | }} |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
|
| <!-- CARD 5 -->
| |
| <a class="cyber-topic-card" href="/wiki/Malware">
| |
| <div class="cyber-topic-icon">🦠</div>
| |
| <div class="cyber-topic-content">
| |
| <h3>Malware</h3>
| |
| <p>Viruses, ransomware, trojans, analysis, and prevention.</p>
| |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
| <!-- CARD 6 -->
| |
| <a class="cyber-topic-card" href="/wiki/Application_Security">
| |
| <div class="cyber-topic-icon">💻</div>
| |
| <div class="cyber-topic-content">
| |
| <h3>Application Security</h3>
| |
| <p>Secure development, vulnerabilities, APIs, and web security.</p>
| |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
| <!-- CARD 7 -->
| |
| <a class="cyber-topic-card" href="/wiki/Identity_and_Access_Management">
| |
| <div class="cyber-topic-icon">🔐</div>
| |
| <div class="cyber-topic-content">
| |
| <h3>Identity & Access</h3>
| |
| <p>Authentication, authorization, credentials, and access control.</p>
| |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
| <!-- CARD 8 -->
| |
| <a class="cyber-topic-card" href="/wiki/Cloud_Security">
| |
| <div class="cyber-topic-icon">☁️</div>
| |
| <div class="cyber-topic-content">
| |
| <h3>Cloud Security</h3>
| |
| <p>Cloud infrastructure, workloads, containers, and security controls.</p>
| |
| </div>
| |
| <span class="cyber-topic-arrow">→</span>
| |
| </a>
| |
|
| |
| </div>
| |
| </div>
| |
|
| |
| <!-- CONTROLS -->
| |
| <div class="cyber-topic-controls">
| |
| <button id="cyberTopicPrev" aria-label="Previous topics">‹</button>
| |
|
| |
| <div class="cyber-topic-dots" id="cyberTopicDots"></div>
| |
|
| |
| <button id="cyberTopicNext" aria-label="Next topics">›</button>
| |
| </div>
| |
|
| |
| </div>
| |
|
| |
|
| |
| <style>
| |
|
| |
| /* ================================
| |
| MAIN CONTAINER
| |
| ================================ */
| |
|
| |
| .cyber-topic-carousel {
| |
| --cyber-bg: #07111f;
| |
| --cyber-card: #0c1b2d;
| |
| --cyber-card-hover: #10263d;
| |
| --cyber-border: #1b3852;
| |
| --cyber-accent: #28d7ff;
| |
| --cyber-accent-2: #6875ff;
| |
| --cyber-text: #f2f7fc;
| |
| --cyber-muted: #91a6ba;
| |
|
| |
| max-width: 1200px;
| |
| margin: 30px auto;
| |
| padding: 28px;
| |
| border-radius: 18px;
| |
| background:
| |
| radial-gradient(
| |
| circle at 10% 0%,
| |
| rgba(40, 215, 255, 0.08),
| |
| transparent 35%
| |
| ),
| |
| radial-gradient(
| |
| circle at 90% 100%,
| |
| rgba(104, 117, 255, 0.08),
| |
| transparent 35%
| |
| ),
| |
| var(--cyber-bg);
| |
|
| |
| color: var(--cyber-text);
| |
| box-sizing: border-box;
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| HEADER
| |
| ================================ */
| |
|
| |
| .cyber-topic-header {
| |
| margin-bottom: 22px;
| |
| }
| |
|
| |
| .cyber-topic-header h2 {
| |
| margin: 0 0 6px;
| |
| font-size: 30px;
| |
| font-weight: 700;
| |
| letter-spacing: -0.5px;
| |
| }
| |
|
| |
| .cyber-topic-header h2::before {
| |
| content: "";
| |
| display: inline-block;
| |
| width: 5px;
| |
| height: 27px;
| |
| margin-right: 10px;
| |
| vertical-align: -3px;
| |
| border-radius: 4px;
| |
| background: var(--cyber-accent);
| |
| box-shadow: 0 0 12px rgba(40, 215, 255, 0.7);
| |
| }
| |
|
| |
| .cyber-topic-header p {
| |
| margin: 0 0 0 15px;
| |
| color: var(--cyber-muted);
| |
| font-size: 14px;
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| SLIDING WINDOW
| |
| ================================ */
| |
|
| |
| .cyber-topic-window {
| |
| width: 100%;
| |
| overflow: hidden;
| |
| position: relative;
| |
| }
| |
|
| |
| .cyber-topic-track {
| |
| display: flex;
| |
| gap: 16px;
| |
| transition: transform 0.55s cubic-bezier(.22,.61,.36,1);
| |
| will-change: transform;
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| TOPIC CARD
| |
| ================================ */
| |
|
| |
| .cyber-topic-card {
| |
| position: relative;
| |
|
| |
| flex: 0 0 calc((100% - 32px) / 3);
| |
|
| |
| min-height: 170px;
| |
| padding: 24px;
| |
| box-sizing: border-box;
| |
|
| |
| display: flex;
| |
| flex-direction: column;
| |
|
| |
| text-decoration: none !important;
| |
| color: var(--cyber-text) !important;
| |
|
| |
| border: 1px solid var(--cyber-border);
| |
| border-radius: 14px;
| |
|
| |
| background:
| |
| linear-gradient(
| |
| 145deg,
| |
| rgba(255,255,255,0.035),
| |
| rgba(255,255,255,0.01)
| |
| ),
| |
| var(--cyber-card);
| |
|
| |
| transition:
| |
| transform 0.25s ease,
| |
| border-color 0.25s ease,
| |
| background 0.25s ease,
| |
| box-shadow 0.25s ease;
| |
|
| |
| overflow: hidden;
| |
| }
| |
|
| |
|
| |
| /* glowing corner */
| |
|
| |
| .cyber-topic-card::after {
| |
| content: "";
| |
| position: absolute;
| |
| width: 100px;
| |
| height: 100px;
| |
| right: -50px;
| |
| bottom: -50px;
| |
|
| |
| background: var(--cyber-accent);
| |
| opacity: 0.04;
| |
| border-radius: 50%;
| |
| transition: opacity 0.25s ease;
| |
| }
| |
|
| |
|
| |
| .cyber-topic-card:hover {
| |
| transform: translateY(-5px);
| |
| border-color: rgba(40, 215, 255, 0.55);
| |
|
| |
| background:
| |
| linear-gradient(
| |
| 145deg,
| |
| rgba(40, 215, 255, 0.07),
| |
| rgba(104, 117, 255, 0.04)
| |
| ),
| |
| var(--cyber-card-hover);
| |
|
| |
| box-shadow:
| |
| 0 10px 35px rgba(0,0,0,0.25),
| |
| 0 0 25px rgba(40, 215, 255, 0.07);
| |
| }
| |
|
| |
| .cyber-topic-card:hover::after {
| |
| opacity: 0.12;
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| ICON
| |
| ================================ */
| |
|
| |
| .cyber-topic-icon {
| |
| width: 48px;
| |
| height: 48px;
| |
|
| |
| display: flex;
| |
| align-items: center;
| |
| justify-content: center;
| |
|
| |
| margin-bottom: 18px;
| |
|
| |
| border-radius: 12px;
| |
|
| |
| background: rgba(40, 215, 255, 0.08);
| |
| border: 1px solid rgba(40, 215, 255, 0.16);
| |
|
| |
| font-size: 24px;
| |
|
| |
| box-shadow:
| |
| inset 0 0 20px rgba(40, 215, 255, 0.025);
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| TEXT
| |
| ================================ */
| |
|
| |
| .cyber-topic-content {
| |
| flex: 1;
| |
| }
| |
|
| |
| .cyber-topic-content h3 {
| |
| margin: 0 0 8px;
| |
|
| |
| font-size: 18px;
| |
| line-height: 1.2;
| |
| font-weight: 650;
| |
|
| |
| color: var(--cyber-text);
| |
| }
| |
|
| |
| .cyber-topic-content p {
| |
| margin: 0;
| |
|
| |
| color: var(--cyber-muted);
| |
|
| |
| font-size: 13px;
| |
| line-height: 1.5;
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| ARROW ON CARD
| |
| ================================ */
| |
|
| |
| .cyber-topic-arrow {
| |
| position: absolute;
| |
|
| |
| right: 20px;
| |
| bottom: 18px;
| |
|
| |
| color: var(--cyber-accent);
| |
|
| |
| font-size: 20px;
| |
|
| |
| opacity: 0.45;
| |
|
| |
| transition:
| |
| opacity 0.25s ease,
| |
| transform 0.25s ease;
| |
| }
| |
|
| |
| .cyber-topic-card:hover .cyber-topic-arrow {
| |
| opacity: 1;
| |
| transform: translateX(4px);
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| CONTROLS
| |
| ================================ */
| |
|
| |
| .cyber-topic-controls {
| |
| display: flex;
| |
| align-items: center;
| |
| justify-content: center;
| |
|
| |
| gap: 18px;
| |
|
| |
| margin-top: 22px;
| |
| }
| |
|
| |
| .cyber-topic-controls button {
| |
| width: 38px;
| |
| height: 38px;
| |
|
| |
| padding: 0;
| |
|
| |
| border: 1px solid var(--cyber-border);
| |
| border-radius: 50%;
| |
|
| |
| background: var(--cyber-card);
| |
| color: var(--cyber-text);
| |
|
| |
| font-size: 25px;
| |
| line-height: 1;
| |
|
| |
| cursor: pointer;
| |
|
| |
| transition:
| |
| background 0.2s ease,
| |
| border-color 0.2s ease,
| |
| color 0.2s ease;
| |
| }
| |
|
| |
| .cyber-topic-controls button:hover {
| |
| background: rgba(40, 215, 255, 0.1);
| |
| border-color: var(--cyber-accent);
| |
| color: var(--cyber-accent);
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| DOTS
| |
| ================================ */
| |
|
| |
| .cyber-topic-dots {
| |
| display: flex;
| |
| align-items: center;
| |
| gap: 7px;
| |
| }
| |
|
| |
| .cyber-topic-dot {
| |
| width: 7px;
| |
| height: 7px;
| |
|
| |
| border-radius: 50%;
| |
|
| |
| background: #30465a;
| |
|
| |
| cursor: pointer;
| |
|
| |
| transition:
| |
| width 0.25s ease,
| |
| background 0.25s ease;
| |
| }
| |
|
| |
| .cyber-topic-dot.active {
| |
| width: 22px;
| |
| border-radius: 5px;
| |
| background: var(--cyber-accent);
| |
|
| |
| box-shadow: 0 0 8px rgba(40, 215, 255, 0.5);
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| TABLET
| |
| ================================ */
| |
|
| |
| @media (max-width: 900px) {
| |
|
| |
| .cyber-topic-card {
| |
| flex-basis: calc((100% - 16px) / 2);
| |
| }
| |
|
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| MOBILE
| |
| ================================ */
| |
|
| |
| @media (max-width: 600px) {
| |
|
| |
| .cyber-topic-carousel {
| |
| padding: 20px 16px;
| |
| border-radius: 12px;
| |
| }
| |
|
| |
| .cyber-topic-header h2 {
| |
| font-size: 24px;
| |
| }
| |
|
| |
| .cyber-topic-card {
| |
| flex-basis: 100%;
| |
| min-height: 155px;
| |
| }
| |
|
| |
| }
| |
|
| |
|
| |
| /* ================================
| |
| REDUCE MOTION
| |
| ================================ */
| |
|
| |
| @media (prefers-reduced-motion: reduce) {
| |
|
| |
| .cyber-topic-track {
| |
| transition: none;
| |
| }
| |
|
| |
| .cyber-topic-card {
| |
| transition: none;
| |
| }
| |
|
| |
| }
| |
|
| |
| </style>
| |
|
| |
|
| |
| <script>
| |
|
| |
| (function () {
| |
|
| |
| const track = document.getElementById("cyberTopicTrack");
| |
| const next = document.getElementById("cyberTopicNext");
| |
| const prev = document.getElementById("cyberTopicPrev");
| |
| const dotsContainer = document.getElementById("cyberTopicDots");
| |
|
| |
| if (!track || !next || !prev || !dotsContainer) {
| |
| return;
| |
| }
| |
|
| |
| const cards = Array.from(
| |
| track.querySelectorAll(".cyber-topic-card")
| |
| );
| |
|
| |
| let current = 0;
| |
| let autoPlay;
| |
| let cardsVisible = getCardsVisible();
| |
|
| |
| function getCardsVisible() {
| |
|
| |
| if (window.innerWidth <= 600) {
| |
| return 1;
| |
| }
| |
|
| |
| if (window.innerWidth <= 900) {
| |
| return 2;
| |
| }
| |
|
| |
| return 3;
| |
| }
| |
|
| |
|
| |
| function getMaxIndex() {
| |
|
| |
| cardsVisible = getCardsVisible();
| |
|
| |
| return Math.max(
| |
| 0,
| |
| cards.length - cardsVisible
| |
| );
| |
| }
| |
|
| |
|
| |
| function getCardWidth() {
| |
|
| |
| if (!cards.length) {
| |
| return 0;
| |
| }
| |
|
| |
| const style = window.getComputedStyle(track);
| |
|
| |
| const gap = parseFloat(style.gap) || 0;
| |
|
| |
| return cards[0].offsetWidth + gap;
| |
| }
| |
|
| |
|
| |
| function createDots() {
| |
|
| |
| dotsContainer.innerHTML = "";
| |
|
| |
| const maxIndex = getMaxIndex();
| |
|
| |
| for (let i = 0; i <= maxIndex; i++) {
| |
|
| |
| const dot = document.createElement("span");
| |
|
| |
| dot.className = "cyber-topic-dot";
| |
|
| |
| dot.setAttribute(
| |
| "aria-label",
| |
| "Go to topic slide " + (i + 1)
| |
| );
| |
|
| |
| dot.addEventListener("click", function () {
| |
|
| |
| current = i;
| |
|
| |
| update();
| |
|
| |
| restartAutoPlay();
| |
|
| |
| });
| |
|
| |
| dotsContainer.appendChild(dot);
| |
| }
| |
|
| |
| }
| |
|
| |
|
| |
| function update() {
| |
|
| |
| const maxIndex = getMaxIndex();
| |
|
| |
| if (current > maxIndex) {
| |
| current = 0;
| |
| }
| |
|
| |
| if (current < 0) {
| |
| current = maxIndex;
| |
| }
| |
|
| |
| const distance =
| |
| current * getCardWidth();
| |
|
| |
| track.style.transform =
| |
| "translateX(-" + distance + "px)";
| |
|
| |
|
| |
| const dots =
| |
| dotsContainer.querySelectorAll(".cyber-topic-dot");
| |
|
| |
| dots.forEach(function (dot, index) {
| |
|
| |
| dot.classList.toggle(
| |
| "active",
| |
| index === current
| |
| );
| |
|
| |
| });
| |
|
| |
| }
| |
|
| |
|
| |
| function goNext() {
| |
|
| |
| const maxIndex = getMaxIndex();
| |
|
| |
| if (current >= maxIndex) {
| |
| current = 0;
| |
| } else {
| |
| current++;
| |
| }
| |
|
| |
| update();
| |
|
| |
| }
| |
|
| |
|
| |
| function goPrevious() {
| |
|
| |
| const maxIndex = getMaxIndex();
| |
|
| |
| if (current <= 0) {
| |
| current = maxIndex;
| |
| } else {
| |
| current--;
| |
| }
| |
|
| |
| update();
| |
|
| |
| }
| |
|
| |
|
| |
| function startAutoPlay() {
| |
|
| |
| stopAutoPlay();
| |
|
| |
| autoPlay = setInterval(function () {
| |
|
| |
| goNext();
| |
|
| |
| }, 4500);
| |
|
| |
| }
| |
|
| |
|
| |
| function stopAutoPlay() {
| |
|
| |
| if (autoPlay) {
| |
| clearInterval(autoPlay);
| |
| }
| |
|
| |
| }
| |
|
| |
|
| |
| function restartAutoPlay() {
| |
|
| |
| startAutoPlay();
| |
|
| |
| }
| |
|
| |
|
| |
| next.addEventListener("click", function () {
| |
|
| |
| goNext();
| |
|
| |
| restartAutoPlay();
| |
|
| |
| });
| |
|
| |
|
| |
| prev.addEventListener("click", function () {
| |
|
| |
| goPrevious();
| |
|
| |
| restartAutoPlay();
| |
|
| |
| });
| |
|
| |
|
| |
| /* Pause while mouse is over carousel */
| |
|
| |
| const carousel =
| |
| document.querySelector(".cyber-topic-carousel");
| |
|
| |
| carousel.addEventListener(
| |
| "mouseenter",
| |
| stopAutoPlay
| |
| );
| |
|
| |
| carousel.addEventListener(
| |
| "mouseleave",
| |
| startAutoPlay
| |
| );
| |
|
| |
|
| |
| /* Recalculate when browser is resized */
| |
|
| |
| window.addEventListener("resize", function () {
| |
|
| |
| createDots();
| |
| update();
| |
|
| |
| });
| |
|
| |
|
| |
| /* Initial setup */
| |
|
| |
| createDots();
| |
| update();
| |
| startAutoPlay();
| |
|
| |
| })();
| |
|
| |
| </script>
| |
|
| |
| == Program Engagement ==
| |
|
| |
| {| style="width:100%; table-layout:fixed;"
| |
| |-
| |
| | style="width=50%; vertical-align:top;" |
| |
| {{Portal box
| |
| | title = Sharing and Technology Transfer
| |
| | content =
| |
| <u>Monthly Member Webcasts:</u>
| |
|
| |
| Open to all EPRI members. Peer-to-peer exchange, industry insights, and emerging trends. Contact Jeremy Lawrence for an invite.
| |
|
| |
| <u>Workshops & Advisory Meetings:</u>
| |
|
| |
| 3 Meetings per year focused on peer exchange and communicating results + needs.
| |
| }}
| |
| | style="width=50%; vertical-align:top; height:1px;" |
| |
| {{Portal box
| |
| | title = Technology Application
| |
| | content =
| |
| * Security Field Testing (Inverters + XPOSE)
| |
| * Risk Estimation and Quantification (CREST)
| |
| *Advanced Detection Through Hardware (HASE) and Digital Twins (CyPhy)
| |
| }}
| |
| |-
| |
| | style="width=50%; vertical-align:top; height:1px;" |
| |
| {{Portal box
| |
| | title = Impactful Content
| |
| | content =
| |
| * Cyber Risk Estimation (Technoeconomic) Tool and Risk Profiles: [https://www.epri.com/research/programs/112046/results/3002029820 3002029820]
| |
| * Defensible Architectures (Remote access, Virtualization, Cloud, Conventional): [https://www.epri.com/research/programs/112046/results/3002032583 3002032583]
| |
| *IT/OT Cyber Security Workforce and Organization Benchmarking: [https://www.epri.com/research/programs/112046/results/3002032597 3002032597]
| |
| }}
| |
| | style="width=50%; vertical-align:top; height:1px;" |
| |
| {{Portal box
| |
| | title = Featured Paper/Person
| |
| | content =
| |
| SOON TBD
| |
| }} | | }} |
| |}
| |
|
| |
|
| == Meet the Team == | | == Meet the Team == |