diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3bdd52e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..50cdb3e --- /dev/null +++ b/README.md @@ -0,0 +1,116 @@ +# Student Web IF — Development Kit + +Paket tugas halaman statis untuk mahasiswa Informatika UNTAN. +Navbar dan footer identik dengan web resmi prodi (`informatika.untan.ac.id`). + +## Jalankan project + +```bash +npm install +npm run dev +``` + +Buka URL dari Vite (default: `http://localhost:5173`) lalu akses launcher di `/`. + +## Script NPM + +| Perintah | Fungsi | +|---|---| +| `npm run dev` | Jalankan local dev server | +| `npm run build` | Build static output ke folder `dist` | +| `npm run preview` | Preview hasil build | + +## Struktur Folder + +``` +student-web-if-development-kit/ +├── index.html ← Launcher (daftar link semua grup) +├── assets/ +│ └── global/ +│ ├── output.css ← Tailwind CSS (compiled dari web prod) +│ ├── localization.js ← Toggle bahasa ID/EN +│ ├── hero.webp +│ ├── footer.png +│ └── logo.png +└── groups/ + ├── Jellyfish.Corp/ ← Group 01 + ├── HabisIniSeminar/ ← Group 02 + ├── HarusSelesaiKP/ ← Group 03 + ├── C4A/ ← Group 04 + ├── M4N1FEST/ ← Group 05 + ├── ACAAB/ ← Group 06 — Sorotan dan Prestasi Karya Mahasiswa + ├── LimaEm/ ← Group 07 — Kehidupan Mahasiswa & Himpunan (HMIF) + ├── RODA/ ← Group 08 — Riset & Kelompok Bidang Keahlian (KBK) + ├── Tapops/ ← Group 09 — Berkas Penting + └── ApeNameTeamE/ ← Group 10 — Beasiswa +``` + +Setiap folder grup berisi: +- `index.html` → halaman tugas (navbar + footer sudah tersedia) +- `style.css` → CSS tambahan milik kelompok (opsional) + +## Aturan Pengerjaan + +1. **Tiap kelompok hanya mengedit foldernya sendiri.** +2. Area konten yang boleh diubah hanya bagian ini di dalam `index.html`: + +```html + +...konten kalian di sini... + +``` + +3. Jangan ubah navbar, footer, dan path asset global (`../../assets/global/...`). +4. Boleh menambah ` + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Sorotan dan Prestasi Karya Mahasiswa

+

Kelompok 06 — ACAAB  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/ACAAB/style.css b/groups/ACAAB/style.css new file mode 100644 index 0000000..2bc5542 --- /dev/null +++ b/groups/ACAAB/style.css @@ -0,0 +1,48 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } + diff --git a/groups/ApeNameTeamE/index.html b/groups/ApeNameTeamE/index.html new file mode 100644 index 0000000..d7d58d3 --- /dev/null +++ b/groups/ApeNameTeamE/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 10 – Ape Name Tim E | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Beasiswa

+

Kelompok 10 — Ape Name Tim E  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/ApeNameTeamE/style.css b/groups/ApeNameTeamE/style.css new file mode 100644 index 0000000..2bc5542 --- /dev/null +++ b/groups/ApeNameTeamE/style.css @@ -0,0 +1,48 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } + diff --git a/groups/C4A/index.html b/groups/C4A/index.html new file mode 100644 index 0000000..01a6da5 --- /dev/null +++ b/groups/C4A/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 04 – C4A | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Judul Halaman Group 04

+

Kelompok 04 — C4A  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/C4A/style.css b/groups/C4A/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/groups/C4A/style.css @@ -0,0 +1,47 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } diff --git a/groups/HabisIniSeminar/index.html b/groups/HabisIniSeminar/index.html new file mode 100644 index 0000000..d958cb9 --- /dev/null +++ b/groups/HabisIniSeminar/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 02 – HabisIniSeminar | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Judul Halaman Group 02

+

Kelompok 02 — HabisIniSeminar  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/HabisIniSeminar/style.css b/groups/HabisIniSeminar/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/groups/HabisIniSeminar/style.css @@ -0,0 +1,47 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } diff --git a/groups/HarusSelesaiKP/index.html b/groups/HarusSelesaiKP/index.html new file mode 100644 index 0000000..db8e89d --- /dev/null +++ b/groups/HarusSelesaiKP/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 03 – HarusSelesaiKP | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Judul Halaman Group 03

+

Kelompok 03 — HarusSelesaiKP  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/HarusSelesaiKP/style.css b/groups/HarusSelesaiKP/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/groups/HarusSelesaiKP/style.css @@ -0,0 +1,47 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } diff --git a/groups/Jellyfish.Corp/index.html b/groups/Jellyfish.Corp/index.html new file mode 100644 index 0000000..b6c7844 --- /dev/null +++ b/groups/Jellyfish.Corp/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 01 – Jellyfish.Corp | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Judul Halaman Group 01

+

Kelompok 01 — Jellyfish.Corp  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/Jellyfish.Corp/style.css b/groups/Jellyfish.Corp/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/groups/Jellyfish.Corp/style.css @@ -0,0 +1,47 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } diff --git a/groups/LimaEm/index.html b/groups/LimaEm/index.html new file mode 100644 index 0000000..31586eb --- /dev/null +++ b/groups/LimaEm/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 07 – LIMA EM | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Kehidupan Mahasiswa & Himpunan (HMIF)

+

Kelompok 07 — LIMA EM  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/LimaEm/style.css b/groups/LimaEm/style.css new file mode 100644 index 0000000..2bc5542 --- /dev/null +++ b/groups/LimaEm/style.css @@ -0,0 +1,48 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } + diff --git a/groups/M4N1FEST/index.html b/groups/M4N1FEST/index.html new file mode 100644 index 0000000..3a813ee --- /dev/null +++ b/groups/M4N1FEST/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 05 – M4N1FEST | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Judul Halaman Group 05

+

Kelompok 05 — M4N1FEST  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/M4N1FEST/style.css b/groups/M4N1FEST/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/groups/M4N1FEST/style.css @@ -0,0 +1,47 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } diff --git a/groups/RODA/index.html b/groups/RODA/index.html new file mode 100644 index 0000000..720a508 --- /dev/null +++ b/groups/RODA/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 08 – RODA | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Riset & Kelompok Bidang Keahlian (KBK)

+

Kelompok 08 — RODA  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/RODA/style.css b/groups/RODA/style.css new file mode 100644 index 0000000..2bc5542 --- /dev/null +++ b/groups/RODA/style.css @@ -0,0 +1,48 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } + diff --git a/groups/Tapops/index.html b/groups/Tapops/index.html new file mode 100644 index 0000000..cc1ca3a --- /dev/null +++ b/groups/Tapops/index.html @@ -0,0 +1,1338 @@ + + + + + + Group 09 – TAPOPS | Informatika UNTAN + + + + + + + + + + + + + + + +
+
+
+ Tugas Halaman Statis +

Berkas Penting

+

Kelompok 09 — TAPOPS  ·  Informatika UNTAN 2026

+
+
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

Gunakan paragraf, list, tabel, gambar, dan elemen konten lainnya.

+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/groups/Tapops/style.css b/groups/Tapops/style.css new file mode 100644 index 0000000..2bc5542 --- /dev/null +++ b/groups/Tapops/style.css @@ -0,0 +1,48 @@ +:root { + --brand-navy: #003150; + --brand-yellow: #feb401; + --text-main: #1e293b; + --text-soft: #64748b; + --bg-soft: #f8fafc; + --line: #e2e8f0; +} + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; } +body { font-family: "Roboto", Arial, sans-serif; color: var(--text-main); background: #fff; line-height: 1.6; } +.container { width: min(1100px, 92%); margin-inline: auto; } + +.nav { background: var(--brand-navy); color: #fff; border-bottom: 4px solid var(--brand-yellow); padding: 14px 0; } +.brand { font-size: 1.1rem; font-weight: 700; letter-spacing: .02em; } + +.hero { position: relative; color: #fff; min-height: 220px; display: flex; align-items: flex-end; overflow: hidden; } +.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: brightness(0.45); } +.hero-inner { position: relative; z-index: 1; padding: 36px 0; } +.badge { display: inline-block; background: var(--brand-yellow); color: #111827; font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; padding: .2rem .45rem; margin-bottom: 12px; } +.hero h1 { margin: 0; font-size: clamp(1.6rem, 3.2vw, 2.8rem); line-height: 1.2; } + +.layout { display: grid; grid-template-columns: 1fr; gap: 2rem; padding: 2rem 0 4rem; } +@media (min-width: 1024px) { .layout { grid-template-columns: minmax(0, 3fr) minmax(260px, 1fr); } } + +.meta { font-size: .78rem; text-transform: uppercase; color: #475569; display: flex; flex-wrap: wrap; gap: .75rem 1rem; margin-bottom: 1rem; } +.cover { background: var(--bg-soft); border: 1px solid var(--line); margin-bottom: 1.5rem; } +.cover img { width: 100%; height: auto; display: block; } + +.article-body > * + * { margin-top: 1.1em; } +.article-body h2 { font-size: 1.35rem; margin: 1.6em 0 .5em; } +.article-body h3 { font-size: 1.1rem; margin: 1.4em 0 .4em; } +.article-body p { margin: 0 0 1em; } +.article-body ul, .article-body ol { padding-left: 1.4rem; } +.article-body blockquote { border-left: 4px solid #005eb8; background: #eef6ff; padding: .8rem 1rem; color: #334155; } +.article-body a { color: #005eb8; } +.article-body img { max-width: 100%; border-radius: 8px; } +.article-body code { background: #f1f5f9; padding: .1em .35em; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } + +.note { border: 1px solid var(--line); background: var(--bg-soft); padding: 1rem; } +.note h3 { margin: 0 0 .5rem; font-size: .76rem; text-transform: uppercase; letter-spacing: .12em; color: #475569; } + +.footer { margin-top: 2rem; background: var(--brand-navy); color: #fff; border-top: 4px solid var(--brand-yellow); } +.footer-inner { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1rem 0; } +.footer-logo { height: 28px; width: auto; } +.footer-ornament { width: 100%; display: block; opacity: .9; } + diff --git a/index.html b/index.html new file mode 100644 index 0000000..9e31300 --- /dev/null +++ b/index.html @@ -0,0 +1,39 @@ + + + + + + Web Student Safe - Launcher + + + +
+
+

Web Student Safe

+

Launcher untuk akses halaman tiap kelompok.

+ +
+
+ + diff --git a/materi-git.html b/materi-git.html new file mode 100644 index 0000000..ef9d5c8 --- /dev/null +++ b/materi-git.html @@ -0,0 +1,1093 @@ + + + + + + Materi Git — Kolaborasi Tim Web Development + + + + + +
+
+
+ +
Panduan Praktikum
+

Git untuk Kolaborasi
Tim Web Development

+
Version Control & Workflow Mahasiswa
+ +
+
Program Studi Informatika — UNTAN
+
Mata Kuliah Pemrograman Web
+
Semester Genap 2025/2026
+
+ +
+
+ + + +
+
+ +
+

Agenda Materi

+ Overview +
+ +
+
+
1
+
+

Apa itu Git?

+

Konsep dasar version control & mengapa penting

+
+
+
+
2
+
+

Perintah Utama Git

+

init, clone, add, commit, push, pull, branch, merge

+
+
+
+
3
+
+

Branch & Workflow

+

Strategi branch per kelompok, feature branch

+
+
+
+
4
+
+

Pull Request & Review

+

Cara submit tugas via PR di GitHub

+
+
+
+
5
+
+

Konflik & Cara Selesaikannya

+

Merge conflict, cara baca dan resolve

+
+
+
+
6
+
+

Praktik: Tugas Kelompok

+

Setup repo, clone starter kit, submit PR

+
+
+
+ +
02 / 14
+
+
+ + + +
+
+ +
+

Apa itu Git?

+ Konsep Dasar +
+ +
+
Definisi
+

Git adalah sistem version control terdistribusi yang mencatat setiap perubahan pada file sehingga banyak orang bisa bekerja di proyek yang sama secara bersamaan tanpa saling menimpa pekerjaan satu sama lain.

+
— Linus Torvalds, 2005 (awalnya dibuat untuk kernel Linux)
+
+ +
+
+
📸
+

Snapshot

+

Setiap commit = foto kondisi seluruh project di waktu tersebut. Bisa kembali ke mana saja.

+
+
+
🌐
+

Terdistribusi

+

Setiap anggota punya salinan penuh riwayat. Tidak bergantung pada satu server pusat.

+
+
+
🔀
+

Branch

+

Kerjakan fitur di branch terpisah, lalu gabungkan ke branch utama tanpa risiko merusak.

+
+
+ +
03 / 14
+
+
+ + + +
+
+ +
+

Kenapa Perlu Git?

+ Motivasi +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Aspek❌ Tanpa Git✅ Dengan Git
KolaborasiKirim file via WhatsApp, saling tindihPush ke repo, merge via PR
Riwayat perubahanindex_v1.html, index_v2_fix.html…git log — riwayat lengkap dengan pesan
RollbackTidak bisa, file sudah ditimpagit checkout <commit> kapan saja
ParalelismeHarus menunggu giliran mengerjakanTiap orang kerja di branch sendiri
Review kodeTidak ada mekanisme formalPull Request + komentar per baris
+ +
04 / 14
+
+
+ + + +
+
+ +
+

Tiga Area Git

+ Konsep +
+ +
+
+
📝
+

Working Directory

+

Folder di komputer kamu. Tempat kamu mengedit file secara langsung. Perubahan di sini belum "diketahui" Git.

+
+ Belum dilacak +
+
+
+
📦
+

Staging Area

+

Area "antrian" sebelum commit. Kamu memilih file mana yang akan masuk ke snapshot berikutnya.

+
+ git add +
+
+
+
🗄️
+

Repository (.git)

+

Database permanen Git. Setelah commit, snapshot tersimpan di sini dan tidak hilang.

+
+ git commit +
+
+
+ +
+
💡
+
+

Alur dasar

+

edit filegit addgit commitgit push

+
+
+ +
05 / 14
+
+
+ + + +
+
+ +
+

Perintah Utama Git

+ Command Reference +
+ +
+
+
+# 1. Ambil repo dari GitHub +git clone https://github.com/org/repo.git + +# 2. Lihat status perubahan +git status + +# 3. Tambah ke staging +git add index.html style.css +git add . # semua file + +# 4. Simpan snapshot +git commit -m "feat: tambah halaman profil" + +# 5. Kirim ke GitHub +git push origin feature/kelompok-02 +
+
+
+
+# 6. Ambil update dari remote +git pull origin main + +# 7. Buat branch baru +git checkout -b feature/kelompok-02 + +# 8. Pindah branch +git checkout main + +# 9. Lihat riwayat commit +git log --oneline + +# 10. Lihat perbedaan +git diff +
+
+
+ +
06 / 14
+
+
+ + + +
+
+ +
+

Strategi Branch

+ Workflow Tim +
+ +
+ +
+
main
+
+
+
+
+
+
+
+
+
+ ← tag: v1.0 +
+ +
+
group-01
+
+
+
+
+
+ → PR → merge ke main +
+ +
+
group-02
+
+
+
+ → PR → merge ke main +
+
+ +
+
+
+
+

Aturan Branch

+

Setiap kelompok kerja di branch group-XX. Jangan pernah push langsung ke main.

+
+
+
+
⚠️
+
+

Batasan Edit

+

Hanya edit file di folder groups/group-XX/. File lain adalah tanggung jawab dosen.

+
+
+
+ +
07 / 14
+
+
+ + + +
+
+ +
+

Pesan Commit yang Baik

+ Konvensi +
+ +
+
+
+
Format Conventional Commits
+

<type>(scope): deskripsi singkat

+
+ + + + + + + + + + + +
TypeDigunakan untuk
featMenambah fitur baru
fixMemperbaiki bug
docsMengubah dokumentasi
styleFormat/CSS (bukan logika)
choreMaintenance, update aset
+
+
+
+# ✅ BAIK — spesifik dan bermakna +feat(group-02): tambah tabel jadwal kuliah +fix(group-02): perbaiki link gambar hero +style(group-02): sesuaikan warna heading + + +# ❌ BURUK — tidak informatif +update +fix bug +asdfgh +coba commit lagi +
+ +
+
💡
+
+

Tips Praktis

+

Bayangkan melengkapi kalimat: "Jika commit ini diterapkan, ia akan ____"

+
+
+
+
+ +
08 / 14
+
+
+ + + +
+
+ +
+

Pull Request — Cara Submit Tugas

+ GitHub Workflow +
+ +
+
+
1
+
+

Fork atau Clone Repo Starter Kit

+

git clone https://github.com/if-untan/web-tugas-kelompok.git — lalu masuk ke folder project

+
+
+
+
2
+
+

Buat Branch Kelompok

+

git checkout -b group-02 — satu branch per kelompok, jangan share branch

+
+
+
+
3
+
+

Edit di Folder Kelompok & Commit

+

Edit groups/group-02/index.html, kemudian git add . && git commit -m "feat(group-02): …"

+
+
+
+
4
+
+

Push ke GitHub

+

git push origin group-02 — lalu buka GitHub, klik "Compare & pull request"

+
+
+
+
5
+
+

Isi Deskripsi PR & Submit

+

Sebutkan nama kelompok, anggota, dan ringkasan halaman yang dibuat. Dosen akan review & merge.

+
+
+
+ +
09 / 14
+
+
+ + + +
+
+ +
+

Merge Conflict

+ Problem Solving +
+ +
+
+
+
Apa itu?
+

Conflict terjadi ketika dua orang mengubah baris yang sama di file yang sama secara bersamaan.

+
+
+<<<<<<< HEAD (perubahan kamu) +<h1>Judul Versi Saya</h1> +======= +<h1>Judul Versi Teman</h1> +>>>>>>> group-03/edit-halaman +
+

Git tidak tahu mana yang benar — kamu yang memutuskan.

+
+
+
+

Langkah Resolve

+
+
+
1
+
+

Buka file yang conflict

+

Cari tanda <<<<<<< di editor

+
+
+
+
2
+
+

Pilih atau gabungkan keduanya

+

Hapus marker conflict, tulis versi final yang disepakati

+
+
+
+
3
+
+

Add & commit ulang

+

git add . && git commit -m "fix: resolve conflict"

+
+
+
+
+
🛡️
+
+

Pencegahan terbaik

+

Tiap kelompok hanya edit folder group-XX-nya sendiri → conflict tidak mungkin terjadi.

+
+
+
+
+
+ +
10 / 14
+
+
+ + + +
+
+ +
+

File .gitignore

+ Best Practice +
+ +
+
+
+
Fungsi
+

Memberitahu Git file apa yang tidak perlu dilacak — biasanya file besar, file generated, atau file rahasia.

+
+
+# File sistem / editor +.DS_Store +.vscode/ +Thumbs.db + +# Dependensi (bisa di-install ulang) +node_modules/ + +# File build/generated +dist/ +*.min.js + +# Jangan commit password! +.env +
+
+
+
+

Aturan Penulisan

+
    +
  • *.log — abaikan semua file .log
  • +
  • folder/ — abaikan seluruh folder
  • +
  • !penting.log — pengecualian (tetap track)
  • +
  • # — baris komentar
  • +
+ +
+
⚠️
+
+

File sudah terlanjur di-commit?

+

Menambahkan ke .gitignore tidak menghapusnya dari riwayat. Gunakan git rm --cached nama-file lalu commit.

+
+
+ +
+
🔗
+
+

Template siap pakai

+

github.com/github/gitignore — template untuk berbagai bahasa & framework

+
+
+
+
+
+ +
11 / 14
+
+
+ + + +
+
+ +
+

Setup Praktikum Hari Ini

+ Hands-On +
+ +
+
+
+

Langkah Persiapan

+
+
+
1
+
+

Install Git

+

git-scm.com/downloads — cek dengan git --version

+
+
+
+
2
+
+

Konfigurasi Identitas

+

git config --global user.name "Nama"
git config --global user.email "email@untan.ac.id"

+
+
+
+
3
+
+

Daftar / Login GitHub

+

Buka github.com, buat akun dengan email kampus

+
+
+
+
4
+
+

Clone Starter Kit

+

Link repo akan dibagikan dosen — gunakan git clone <url>

+
+
+
+
+
+
+
+

Struktur Starter Kit

+
+web-tugas-kelompok/ +├── assets/ +│ └── global/ +│ ├── hero.webp +│ ├── logo.png +│ └── footer.png +├── groups/ +│ ├── group-01/ +│ │ ├── index.html ← edit di sini +│ │ └── style.css ← styling tambahan +│ ├── group-02/ ... +│ └── group-05/ ... +├── .gitignore +├── package.json (vite dev server) +└── README.md +
+
+
+
+ +
12 / 14
+
+
+ + + +
+
+ +
+

Git Cheat Sheet

+ Referensi Cepat +
+ +
+
+ + + + + + + + + + +
PerintahFungsi
git clone <url>Unduh repo dari GitHub
git statusLihat file yang berubah
git add .Staging semua perubahan
git commit -m "…"Simpan snapshot
git push origin <branch>Kirim ke GitHub
git pull origin mainUpdate dari remote
+
+
+ + + + + + + + + + +
PerintahFungsi
git checkout -b <nama>Buat & pindah branch
git branchLihat daftar branch
git log --onelineRiwayat commit ringkas
git diffLihat perbedaan belum di-stage
git stashSimpan sementara perubahan
git restore <file>Batalkan perubahan file
+
+
+ +
+ 📖 Pro Git Book: git-scm.com/book + 🎮 Latihan Interaktif: learngitbranching.js.org + 🐙 Referensi: docs.github.com +
+ +
13 / 14
+
+
+ + + +
+
+
+ +
+

Tugas Kelompok

+ Assessment +
+ +
+
+
+

Yang Harus Dikerjakan

+
    +
  • Clone starter kit yang diberikan dosen
  • +
  • Buat branch dengan nama group-XX sesuai nomor kelompok
  • +
  • Edit konten di groups/group-XX/index.html dalam area #assignment-body
  • +
  • Buat minimal 3 commit dengan pesan yang bermakna
  • +
  • Push branch ke GitHub dan buat Pull Request
  • +
  • Isi deskripsi PR dengan nama anggota & ringkasan konten
  • +
+
+
+
+
+

Kriteria Penilaian

+ + + + + + + + +
AspekBobot
Kualitas konten HTML40%
Commit message yang baik20%
Jumlah commit (≥ 3)20%
PR description lengkap20%
+
+ +
+
📅
+
+

Deadline

+

PR harus disubmit sebelum pertemuan berikutnya. Late submission tidak diterima.

+
+
+
+
+ +
14 / 14
+
+
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a16578c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1105 @@ +{ + "name": "web-student-safe", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web-student-safe", + "version": "1.0.0", + "devDependencies": { + "vite": "^7.1.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vite": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..31e8272 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "web-student-safe", + "version": "1.0.0", + "private": true, + "description": "Student-safe static page assignment kit for Informatika UNTAN", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^7.1.0" + } +} diff --git a/panduan-tugas.html b/panduan-tugas.html new file mode 100644 index 0000000..6723c43 --- /dev/null +++ b/panduan-tugas.html @@ -0,0 +1,1000 @@ + + + + + + Panduan Tugas — Web Statis Kelompok + + + + + +
+
+
+ +
Tugas Kelompok
+

Panduan Pengerjaan
Halaman Web Statis

+
Starter Kit · HTML/CSS · Submission via Git
+ +
+
Program Studi Informatika — UNTAN
+
Mata Kuliah Pemrograman Web
+
Semester Genap 2025/2026
+
+ +
+
+ + + +
+
+ +
+

Apa Tugas Ini?

+ Overview +
+ +
+
Deskripsi Tugas
+

Setiap kelompok membuat satu halaman web statis bertema bebas menggunakan HTML & CSS. Halaman dikerjakan di dalam starter kit yang disediakan dosen, lalu dikumpulkan melalui Pull Request di GitHub.

+
+ +
+
+
📁
+

Starter Kit

+

Template siap pakai dengan layout, navigasi, dan footer sudah dibuat. Kelompok hanya mengisi konten.

+
+
+
✏️
+

Area Edit

+

Satu area terbatas di dalam HTML yang boleh diubah: #assignment-body

+
+
+
🔀
+

Submit via Git

+

Push ke branch kelompok, buat Pull Request, dosen review & merge. Tidak ada upload file manual.

+
+
+ +
02 / 12
+
+
+ + + +
+
+ +
+

Struktur Starter Kit

+ File Tree +
+ +
+
+
+web-tugas-kelompok/ + +├── assets/ +│ └── global/ +│ ├── hero.webp ← gambar hero +│ ├── logo.png ← logo UNTAN +│ └── footer.png ← ornamen footer + +├── groups/ +│ ├── group-01/ +│ │ ├── index.html ← EDIT DI SINI +│ │ └── style.css ← styling tambahan +│ ├── group-02/ ... +│ └── group-05/ ... + +├── package.json +├── .gitignore +└── README.md +
+
+
+
+

Aturan Folder

+
    +
  • Setiap kelompok hanya boleh menyentuh folder groups/group-XX/ miliknya
  • +
  • Folder assets/global/ adalah milik bersama — jangan diubah
  • +
  • File di luar groups/ (package.json, README) — jangan diubah
  • +
  • Boleh menambah gambar sendiri di dalam folder kelompok
  • +
+
+ +
+
⚠️
+
+

Mengapa dibatasi?

+

5 kelompok bekerja di repo yang sama. Jika semua mengedit file yang sama, akan terjadi konflik yang sulit diselesaikan.

+
+
+
+
+ +
03 / 12
+
+
+ + + +
+
+ +
+

Tampilan Halaman & Area Edit

+ Visual Guide +
+ +
+
+
+
+
+
+
+
groups/group-02/index.html
+
+
+
+
Informatika UNTAN — Static Assignment
+
+
▶ HALAMAN STATIS
+
Judul Halaman Group 02
+
+
+
+
Kelompok 02 · 2026
+
Header Image
+
+
✏️ #assignment-body — Area Edit Kelompok
+
Tulis konten di sini ↓
+
+
+
+ CATATAN TUGAS + Ubah hanya area #assignment-body +
+
+
+
+
+
+
+
+

Yang Sudah Tersedia (Jangan Diubah)

+
    +
  • Navigasi bar atas dengan nama mata kuliah
  • +
  • Section hero dengan gambar latar
  • +
  • Header halaman dengan badge & judul
  • +
  • Meta info (kelompok, tahun)
  • +
  • Placeholder cover image
  • +
  • Sidebar "Catatan Tugas"
  • +
  • Footer dengan logo & ornamen
  • +
+
+
+
+
+

Yang Kelompok Kerjakan

+

Hanya isi div <div id="assignment-body"> dengan konten HTML bertema pilihan kelompok.

+
+
+
+
+ +
04 / 12
+
+
+ + + +
+
+ +
+

Elemen HTML yang Bisa Dipakai

+ HTML Reference +
+ +
+
+
+<!-- Judul dan teks --> +<h2>Judul Utama</h2> +<h3>Sub-judul</h3> +<p>Paragraf konten...</p> + +<!-- List --> +<ul> + <li>Item satu</li> + <li>Item dua</li> +</ul> + +<!-- Gambar --> +<img src="./foto.jpg" alt="Keterangan"> + +<!-- Kutipan --> +<blockquote>Kutipan penting</blockquote> + +<!-- Tabel --> +<table> + <tr><th>Kolom 1</th><th>Kolom 2</th></tr> + <tr><td>Data</td><td>Data</td></tr> +</table> +
+
+
+
+

Semua sudah punya styling CSS

+

Class .article-body di style.css sudah menyediakan tampilan untuk elemen-elemen ini. Tidak perlu menulis CSS dari nol.

+ +
+ h2, h3, h4 + p + ul / ol / li + img + blockquote + table + code + a (link) + strong / em +
+
+ +
+
🎨
+
+

CSS Tambahan

+

Ingin tampilan yang lebih custom? Tambahkan di groups/group-XX/style.css. Jangan mengubah CSS milik kelompok lain.

+
+
+
+
+ +
05 / 12
+
+
+ + + +
+
+ +
+

Contoh Konten Lengkap

+ Contoh Pengerjaan +
+ +
+
+
+<!-- START: BAGIAN YANG DIEDIT KELOMPOK --> + +<h2>Kecerdasan Buatan di Era Modern</h2> +<p>Kecerdasan buatan (AI) telah mengubah cara +kita bekerja dalam dekade terakhir...</p> + +<h3>Aplikasi AI di Kehidupan Sehari-hari</h3> +<ul> + <li>Asisten virtual (Siri, Google Assistant)</li> + <li>Rekomendasi konten di media sosial</li> + <li>Deteksi wajah di kamera smartphone</li> +</ul> + +<blockquote> + "AI is the new electricity." — Andrew Ng +</blockquote> + +<img src="./gambar-ai.jpg" alt="Ilustrasi AI"> + +<!-- END: BAGIAN YANG DIEDIT KELOMPOK --> +
+
+
+
+

Ide Tema Halaman

+
+
+
💻
+

Teknologi & Inovasi

+
+
+
🌏
+

Budaya & Pariwisata

+
+
+
📚
+

Pendidikan

+
+
+
🌿
+

Lingkungan Hidup

+
+
+
+ +
+
⚠️
+
+

Jangan gunakan JavaScript

+

Tugas ini fokus pada HTML & CSS murni. Script tag tidak akan dinilai dan tidak diperlukan.

+
+
+
+
+ +
06 / 12
+
+
+ + + +
+
+ +
+

Menjalankan di Komputer Lokal

+ Dev Server +
+ +
+
+
+

Cara 1 — Buka Langsung (Paling Mudah)

+
+
+
1
+
+

Buka File Explorer

+

Masuk ke folder groups/group-XX/

+
+
+
+
2
+
+

Double-click index.html

+

Browser akan membuka halaman. Refresh setiap kali ada perubahan.

+
+
+
+
+ +
+
+
+

Cara 2 — Live Server (Lebih Nyaman)

+

Install ekstensi Live Server di VS Code → klik kanan index.html → "Open with Live Server". Halaman auto-refresh saat file disimpan.

+
+
+
+
+
+

Cara 3 — Vite Dev Server (Opsional)

+

Jika Node.js sudah terinstall, bisa pakai dev server yang lebih canggih:

+
+# Install dependensi (sekali saja) +npm install + +# Jalankan dev server +npm run dev + +# Browser buka otomatis di +http://localhost:5173 + +# Build untuk deploy +npm run build +
+
+
+
+ +
07 / 12
+
+
+ + + +
+
+ +
+

Workflow Pengerjaan Tugas

+ Step by Step +
+ +
+
+
1
+
+

Clone Starter Kit

+

git clone <URL-repo-dari-dosen> — unduh ke komputer masing-masing

+
+
+
+
2
+
+

Buat Branch Kelompok

+

git checkout -b group-02 — satu branch per kelompok, jangan berbagi branch

+
+
+
+
3
+
+

Edit & Commit Berkala

+

Edit groups/group-02/index.htmlgit add .git commit -m "feat(group-02): …" — lakukan minimal 3 kali commit

+
+
+
+
4
+
+

Push ke GitHub

+

git push origin group-02 — kirim branch ke remote repository

+
+
+
+
5
+
+

Buat Pull Request di GitHub

+

Buka GitHub → pilih branch → klik "Compare & pull request" → isi nama kelompok, anggota, deskripsi konten → submit

+
+
+
+ +
08 / 12
+
+
+ + + +
+
+ +
+

Aturan & Larangan

+ Penting! +
+ +
+
+
+

✅ Yang BOLEH Dilakukan

+
+
    +
  • Edit konten di dalam #assignment-body
  • +
  • Menambah class CSS baru di style.css kelompok sendiri
  • +
  • Menambah gambar di folder groups/group-XX/
  • +
  • Mengubah judul di tag <title> dan <h1> hero
  • +
  • Mengubah teks meta (nama kelompok, tahun)
  • +
+
+
+
+

❌ Yang TIDAK BOLEH Dilakukan

+
+
    +
  • Mengubah path asset global (../../assets/global/…)
  • +
  • Menyentuh file kelompok lain
  • +
  • Mengubah layout HTML di luar #assignment-body
  • +
  • Push langsung ke branch main
  • +
  • Mengubah package.json, .gitignore, README.md
  • +
  • Menambahkan tag <script>
  • +
+ +
+
🚫
+
+

Konsekuensi Pelanggaran

+

PR yang mengubah file di luar scope kelompok akan ditolak dan diminta diperbaiki sebelum dinilai.

+
+
+
+
+ +
09 / 12
+
+
+ + + +
+
+ +
+

Tips Kolaborasi Kelompok

+ Teamwork +
+ +
+
+
🗂️
+

Bagi Bagian Konten

+

Bagi halaman menjadi beberapa seksi. Setiap anggota mengerjakan seksi yang berbeda agar tidak saling tindih.

+
+
+
💬
+

Komunikasi Aktif

+

Beritahu tim sebelum push. Kalau ada yang sedang edit, tunggu sampai selesai dan di-commit dulu.

+
+
+
📝
+

Commit Sering

+

Lebih baik commit kecil-kecil daripada satu commit besar di akhir. Lebih mudah di-review dan di-rollback.

+
+
+
🔄
+

Pull Sebelum Push

+

Selalu git pull sebelum mulai kerja agar versi lokal kamu selalu up-to-date.

+
+
+
👁️
+

Review Sesama

+

Sebelum submit PR, minta satu anggota lain untuk membaca ulang HTML yang dibuat. Empat mata lebih baik dari dua.

+
+
+
📋
+

Gunakan Issue

+

Catat tugas yang masih belum selesai sebagai GitHub Issue. Assign ke anggota yang bertanggung jawab.

+
+
+ +
10 / 12
+
+
+ + + +
+
+ +
+

Kriteria Penilaian

+ Assessment Rubric +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
KriteriaBobotIndikator
Kualitas Konten35%Informatif, terstruktur, relevan dengan tema
Penggunaan HTML25%Variatif (heading, list, tabel, gambar, quote)
Commit & Pesan20%Min. 3 commit, pesan bermakna & konvensional
Pull Request20%Deskripsi lengkap: nama anggota, ringkasan, link preview
+
+
+
+

Skala Penilaian

+
+ + + + + + + + + + + + + + + + + + + + + + +
NilaiKriteria
A (85–100)Konten lengkap, HTML bervariasi, commit > 5, PR rapi
B (70–84)Konten cukup, HTML memadai, commit ≥ 3
C (55–69)Konten minim, commit < 3, PR kurang lengkap
D (<55)Tidak mengikuti aturan scope / tidak submit PR
+ +
+
📅
+
+

Deadline

+

PR harus disubmit sebelum pertemuan berikutnya. Keterlambatan mengurangi nilai.

+
+
+
+
+ +
11 / 12
+
+
+ + + +
+
+
+ +
+

Checklist Sebelum Submit

+ Final Check +
+ +
+
+
+

Cek Konten

+
+
    +
  • Semua edit ada di dalam #assignment-body
  • +
  • Minimal gunakan: h2/h3, p, dan satu elemen list atau tabel
  • +
  • Gambar menggunakan path relatif (bukan URL eksternal asing)
  • +
  • Tidak ada tag <script>
  • +
  • Halaman tampil normal saat dibuka di browser
  • +
+ +
+

Cek Git

+
+
    +
  • Minimal 3 commit dengan pesan yang berbeda dan bermakna
  • +
  • Bekerja di branch group-XX, bukan main
  • +
  • git status menunjukkan "nothing to commit" sebelum push
  • +
+
+
+
+

Cek Pull Request

+
+
    +
  • PR dari branch group-XX ke main
  • +
  • Judul PR: "[Kelompok 02] Tugas Halaman Statis"
  • +
  • Deskripsi memuat nama semua anggota
  • +
  • Deskripsi memuat ringkasan tema konten
  • +
  • PR hanya mengubah file di groups/group-XX/
  • +
+ +
+
🎉
+
+

Selamat Mengerjakan!

+

Gunakan materi materi-git.html sebagai referensi perintah Git. Tanya dosen jika ada kendala teknis.

+
+
+
+
+ +
12 / 12
+
+
+ + +