7 Commits
main ... Lab_2

Author SHA1 Message Date
9d2070e97e lab_2 2025-09-25 00:22:42 +04:00
42c03b50d8 finish 2025-08-26 14:18:02 +04:00
000d7a9f67 Lab2 2025-05-24 12:17:22 +04:00
8b911b537a Lab2 2025-05-24 11:20:31 +04:00
a96c3a9400 Lab2 2025-05-24 10:54:40 +04:00
bf17f58884 ok 2025-05-21 12:54:40 +04:00
681580cd60 start 2025-05-21 12:41:46 +04:00
41 changed files with 9590 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

310
index.css Normal file
View File

@@ -0,0 +1,310 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: 'Orbitron', sans-serif;
background-color: #0d0d0d;
color: #ddd;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
background: #000000;
padding: 1rem 2rem;
border-bottom: 2px solid #ff00ff;
position: sticky;
top: 0;
z-index: 2000;
}
.logo {
font-size: 1.6rem;
color: #00ffff;
user-select: none;
}
.nav-toggle {
display: none;
}
.burger-menu {
display: none;
flex-direction: column;
gap: 6px;
cursor: pointer;
position: fixed;
top: 18px;
right: 20px;
z-index: 2100;
}
.burger-menu span {
width: 28px;
height: 3px;
background: #ff00ff;
border-radius: 2px;
box-shadow: 0 0 8px #ff00ff;
transition: 0.3s;
}
.navbar {
display: flex;
}
.nav-links {
list-style: none;
display: flex;
gap: 2rem;
margin: 0;
padding: 0;
}
.nav-links li a {
color: #ff00ff;
text-decoration: none;
font-weight: 600;
transition: color 0.3s ease;
user-select: none;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #00ffff;
text-shadow: none;
}
.page {
padding: 4rem 2rem;
border-bottom: 1px solid #222;
}
.page h1,
.page h2 {
color: #ff00ff;
text-shadow: none;
}
.page p {
max-width: 800px;
line-height: 1.6;
color: #aaa;
}
.footer {
background: #111;
border-top: 3px solid #00ffff;
padding: 2rem 1rem;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
color: #00ffff;
text-shadow: none;
}
.footer-info p {
margin: 0.4rem 0;
font-weight: 600;
}
.social-icons {
margin-top: 1rem;
display: flex;
gap: 1.5rem;
}
.social-icons a i {
color: #ff00ff;
transition: color 0.3s ease;
}
@media (max-width: 768px) {
.nav-links {
position: fixed;
top: 60px;
right: 0;
background: #111;
width: 100%;
max-height: 0;
overflow: hidden;
flex-direction: column;
padding: 0 2rem;
transition: max-height 0.35s ease;
box-shadow: 0 10px 30px #ff00ffaa;
border-bottom: 2px solid #ff00ff;
z-index: 2000;
user-select: none;
border-radius: 0 0 10px 10px;
}
.nav-toggle:checked ~ .navbar .nav-links {
max-height: 300px;
}
.burger-menu {
display: flex;
}
.nav-links li a {
color: #ff66ff;
padding: 1rem 0;
border-bottom: 1px solid #ff00ff33;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #33ffff;
text-shadow: none;
}
}
.streams-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.stream-item {
background: #111;
border: 2px solid #ff00ff;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 0 12px #ff00ff88;
transition: box-shadow 0.3s ease;
user-select: none;
}
.stream-item:hover {
box-shadow: 0 0 20px #00ffffdd;
border-color: #00ffff;
}
.stream-item img {
width: 100%;
border-radius: 8px;
margin-bottom: 1rem;
box-shadow: 0 0 8px #ff00ffaa;
}
.stream-item h3 {
margin: 0 0 0.5rem;
color: #ff00ff;
text-shadow: none;
}
.stream-item p {
color: #aaa;
font-size: 0.95rem;
margin-bottom: 1rem;
}
.stream-item button {
background-color: #ff00ff;
border: none;
padding: 0.5rem 1.2rem;
color: #111;
font-weight: 700;
border-radius: 6px;
cursor: pointer;
box-shadow: 0 0 10px #ff00ff;
transition: background-color 0.3s ease;
}
.stream-item button:hover {
background-color: #00ffff;
box-shadow: 0 0 14px #00ffff;
color: #000;
}
.page {
max-width: 1200px;
margin: 20px auto;
padding: 0 15px;
color: #fff;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
margin-top: 30px;
}
.feature-item {
background: #111;
border: 2px solid #ff00ff;
border-radius: 8px;
padding: 20px;
box-shadow: 0 0 8px #ff00ff;
transition: box-shadow 0.3s ease;
}
.feature-item:hover {
box-shadow: 0 0 15px #ff00ff, 0 0 25px #00fff7;
}
.feature-item h3 {
margin-top: 0;
margin-bottom: 10px;
font-weight: 700;
color: #ff00ff;
text-shadow: none;
}
.feature-item p {
margin-bottom: 15px;
color: #ccc;
}
.feature-item button {
background: #ff00ff;
border: none;
border-radius: 4px;
padding: 10px 18px;
color: #111;
font-weight: 600;
cursor: pointer;
box-shadow: 0 0 10px #ff00ff;
transition: background-color 0.3s ease;
}
.feature-item button:hover {
background: #ff00ff;
box-shadow: 0 0 15px #ff00ff;
}
.feature-item {
background: #111;
border: 2px solid #ff00ff;
border-radius: 8px;
padding: 20px;
box-shadow: 0 0 8px #ff00ff;
transition: box-shadow 0.3s ease;
display: flex;
flex-direction: column;
height: 100%;
}
.feature-item h3 {
margin-top: 0;
margin-bottom: 10px;
font-weight: 700;
color: #ff00ff;
text-shadow: none;
}
.feature-item p {
margin-bottom: 15px;
color: #ccc;
flex-grow: 1;
}
.feature-item button {
background: #ff00ff;
border: none;
border-radius: 4px;
padding: 10px 18px;
color: #111;
font-weight: 600;
cursor: pointer;
box-shadow: 0 0 10px #ff00ff;
transition: all 0.3s ease;
width: 100%;
margin-top: auto;
text-align: center;
min-height: 42px;
}
.feature-item button:hover {
background: #00ffff;
box-shadow: 0 0 15px #00ffff;
color: #000;
}

71
index.html Normal file
View File

@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Главная | StreamCore</title>
<link rel="stylesheet" href="index.css" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Roboto&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<div class="logo">🎮 StreamCore</div>
<input type="checkbox" id="nav-toggle" class="nav-toggle" />
<label for="nav-toggle" class="burger-menu" aria-label="Меню">
<span></span>
<span></span>
<span></span>
</label>
<nav class="navbar">
<ul class="nav-links">
<li><a href="index.html" aria-current="page">Главная</a></li>
<li><a href="page2.html">Каталог</a></li>
<li><a href="page3.html">Трансляции</a></li>
<li><a href="page4.html">Профиль</a></li>
<li><a href="page5.html">О нас</a></li>
</ul>
</nav>
</header>
<main class="page">
<h1>Добро пожаловать в StreamCore</h1>
<p>Твой портал в мир киберспорта, электронной музыки и цифрового искусства. Следи за новыми трансляциями, знакомься с артистами и участвуй в событиях!</p>
<section class="features-grid">
<article class="feature-item">
<h3>Киберспорт</h3>
<p>Самые масштабные турниры и захватывающие матчи в прямом эфире.</p>
<button onclick="location.href='streams.html'">Смотреть трансляции</button>
</article>
<article class="feature-item">
<h3>Электронная музыка</h3>
<p>Эксклюзивные лайв-сеты от лучших диджеев и музыкантов.</p>
<button onclick="location.href='catalog.html#music'">Открыть каталог</button>
</article>
<article class="feature-item">
<h3>Цифровое искусство</h3>
<p>Выставки, NFT-галереи и творческие проекты от художников.</p>
<button onclick="location.href='catalog.html#art'">Посмотреть работы</button>
</article>
</section>
</main>
<footer class="footer">
<div class="footer-info">
<p>Контакты: info@streamcore.com | +7 (999) 123-45-67</p>
<p>Часы работы: Пн–Вс, 10:0022:00</p>
<p>Адрес: Неон-сити, ул. Цифровая, д.42</p>
</div>
<div class="footer-section">
<div class="social-icons">
<a href="#" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
<a href="#" aria-label="ВКонтакте"><i class="fab fa-vk"></i></a>
<a href="#" aria-label="Telegram"><i class="fab fa-telegram-plane"></i></a>
</div>
</div>
</footer>
</body>
</html>

293
page2.css Normal file
View File

@@ -0,0 +1,293 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: 'Orbitron', sans-serif;
background-color: #0d0d0d;
color: #ddd;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
background: #000000;
padding: 1rem 2rem;
border-bottom: 2px solid #ff00ff;
position: sticky;
top: 0;
z-index: 2000;
}
.logo {
font-size: 1.6rem;
color: #00ffff;
user-select: none;
}
.nav-toggle {
display: none;
}
.burger-menu {
display: none;
flex-direction: column;
gap: 6px;
cursor: pointer;
position: fixed;
top: 18px;
right: 20px;
z-index: 2100;
}
.burger-menu span {
width: 28px;
height: 3px;
background: #ff00ff;
border-radius: 2px;
box-shadow: 0 0 8px #ff00ff;
transition: 0.3s;
}
.navbar {
display: flex;
}
.nav-links {
list-style: none;
display: flex;
gap: 2rem;
margin: 0;
padding: 0;
}
.nav-links li a {
color: #ff00ff;
text-decoration: none;
font-weight: 600;
transition: color 0.3s ease;
user-select: none;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #00ffff;
text-shadow: none;
}
.page {
padding: 4rem 2rem;
border-bottom: 1px solid #222;
}
.page h1,
.page h2 {
color: #ff00ff;
text-shadow: none;
}
.page p {
max-width: 800px;
line-height: 1.6;
color: #aaa;
}
.footer {
background: #111;
border-top: 3px solid #00ffff;
padding: 2rem 1rem;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
color: #00ffff;
text-shadow: none;
}
.footer-info p {
margin: 0.4rem 0;
font-weight: 600;
}
.social-icons {
margin-top: 1rem;
display: flex;
gap: 1.5rem;
}
.social-icons a i {
color: #ff00ff;
transition: color 0.3s ease;
}
@media (max-width: 768px) {
.nav-links {
position: fixed;
top: 60px;
right: 0;
background: #111;
width: 100%;
max-height: 0;
overflow: hidden;
flex-direction: column;
padding: 0 2rem;
transition: max-height 0.35s ease;
box-shadow: 0 10px 30px #ff00ffaa;
border-bottom: 2px solid #ff00ff;
z-index: 2000;
user-select: none;
border-radius: 0 0 10px 10px;
}
.nav-toggle:checked ~ .navbar .nav-links {
max-height: 300px;
}
.burger-menu {
display: flex;
}
.nav-links li a {
color: #ff66ff;
padding: 1rem 0;
border-bottom: 1px solid #ff00ff33;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #33ffff;
text-shadow: none;
}
}
catalog-grid {
display: grid;
grid-template-columns: repeat(auto-fit,minmax(280px,1fr));
gap: 2rem;
margin-top: 2rem;
}
.catalog-item {
background: #111;
border: 2px solid #ff00ff;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 0 12px #ff00ff88;
transition: box-shadow 0.3s ease;
user-select: none;
}
.catalog-item:hover {
box-shadow: 0 0 20px #00ffffdd;
border-color: #00ffff;
}
.catalog-item img {
width: 100%;
border-radius: 8px;
margin-bottom: 1rem;
box-shadow: 0 0 8px #ff00ffaa;
}
.catalog-item h3 {
margin: 0 0 0.5rem;
color: #ff00ff;
text-shadow: none;
}
.catalog-item p {
color: #aaa;
font-size: 0.95rem;
margin-bottom: 1rem;
}
.catalog-item button {
background-color: #ff00ff;
border: none;
padding: 0.5rem 1.2rem;
color: #111;
font-weight: 700;
border-radius: 6px;
cursor: pointer;
box-shadow: none;
transition: background-color 0.3s ease;
}
.catalog-item button:hover {
background-color: #00ffff;
box-shadow: none;
color: #000;
}
.catalog-grid {
display: flex;
flex-direction: column;
gap: 20px;
width: 100%;
}
.catalog-item {
width: 100%;
background: #111;
border: 2px solid #ff00ff;
border-radius: 10px;
padding: 20px;
box-shadow: 0 0 12px #ff00ff88;
display: flex;
align-items: center;
gap: 20px;
position: relative;
}
.catalog-item img {
width: 200px;
height: 120px;
object-fit: cover;
border-radius: 5px;
flex-shrink: 0;
}
.catalog-item-content {
flex-grow: 1;
padding-right: 140px;
}
.catalog-item button {
position: absolute;
right: 20px;
bottom: 20px;
background-color: #ff00ff;
border: none;
padding: 12px 30px;
color: #111;
font-weight: 600;
font-size: 1.1em;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
min-width: 120px;
text-align: center;
box-shadow: 0 0 10px rgba(255, 0, 255, 0.5);
}
.catalog-item button:hover {
background-color: #00ffff;
transform: scale(1.05);
box-shadow: 0 0 15px rgba(0, 255, 255, 0.7);
}
/* Для мобильных устройств */
@media (max-width: 600px) {
.catalog-item {
flex-direction: column;
align-items: flex-start;
padding-bottom: 70px;
}
.catalog-item img {
width: 100%;
height: 150px;
}
.catalog-item-content {
padding-right: 0;
}
.catalog-item button {
right: 20px;
bottom: 20px;
left: 20px;
width: auto;
padding: 14px 30px;
font-size: 1.2em;
}
}

84
page2.html Normal file
View File

@@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Каталог | StreamCore</title>
<link rel="stylesheet" href="page2.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Roboto&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<div class="logo">🎮 StreamCore</div>
<input type="checkbox" id="nav-toggle" class="nav-toggle" />
<label for="nav-toggle" class="burger-menu" aria-label="Меню">
<span></span>
<span></span>
<span></span>
</label>
<nav class="navbar">
<ul class="nav-links">
<li><a href="index.html" aria-current="page">Главная</a></li>
<li><a href="page2.html">Каталог</a></li>
<li><a href="page3.html">Трансляции</a></li>
<li><a href="page4.html">Профиль</a></li>
<li><a href="page5.html">О нас</a></li>
</ul>
</nav>
</header>
<main class="page">
<h1>Каталог стримов и событий</h1>
<p>Выбирай из нашего ассортимента уникальных стримов, концертов и кибермероприятий.</p>
<section class="catalog-grid">
<article class="catalog-item">
<img src="https://media.istockphoto.com/id/1405987908/ru/%D1%84%D0%BE%D1%82%D0%BE/%D0%BC%D0%B5%D1%82%D0%B0%D0%B2%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F-%D0%B3%D0%BE%D1%80%D0%BE%D0%B4-%D0%B2-%D1%81%D1%82%D0%B8%D0%BB%D0%B5-%D0%BA%D0%B8%D0%B1%D0%B5%D1%80%D0%BF%D0%B0%D0%BD%D0%BA-%D1%81-%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B0%D0%BC%D0%B8-%D0%B8%D0%B4%D1%83%D1%89%D0%B8%D0%BC%D0%B8-%D0%BF%D0%BE-%D1%83%D0%BB%D0%B8%D1%86%D0%B5-%D0%BD%D0%B5%D0%BE%D0%BD%D0%BE%D0%B2%D1%8B%D0%BC-%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC-%D0%BD%D0%B0.jpg?s=612x612&w=0&k=20&c=tuEtPHXniGEmoaJfKy4KHXtUgetTCJpkAEd_rfftuWU=" alt="Стрим 1" />
<h3>Neon Beats Live</h3>
<p>Погружение в атмосферу неоновых ритмов с лучшими диджеями.</p>
<button>Узнать подробнее</button>
</article>
<article class="catalog-item">
<img src="https://bogatyr.club/uploads/posts/2023-03/12827/thumbs/1677966670_bogatyr-club-p-kiberpank-komnata-foni-instagram-8.jpg" alt="Концерт 2" />
<h3>Cyberpunk Festival</h3>
<p>Грандиозный фестиваль с музыкой и цифровыми шоу.</p>
<button>Узнать подробнее</button>
</article>
<article class="catalog-item">
<img src="https://kartinki.pics/uploads/posts/2021-07/thumbs/1625655487_35-kartinkin-com-p-kiberpank-oboi-krasivie-38.jpg" alt="Стрим 3" />
<h3>VR Rave Party</h3>
<p>Погрузись в виртуальную реальность с нашими эксклюзивными стримами.</p>
<button>Узнать подробнее</button>
</article>
<article class="catalog-item">
<img src="https://kartinki.pics/pics/uploads/posts/2022-08/1660474027_1-kartinkin-net-p-kiberpank-oboi-krasivo-1.jpg" alt="Концерт 4" />
<h3>Hologram Show</h3>
<p>Уникальное цифровое шоу с голографическими эффектами.</p>
<button>Узнать подробнее</button>
</article>
</section>
</main>
<footer class="footer">
<div class="footer-info">
<p>Контакты: info@streamcore.com | +7 (999) 123-45-67</p>
<p>Часы работы: Пн–Вс, 10:0022:00</p>
<p>Адрес: Неон-сити, ул. Цифровая, д.42</p>
</div>
<div class="footer-section">
<div class="social-icons">
<a href="#" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
<a href="#" aria-label="ВКонтакте"><i class="fab fa-vk"></i></a>
<a href="#" aria-label="Telegram"><i class="fab fa-telegram-plane"></i></a>
</div>
</div>
</footer>
</body>
</html>

212
page3.css Normal file
View File

@@ -0,0 +1,212 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: 'Orbitron', sans-serif;
background-color: #0d0d0d;
color: #ddd;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
background: #000000;
padding: 1rem 2rem;
border-bottom: 2px solid #ff00ff;
position: sticky;
top: 0;
z-index: 2000;
}
.logo {
font-size: 1.6rem;
color: #00ffff;
user-select: none;
}
.nav-toggle {
display: none;
}
.burger-menu {
display: none;
flex-direction: column;
gap: 6px;
cursor: pointer;
position: fixed;
top: 18px;
right: 20px;
z-index: 2100;
}
.burger-menu span {
width: 28px;
height: 3px;
background: #ff00ff;
border-radius: 2px;
box-shadow: 0 0 8px #ff00ff;
transition: 0.3s;
}
.navbar {
display: flex;
}
.nav-links {
list-style: none;
display: flex;
gap: 2rem;
margin: 0;
padding: 0;
}
.nav-links li a {
color: #ff00ff;
text-decoration: none;
font-weight: 600;
transition: color 0.3s ease;
user-select: none;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #00ffff;
text-shadow: none;
}
.page {
padding: 4rem 2rem;
border-bottom: 1px solid #222;
}
.page h1,
.page h2 {
color: #ff00ff;
text-shadow: none;
}
.page p {
max-width: 800px;
line-height: 1.6;
color: #aaa;
}
.footer {
background: #111;
border-top: 3px solid #00ffff;
padding: 2rem 1rem;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
color: #00ffff;
text-shadow: none;
}
.footer-info p {
margin: 0.4rem 0;
font-weight: 600;
}
.social-icons {
margin-top: 1rem;
display: flex;
gap: 1.5rem;
}
.social-icons a i {
color: #ff00ff;
transition: color 0.3s ease;
}
@media (max-width: 768px) {
.nav-links {
position: fixed;
top: 60px;
right: 0;
background: #111;
width: 100%;
max-height: 0;
overflow: hidden;
flex-direction: column;
padding: 0 2rem;
transition: max-height 0.35s ease;
box-shadow: 0 10px 30px #ff00ffaa;
border-bottom: 2px solid #ff00ff;
z-index: 2000;
user-select: none;
border-radius: 0 0 10px 10px;
}
.nav-toggle:checked ~ .navbar .nav-links {
max-height: 300px;
}
.burger-menu {
display: flex;
}
.nav-links li a {
color: #ff66ff;
padding: 1rem 0;
border-bottom: 1px solid #ff00ff33;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #33ffff;
text-shadow: none;
}
}
.streams-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.stream-item {
background: #111;
border: 2px solid #ff00ff;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 0 12px #ff00ff88;
transition: box-shadow 0.3s ease;
user-select: none;
display: flex;
flex-direction: column;
height: 100%;
}
.stream-item:hover {
box-shadow: 0 0 20px #00ffffdd;
border-color: #00ffff;
}
.stream-item img {
width: 100%;
border-radius: 8px;
margin-bottom: 1rem;
box-shadow: 0 0 8px #ff00ffaa;
}
.stream-item h3 {
margin: 0 0 0.5rem;
color: #ff00ff;
text-shadow: none;
}
.stream-item p {
color: #aaa;
font-size: 0.95rem;
margin-bottom: 1rem;
}
.stream-item button {
background-color: #ff00ff;
border: none;
padding: 0.5rem 1.2rem;
color: #111;
font-weight: 700;
border-radius: 6px;
cursor: pointer;
box-shadow: 0 0 10px #ff00ff;
transition: background-color 0.3s ease;
margin-top: auto;
}
.stream-item button:hover {
background-color: #00ffff;
box-shadow: 0 0 14px #00ffff;
color: #000;
}

82
page3.html Normal file
View File

@@ -0,0 +1,82 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Трансляции | StreamCore</title>
<link rel="stylesheet" href="page3.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Roboto&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<div class="logo">🎮 StreamCore</div>
<input type="checkbox" id="nav-toggle" class="nav-toggle" />
<label for="nav-toggle" class="burger-menu" aria-label="Меню">
<span></span>
<span></span>
<span></span>
</label>
<nav class="navbar">
<ul class="nav-links">
<li><a href="index.html" aria-current="page">Главная</a></li>
<li><a href="page2.html">Каталог</a></li>
<li><a href="page3.html">Трансляции</a></li>
<li><a href="page4.html">Профиль</a></li>
<li><a href="page5.html">О нас</a></li>
</ul>
</nav>
</header>
<main class="page">
<h1>Текущие и предстоящие трансляции</h1>
<p>Выбирай любимые трансляции и присоединяйся к просмотру в реальном времени!</p>
<section class="streams-grid">
<article class="stream-item">
<img src="https://kartinki.pics/uploads/posts/2021-07/thumbs/1625655522_52-kartinkin-com-p-kiberpank-oboi-krasivie-57.jpg" alt="Трансляция 1" />
<h3>Neon Cyber Show</h3>
<p>В прямом эфире: DJ Neonmix с уникальными сетами и визуалами.</p>
<button>Смотреть сейчас</button>
</article>
<article class="stream-item">
<img src="https://img3.akspic.ru/previews/6/6/1/2/7/172166/172166-kiberpank_2077-kiberpank-bridzhit-svet-purpur-550x310.jpg" alt="Трансляция 2" />
<h3>Киберспорт Матч</h3>
<p>Прямой эфир крупнейшего турнира по киберспорту.</p>
<button>Присоединиться</button>
</article>
<article class="stream-item">
<img src="https://img3.akspic.ru/previews/4/6/0/4/6/164064/164064-goroda_kiberpank-kiberpank_2077-kiberpank-nauchnaya_fantastika-cifrovoe_iskusstvo-550x310.jpg" alt="Трансляция 3" />
<h3>VR Adventure Live</h3>
<p>Эксклюзивный VR стрим с комментариями и интерактивом.</p>
<button>Смотреть сейчас</button>
</article>
<article class="stream-item">
<img src="https://kartinki.pics/pics/uploads/posts/2022-08/thumbs/1660474007_21-kartinkin-net-p-kiberpank-oboi-krasivo-26.jpg" alt="Трансляция 4" />
<h3>Цифровой Концерт</h3>
<p>Виртуальный концерт с неоновыми спецэффектами и лайв-сетами.</p>
<button>Смотреть</button>
</article>
</section>
</main>
<footer class="footer">
<div class="footer-info">
<p>Контакты: info@streamcore.com | +7 (999) 123-45-67</p>
<p>Часы работы: Пн–Вс, 10:0022:00</p>
<p>Адрес: Неон-сити, ул. Цифровая, д.42</p>
</div>
<div class="footer-section">
<div class="social-icons">
<a href="#" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
<a href="#" aria-label="ВКонтакте"><i class="fab fa-vk"></i></a>
<a href="#" aria-label="Telegram"><i class="fab fa-telegram-plane"></i></a>
</div>
</div>
</footer>
</body>
</html>

260
page4.css Normal file
View File

@@ -0,0 +1,260 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: 'Orbitron', sans-serif;
background-color: #0d0d0d;
color: #ddd;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
background: #000000;
padding: 1rem 2rem;
border-bottom: 2px solid #ff00ff;
position: sticky;
top: 0;
z-index: 2000;
}
.logo {
font-size: 1.6rem;
color: #00ffff;
user-select: none;
}
.nav-toggle {
display: none;
}
.burger-menu {
display: none;
flex-direction: column;
gap: 6px;
cursor: pointer;
position: fixed;
top: 18px;
right: 20px;
z-index: 2100;
}
.burger-menu span {
width: 28px;
height: 3px;
background: #ff00ff;
border-radius: 2px;
box-shadow: 0 0 8px #ff00ff;
transition: 0.3s;
}
.navbar {
display: flex;
}
.nav-links {
list-style: none;
display: flex;
gap: 2rem;
margin: 0;
padding: 0;
}
.nav-links li a {
color: #ff00ff;
text-decoration: none;
font-weight: 600;
transition: color 0.3s ease;
user-select: none;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #00ffff;
text-shadow: none;
}
.page {
padding: 4rem 2rem;
border-bottom: 1px solid #222;
}
.page h1,
.page h2 {
color: #ff00ff;
text-shadow: none;
}
.page p {
max-width: 800px;
line-height: 1.6;
color: #aaa;
}
.footer {
background: #111;
border-top: 3px solid #00ffff;
padding: 2rem 1rem;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
color: #00ffff;
text-shadow: none;
}
.footer-info p {
margin: 0.4rem 0;
font-weight: 600;
}
.social-icons {
margin-top: 1rem;
display: flex;
gap: 1.5rem;
}
.social-icons a i {
color: #ff00ff;
transition: color 0.3s ease;
}
@media (max-width: 768px) {
.nav-links {
position: fixed;
top: 60px;
right: 0;
background: #111;
width: 100%;
max-height: 0;
overflow: hidden;
flex-direction: column;
padding: 0 2rem;
transition: max-height 0.35s ease;
box-shadow: 0 10px 30px #ff00ffaa;
border-bottom: 2px solid #ff00ff;
z-index: 2000;
user-select: none;
border-radius: 0 0 10px 10px;
}
.nav-toggle:checked ~ .navbar .nav-links {
max-height: 300px;
}
.burger-menu {
display: flex;
}
.nav-links li a {
color: #ff66ff;
padding: 1rem 0;
border-bottom: 1px solid #ff00ff33;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #33ffff;
text-shadow: none;
}
}
.profile-container {
background: #111;
border: 2px solid #ff00ff;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 0 12px #ff00ff88;
transition: box-shadow 0.3s ease;
user-select: none;
}
.profile-avatar img {
border-radius: 50%;
border: 3px solid #00ffff;
width: 150px;
height: 150px;
object-fit: cover;
box-shadow: 0 0 12px #00ffffaa;
}
.profile-info {
flex: 1 1 300px;
color: #eee;
}
.profile-info h2 span {
color: #ff00ff;
text-shadow: none;
}
.profile-info p {
font-size: 1.1rem;
margin: 0.5rem 0;
}
.btn-edit-profile {
margin-top: 1rem;
background-color: #ff00ff;
border: none;
padding: 0.7rem 1.4rem;
font-weight: 700;
color: #111;
border-radius: 8px;
cursor: pointer;
box-shadow: 0 0 12px #ff00ff;
transition: background-color 0.3s ease;
}
.btn-edit-profile:hover {
background-color: #00ffff;
box-shadow: 0 0 16px #00ffff;
color: #000;
}
.profile-settings {
margin-top: 3rem;
background-color: #111;
padding: 2rem;
border-radius: 12px;
box-shadow: 0 0 20px #00ffff88;
color: #eee;
}
.profile-settings h2 {
color: #00ffff;
text-shadow: none;
margin-bottom: 1rem;
}
form label {
display: block;
margin-top: 1rem;
font-weight: 600;
color: #ff00ff;
text-shadow: none;
}
form select {
width: 100%;
padding: 0.5rem;
border-radius: 8px;
border: 2px solid #ff00ff;
background-color: #222;
color: #eee;
box-shadow: 0 0 10px #ff00ff88 inset;
margin-top: 0.3rem;
font-weight: 500;
}
.btn-save-settings {
margin-top: 2rem;
background-color: #00ffff;
border: none;
padding: 0.7rem 1.4rem;
font-weight: 700;
color: #111;
border-radius: 8px;
cursor: pointer;
box-shadow: 0 0 16px #00ffff;
transition: background-color 0.3s ease;
}
.btn-save-settings:hover {
background-color: #ff00ff;
box-shadow: 0 0 20px #ff00ff;
color: #000;
}
@media (max-width: 600px) {
.profile-container {
flex-direction: column;
align-items: center;
}
.profile-info {
text-align: center;
}
}

69
page4.html Normal file
View File

@@ -0,0 +1,69 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Профиль | StreamCore</title>
<link rel="stylesheet" href="page4.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Roboto&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<div class="logo">🎮 StreamCore</div>
<input type="checkbox" id="nav-toggle" class="nav-toggle" />
<label for="nav-toggle" class="burger-menu" aria-label="Меню">
<span></span>
<span></span>
<span></span>
</label>
<nav class="navbar">
<ul class="nav-links">
<li><a href="index.html" aria-current="page">Главная</a></li>
<li><a href="page2.html">Каталог</a></li>
<li><a href="page3.html">Трансляции</a></li>
<li><a href="page4.html">Профиль</a></li>
<li><a href="page5.html">О нас</a></li>
</ul>
</nav>
</header>
<main class="page">
<h1>Профиль пользователя</h1>
<section class="profile-container">
<div class="profile-avatar">
<img src="https://abrakadabra.fun/uploads/posts/2021-12/1640161252_2-abrakadabra-fun-p-devushki-v-stile-kiberpank-2.jpg" alt="Аватар пользователя" />
</div>
<div class="profile-info">
<h2>Имя пользователя: <span>NeonGamer</span></h2>
<p><strong>Email:</strong> neongamer@example.com</p>
<p><strong>Подписка:</strong> Pro</p>
<p><strong>Дата регистрации:</strong> 12.04.2024</p>
<p><strong>Последний вход:</strong> Сегодня, 14:35</p>
<button class="btn-edit-profile">Редактировать профиль</button>
</div>
</section>
</main>
<footer class="footer">
<div class="footer-info">
<p>Контакты: info@streamcore.com | +7 (999) 123-45-67</p>
<p>Часы работы: Пн–Вс, 10:0022:00</p>
<p>Адрес: Неон-сити, ул. Цифровая, д.42</p>
</div>
<div class="footer-section">
<div class="social-icons">
<a href="#" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
<a href="#" aria-label="ВКонтакте"><i class="fab fa-vk"></i></a>
<a href="#" aria-label="Telegram"><i class="fab fa-telegram-plane"></i></a>
</div>
</div>
</footer>
</body>
</html>

232
page5.css Normal file
View File

@@ -0,0 +1,232 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: 'Orbitron', sans-serif;
background-color: #0d0d0d;
color: #ddd;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
background: #000000;
padding: 1rem 2rem;
border-bottom: 2px solid #ff00ff;
position: sticky;
top: 0;
z-index: 2000;
}
.logo {
font-size: 1.6rem;
color: #00ffff;
user-select: none;
}
.nav-toggle {
display: none;
}
.burger-menu {
display: none;
flex-direction: column;
gap: 6px;
cursor: pointer;
position: fixed;
top: 18px;
right: 20px;
z-index: 2100;
}
.burger-menu span {
width: 28px;
height: 3px;
background: #ff00ff;
border-radius: 2px;
box-shadow: 0 0 8px #ff00ff;
transition: 0.3s;
}
.navbar {
display: flex;
}
.nav-links {
list-style: none;
display: flex;
gap: 2rem;
margin: 0;
padding: 0;
}
.nav-links li a {
color: #ff00ff;
text-decoration: none;
font-weight: 600;
transition: color 0.3s ease;
user-select: none;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #00ffff;
text-shadow: none;
}
.page {
padding: 4rem 2rem;
border-bottom: 1px solid #222;
}
.page h1,
.page h2 {
color: #ff00ff;
text-shadow: none;
}
.page p {
max-width: 800px;
line-height: 1.6;
color: #aaa;
}
.footer {
background: #111;
border-top: 3px solid #00ffff;
padding: 2rem 1rem;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
color: #00ffff;
text-shadow: none;
}
.footer-info p {
margin: 0.4rem 0;
font-weight: 600;
}
.social-icons {
margin-top: 1rem;
display: flex;
gap: 1.5rem;
}
.social-icons a i {
color: #ff00ff;
transition: color 0.3s ease;
}
@media (max-width: 768px) {
.nav-links {
position: fixed;
top: 60px;
right: 0;
background: #111;
width: 100%;
max-height: 0;
overflow: hidden;
flex-direction: column;
padding: 0 2rem;
transition: max-height 0.35s ease;
box-shadow: 0 10px 30px #ff00ffaa;
border-bottom: 2px solid #ff00ff;
z-index: 2000;
user-select: none;
border-radius: 0 0 10px 10px;
}
.nav-toggle:checked ~ .navbar .nav-links {
max-height: 300px;
}
.burger-menu {
display: flex;
}
.nav-links li a {
color: #ff66ff;
padding: 1rem 0;
border-bottom: 1px solid #ff00ff33;
text-shadow: none;
}
.nav-links li a:hover,
.nav-links li a:focus {
color: #33ffff;
text-shadow: none;
}
}
main.about-page {
max-width: 900px;
margin: 3rem auto;
padding: 0 1rem;
color: #eee;
}
.about-page h1 {
font-size: 3rem;
color: #ff00ff;
text-align: center;
text-shadow: none;
margin-bottom: 2rem;
}
.about-section {
background: #111;
border: 2px solid #ff00ff;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 0 12px #ff00ff88;
transition: box-shadow 0.3s ease;
user-select: none;
margin: 8px 0 0 0 ;
}
.about-section h2 {
font-size: 2rem;
margin-bottom: 1rem;
color: #00ffff;
text-shadow: none;
}
.about-section p,
.about-section ul {
font-size: 1.15rem;
line-height: 1.6;
}
.about-section ul {
padding-left: 1.3rem;
list-style-type: square;
}
.about-section ul li {
margin-bottom: 0.7rem;
}
.about-section a {
color: #ff00ff;
text-decoration: none;
font-weight: 700;
text-shadow: none;
}
.about-section a:hover {
color: #00ffff;
text-shadow: none;
}
.contact-cta p {
font-style: italic;
}
@media (max-width: 600px) {
main.about-page {
margin: 1.5rem 1rem;
}
.about-page h1 {
font-size: 2.5rem;
}
.about-section h2 {
font-size: 1.6rem;
}
}

86
page5.html Normal file
View File

@@ -0,0 +1,86 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>О сервисе | StreamCore</title>
<link rel="stylesheet" href="page5.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Roboto&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<div class="logo">🎮 StreamCore</div>
<input type="checkbox" id="nav-toggle" class="nav-toggle" />
<label for="nav-toggle" class="burger-menu" aria-label="Меню">
<span></span>
<span></span>
<span></span>
</label>
<nav class="navbar">
<ul class="nav-links">
<li><a href="index.html" aria-current="page">Главная</a></li>
<li><a href="page2.html">Каталог</a></li>
<li><a href="page3.html">Трансляции</a></li>
<li><a href="page4.html">Профиль</a></li>
<li><a href="page5.html">О нас</a></li>
</ul>
</nav>
</header>
<main class="page about-page">
<h1>О сервисе StreamCore</h1>
<section class="about-section">
<h2>Наша миссия</h2>
<p>
StreamCore — это инновационная платформа для стриминга, которая объединяет лучшие элементы киберпанка и современных технологий.
Мы стремимся предоставить уникальный опыт для зрителей и стримеров, создавая атмосферу неона и цифрового будущего.
</p>
</section>
<section class="about-section">
<h2>Что мы предлагаем</h2>
<ul>
<li>Множество трансляций в режиме реального времени с профессиональными и начинающими стримерами.</li>
<li>Каталог эксклюзивных цифровых товаров и мерча в стиле киберпанк.</li>
<li>Интерактивное сообщество с возможностями для общения и обмена опытом.</li>
<li>Продвинутые настройки профиля и персонализация интерфейса.</li>
<li>Стабильную работу и удобный дизайн на всех устройствах.</li>
</ul>
</section>
<section class="about-section">
<h2>Команда</h2>
<p>
Наша команда состоит из энтузиастов и профессионалов в области технологий, дизайна и цифрового искусства, объединённых идеей создания лучшего стримингового сервиса в киберпанковской эстетике.
</p>
</section>
<section class="about-section contact-cta">
<h2>Связаться с нами</h2>
<p>
Если у вас есть вопросы или предложения, пишите на info@streamcore.com
</p>
</section>
</main>
<footer class="footer">
<div class="footer-info">
<p>Контакты: info@streamcore.com | +7 (999) 123-45-67</p>
<p>Часы работы: Пн–Вс, 10:0022:00</p>
<p>Адрес: Неон-сити, ул. Цифровая, д.42</p>
</div>
<div class="footer-section">
<div class="social-icons">
<a href="#" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
<a href="#" aria-label="ВКонтакте"><i class="fab fa-vk"></i></a>
<a href="#" aria-label="Telegram"><i class="fab fa-telegram-plane"></i></a>
</div>
</div>
</footer>
</body>
</html>

View File

@@ -0,0 +1,15 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:prettier/recommended"
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {}
}

24
streamcore-bootstrap/.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@@ -0,0 +1,6 @@
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none"
}

View File

@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

1008
streamcore-bootstrap/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
{
"name": "streamcore-bootstrap",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"lint": "eslint . --ext .js,.html",
"format": "prettier --write ."
},
"devDependencies": {
"eslint": "^8.0.0",
"eslint-plugin-prettier": "^5.0.0",
"eslint-config-prettier": "^9.0.0",
"prettier": "^3.0.0"
}
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,9 @@
export function setupCounter(element) {
let counter = 0
const setCounter = (count) => {
counter = count
element.innerHTML = `count is ${counter}`
}
element.addEventListener('click', () => setCounter(counter + 1))
setCounter(0)
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#F7DF1E" d="M0 0h256v256H0V0Z"></path><path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path></svg>

After

Width:  |  Height:  |  Size: 995 B

View File

@@ -0,0 +1,24 @@
import './style.css'
import javascriptLogo from './javascript.svg'
import viteLogo from '/vite.svg'
import { setupCounter } from './counter.js'
document.querySelector('#app').innerHTML = `
<div>
<a href="https://vite.dev" target="_blank">
<img src="${viteLogo}" class="logo" alt="Vite logo" />
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank">
<img src="${javascriptLogo}" class="logo vanilla" alt="JavaScript logo" />
</a>
<h1>Hello Vite!</h1>
<div class="card">
<button id="counter" type="button"></button>
</div>
<p class="read-the-docs">
Click on the Vite logo to learn more
</p>
</div>
`
setupCounter(document.querySelector('#counter'))

View File

@@ -0,0 +1,96 @@
:root {
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vanilla:hover {
filter: drop-shadow(0 0 2em #f7df1eaa);
}
.card {
padding: 2em;
}
.read-the-docs {
color: #888;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}

View File

@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@@ -0,0 +1,11 @@
import js from "@eslint/js";
import globals from "globals";
import pluginReact from "eslint-plugin-react";
import { defineConfig } from "eslint/config";
export default defineConfig([
{ files: ["**/*.{js,mjs,cjs,jsx}"], plugins: { js }, extends: ["js/recommended"] },
{ files: ["**/*.{js,mjs,cjs,jsx}"], languageOptions: { globals: globals.browser } },
pluginReact.configs.flat.recommended,
]);

View File

@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
{
"name": "my-bootstrap-site",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"@eslint/js": "^9.27.0",
"eslint": "^9.27.0",
"eslint-plugin-react": "^7.37.5",
"globals": "^16.1.0",
"vite": "^6.3.5"
},
"dependencies": {
"bootstrap": "^5.3.6",
"bootstrap-icons": "^1.13.1"
}
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,9 @@
export function setupCounter(element) {
let counter = 0
const setCounter = (count) => {
counter = count
element.innerHTML = `count is ${counter}`
}
element.addEventListener('click', () => setCounter(counter + 1))
setCounter(0)
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#F7DF1E" d="M0 0h256v256H0V0Z"></path><path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path></svg>

After

Width:  |  Height:  |  Size: 995 B

View File

@@ -0,0 +1,24 @@
import './style.css'
import javascriptLogo from './javascript.svg'
import viteLogo from '/vite.svg'
import { setupCounter } from './counter.js'
document.querySelector('#app').innerHTML = `
<div>
<a href="https://vite.dev" target="_blank">
<img src="${viteLogo}" class="logo" alt="Vite logo" />
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank">
<img src="${javascriptLogo}" class="logo vanilla" alt="JavaScript logo" />
</a>
<h1>Hello Vite!</h1>
<div class="card">
<button id="counter" type="button"></button>
</div>
<p class="read-the-docs">
Click on the Vite logo to learn more
</p>
</div>
`
setupCounter(document.querySelector('#counter'))

View File

@@ -0,0 +1,96 @@
:root {
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vanilla:hover {
filter: drop-shadow(0 0 2em #f7df1eaa);
}
.card {
padding: 2em;
}
.read-the-docs {
color: #888;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
{
"name": "streamcore-bootstrap",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"eslint": "^9.27.0",
"eslint-config-prettier": "^10.1.5",
"eslint-plugin-prettier": "^5.4.0",
"prettier": "^3.5.3",
"vite": "^6.3.5"
},
"dependencies": {
"bootstrap": "^5.3.6",
"bootstrap-icons": "^1.13.1"
}
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,9 @@
export function setupCounter(element) {
let counter = 0
const setCounter = (count) => {
counter = count
element.innerHTML = `count is ${counter}`
}
element.addEventListener('click', () => setCounter(counter + 1))
setCounter(0)
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#F7DF1E" d="M0 0h256v256H0V0Z"></path><path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path></svg>

After

Width:  |  Height:  |  Size: 995 B

View File

@@ -0,0 +1,24 @@
import './style.css'
import javascriptLogo from './javascript.svg'
import viteLogo from '/vite.svg'
import { setupCounter } from './counter.js'
document.querySelector('#app').innerHTML = `
<div>
<a href="https://vite.dev" target="_blank">
<img src="${viteLogo}" class="logo" alt="Vite logo" />
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank">
<img src="${javascriptLogo}" class="logo vanilla" alt="JavaScript logo" />
</a>
<h1>Hello Vite!</h1>
<div class="card">
<button id="counter" type="button"></button>
</div>
<p class="read-the-docs">
Click on the Vite logo to learn more
</p>
</div>
`
setupCounter(document.querySelector('#counter'))

View File

@@ -0,0 +1,96 @@
:root {
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vanilla:hover {
filter: drop-shadow(0 0 2em #f7df1eaa);
}
.card {
padding: 2em;
}
.read-the-docs {
color: #888;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}