diff --git a/student-web-if-development-kit b/student-web-if-development-kit deleted file mode 160000 index b8fbc7c..0000000 --- a/student-web-if-development-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b8fbc7c7691decf30fd7796803511be7fc8546ee diff --git a/student-web-if-development-kit/.gitignore b/student-web-if-development-kit/.gitignore new file mode 100644 index 0000000..3bdd52e --- /dev/null +++ b/student-web-if-development-kit/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +.DS_Store diff --git a/student-web-if-development-kit/README.md b/student-web-if-development-kit/README.md new file mode 100644 index 0000000..d37aee3 --- /dev/null +++ b/student-web-if-development-kit/README.md @@ -0,0 +1,49 @@ +# Student-Safe Package (NPM Ready) + +Paket ini dibuat agar mahasiswa **tidak menerima source code penuh web utama**. + +## Jalankan project + +```bash +npm install +npm run dev +``` + +Buka URL dari Vite (default: `http://localhost:5173`) lalu akses launcher di `/`. + +## Script NPM + +- `npm run dev` → jalankan local dev server +- `npm run build` → build static output ke folder `dist` +- `npm run preview` → preview hasil build + +## Struktur + +- `index.html` → launcher link group +- `assets/global/` + - `hero.webp` + - `footer.png` + - `logo.png` +- `groups/group-01/{index.html, style.css}` +- `groups/group-02/{index.html, style.css}` +- `groups/group-03/{index.html, style.css}` +- `groups/group-04/{index.html, style.css}` +- `groups/group-05/{index.html, style.css}` + +## Aturan + +1. Tiap kelompok hanya mengedit foldernya sendiri. +2. Area konten yang boleh diubah hanya: + +```html +
...
+``` + +3. Jangan ubah path global asset (`../../assets/global/...`). +4. Tidak ada JS global project. + +## Output Pengumpulan + +Setiap kelompok submit perubahan di: +- `groups/group-xx/index.html` +- `groups/group-xx/style.css` (jika perlu styling tambahan) diff --git a/student-web-if-development-kit/assets/global/footer.png b/student-web-if-development-kit/assets/global/footer.png new file mode 100644 index 0000000..492a2b6 Binary files /dev/null and b/student-web-if-development-kit/assets/global/footer.png differ diff --git a/student-web-if-development-kit/assets/global/hero.webp b/student-web-if-development-kit/assets/global/hero.webp new file mode 100644 index 0000000..5a9aa84 Binary files /dev/null and b/student-web-if-development-kit/assets/global/hero.webp differ diff --git a/student-web-if-development-kit/assets/global/logo.png b/student-web-if-development-kit/assets/global/logo.png new file mode 100644 index 0000000..c7c1bb6 Binary files /dev/null and b/student-web-if-development-kit/assets/global/logo.png differ diff --git a/student-web-if-development-kit/groups/C4A/index.html b/student-web-if-development-kit/groups/C4A/index.html new file mode 100644 index 0000000..717674b --- /dev/null +++ b/student-web-if-development-kit/groups/C4A/index.html @@ -0,0 +1,60 @@ + + + + + + Group 04 - Tugas Halaman Statis + + + + + +
+ Hero +
+ Halaman Statis +

Judul Halaman Group 04

+
+
+ +
+
+
+ Kelompok 04 + 2026 +
+ +
+ Header halaman +
+ +
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

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

+ +
+
+ + +
+ + + + diff --git a/student-web-if-development-kit/groups/C4A/style.css b/student-web-if-development-kit/groups/C4A/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/student-web-if-development-kit/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/student-web-if-development-kit/groups/HabisIniSeminar/index.html b/student-web-if-development-kit/groups/HabisIniSeminar/index.html new file mode 100644 index 0000000..a14503c --- /dev/null +++ b/student-web-if-development-kit/groups/HabisIniSeminar/index.html @@ -0,0 +1,60 @@ + + + + + + Group 02 - Tugas Halaman Statis + + + + + +
+ Hero +
+ Halaman Statis +

Judul Halaman Group 02

+
+
+ +
+
+
+ Kelompok 02 + 2026 +
+ +
+ Header halaman +
+ +
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

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

+ +
+
+ + +
+ + + + diff --git a/student-web-if-development-kit/groups/HabisIniSeminar/style.css b/student-web-if-development-kit/groups/HabisIniSeminar/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/student-web-if-development-kit/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/student-web-if-development-kit/groups/HarusSelesaiKP/index.html b/student-web-if-development-kit/groups/HarusSelesaiKP/index.html new file mode 100644 index 0000000..4f6e032 --- /dev/null +++ b/student-web-if-development-kit/groups/HarusSelesaiKP/index.html @@ -0,0 +1,60 @@ + + + + + + Group 03 - Tugas Halaman Statis + + + + + +
+ Hero +
+ Halaman Statis +

Judul Halaman Group 03

+
+
+ +
+
+
+ Kelompok 03 + 2026 +
+ +
+ Header halaman +
+ +
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

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

+ +
+
+ + +
+ + + + diff --git a/student-web-if-development-kit/groups/HarusSelesaiKP/style.css b/student-web-if-development-kit/groups/HarusSelesaiKP/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/student-web-if-development-kit/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/student-web-if-development-kit/groups/Jellyfish.Corp/index.html b/student-web-if-development-kit/groups/Jellyfish.Corp/index.html new file mode 100644 index 0000000..8f38f4c --- /dev/null +++ b/student-web-if-development-kit/groups/Jellyfish.Corp/index.html @@ -0,0 +1,60 @@ + + + + + + Group 01 - Tugas Halaman Statis + + + + + +
+ Hero +
+ Halaman Statis +

Judul Halaman Group 01

+
+
+ +
+
+
+ Kelompok 01 + 2026 +
+ +
+ Header halaman +
+ +
+ +

Tulis konten halaman kelompok di sini.

+

Subjudul

+

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

+ +
+
+ + +
+ + + + diff --git a/student-web-if-development-kit/groups/Jellyfish.Corp/style.css b/student-web-if-development-kit/groups/Jellyfish.Corp/style.css new file mode 100644 index 0000000..c31a92b --- /dev/null +++ b/student-web-if-development-kit/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/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.33.12 AM (1).jpeg b/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.33.12 AM (1).jpeg new file mode 100644 index 0000000..aefed7c Binary files /dev/null and b/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.33.12 AM (1).jpeg differ diff --git a/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.33.12 AM.jpeg b/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.33.12 AM.jpeg new file mode 100644 index 0000000..3ea070a Binary files /dev/null and b/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.33.12 AM.jpeg differ diff --git a/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.34.09 AM.jpeg b/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.34.09 AM.jpeg new file mode 100644 index 0000000..f0bbc0e Binary files /dev/null and b/student-web-if-development-kit/groups/M4N1FEST/assets/WhatsApp Image 2026-05-21 at 5.34.09 AM.jpeg differ diff --git a/student-web-if-development-kit/groups/M4N1FEST/index.html b/student-web-if-development-kit/groups/M4N1FEST/index.html new file mode 100644 index 0000000..551d524 --- /dev/null +++ b/student-web-if-development-kit/groups/M4N1FEST/index.html @@ -0,0 +1,1561 @@ + + + + + + Group 05 — Alumni Informatika UNTAN + + + + + + + + +
+
+
+ + + + + PROGRAM STUDI INFORMATIKA · UNTAN PONTIANAK +
+

+ Alumni
+ Informatika +

+

UNTAN Pontianak

+ +

+ Ribuan lulusan Informatika UNTAN kini berkarya di berbagai penjuru Indonesia dan dunia. Temukan jejak mereka, inspirasi dari perjalanan mereka, dan jadilah bagian dari jaringan ini. +

+ + + +
+
+
850+
+
TOTAL ALUMNI
+
+
+
18+
+
ANGKATAN
+
+
+
150+
+
PERUSAHAAN
+
+
+
+
+ + +
+
+ + +
+ +
+
+
High Achievers
+

Alumni Informatika

+

+ Mereka membuktikan bahwa lulusan Informatika UNTAN mampu + bersaing dan berkarya di level tertinggi. +

+
+ +
+ +
+
+
+ IF +
+
Angkatan 2005
+
Izhan Fakhruzi
+
+ Dosen Tetap, Univ Muhammadiyah Pontianak & Peneliti, Universidad de Granada +
+
    +
  • M.Sc. Computer Engineering, Marmara University
  • +
  • Ph.D. in Info & Comm Tech, Universidad de Granada
  • +
  • Berpengalaman dalam penelitian AI lintas negara
  • +
+
+
+ +
+
+
+ CD +
+
Informatika UNTAN
+
Charles Darwis Hariman
+
+ Software Developer, Traxpay GmbH, Jerman +
+
    +
  • M.Sc. Computer Science, Saarland University
  • +
  • Berkarir di industri FinTech Eropa
  • +
  • Pakar sistem pembayaran digital & integrasi ERP
  • +
+
+
+ +
+
+
+ DP +
+
Angkatan 2009
+
Dona Pramana Pura
+
+ Product Manager, CX-Oriented Tech, Ai Tech +
+
    +
  • AI Practitioner berfokus pada Voice AI
  • +
  • Merancang produk teknologi berbasis Customer Experience
  • +
  • Inovator solusi AI di berbagai platform
  • +
+
+
+
+
+ + +
+
+
+ +
+
Career Path
+

Alumni Bekerja di Mana?

+

+ Sebaran industri tempat alumni berkarir. +

+ +
+
+ Instansi pemerintah + 29.41% +
+
+
+
+
+
+
+ Perusahaan swasta + 23.53% +
+
+
+
+
+
+
+ Wiraswasta/perusahaan sendiri + 14.71% +
+
+
+
+
+
+
+ BUMN/BUMD + 5.88% +
+
+
+
+
+
+
+ Organisasi non-profit/LSM + 2.94% +
+
+
+
+
+ +

+ * Data diperoleh dari data Tracer Study Untan. Diperbarui terakhir Mei 2026. +

+
+ + +
+
+ Perusahaan Tempat Alumni Berkarir +
+
+
+
+ BCA +
+ BCA +
+
+
+ BRI +
+ BRI +
+
+
+ TLKM +
+ Telkom Indonesia +
+
+
+ PLN +
+ PLN +
+
+
+ INDF +
+ Indofood Fortuna +
+
+
+ ASTR +
+ Astra Daihatsu +
+
+
+ UNVR +
+ Unilever +
+
+
+ GRAB +
+ Grab +
+
+
+ TSEL +
+ Telkomsel +
+
+
+ GIAA +
+ Garuda Indonesia +
+
+
+ BULG +
+ Perum BULOG +
+
+
+ 202+ +
+ Lainnya +
+
+

+ * Data diperoleh dari data Tracer Study Untan. Diperbarui terakhir Mei 2026. +

+
+
+
+
+ + +
+
+
Skill Distribution
+

Skill yang Dikuasai Alumni

+

+ Distribusi skill berdasarkan data form kontribusi alumni — + gambaran kompetensi nyata lulusan Informatika UNTAN. +

+
+ +
+ +
+
+ Web Development +
+
+
+ 78% +
+
+ Python / Data Science +
+
+
+ 65% +
+
+ Mobile Development +
+
+
+ 54% +
+
+ UI/UX Design +
+
+
+ 48% +
+
+ Networking / DevOps +
+
+
+ 38% +
+
+ Cybersecurity +
+
+
+ 25% +
+
+ +
+
+
+ Belum Terdata di Sini? +
+

+ Bantu kami melengkapi database skill alumni Informatika UNTAN. Kontribusikan data keahlian Anda untuk memetakan potensi nyata dari lulusan di berbagai sektor industri. +

+ +
+
+
+
+ + +
+
+
+
Statistik Alumni
+

Jumlah Alumni berdasarkan Tahun Kelulusan

+

+ Data wisudawan dan lulusan berdasarkan periode semester dan tahun kelulusan. +

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PeriodeJumlah
2024 Genap50
2024 Ganjil27
2023 Genap63
2023 Ganjil27
2022 Genap45
+
+ Sumber : BAK UNTAN +
+
+ + +
+
+
+ Grafik Jumlah Lulusan +
+
+
+ +
+
+
+
+
+ + +
+
+
+
+
Testimoni Alumni
+

+ Kata Mereka tentang Informatika UNTAN +

+
+ +
+ +
+
"
+

+ "Bagi calon mahasiswa Informatika Untan, saya berpesan untuk terus mengembangkan diri dan tidak cepat merasa puas. Perkuliahan adalah titik awal untuk membuka berbagai peluang yang lebih luas. Fokuslah pada bidang yang diminati, tingkatkan keahlian spesifik, perluas jejaring, serta kuasai bahasa asing sebagai nilai tambah. Dengan komitmen dan kemauan yang kuat, peluang untuk berkarir maupun melanjutkan studi di tingkat global akan semakin terbuka." +

+ +
+ + +
+
"
+

+ "Fondasi yang kalian bangun di Informatika Untan itu sangat berharga. Kemampuan berpikir algoritmik dan memecahkan masalah yang diasah selama kuliah adalah bekal yang akan terus relevan di mana pun kalian berkarier. Jangan takut bermimpi besar. Jika saya — yang memulai dari Pontianak — bisa sampai di Frankfurt dan berkontribusi di industri FinTech Eropa, kalian pun bisa. Yang penting adalah terus belajar, berani mengambil kesempatan, dan jangan pernah meremehkan kualitas pendidikan yang kalian terima di Untan." +

+ +
+ + +
+
"
+

+ "Fondasi yang kita peroleh dari kampus dan Himpunan merupakan wadah terbaik untuk belajar ketangguhan. Jadikanlah pengalaman tersebut sebagai sarana untuk terus terbuka terhadap perubahan. Jika kita mampu beradaptasi dengan baik, batas kemampuan kita tidak lagi ditentukan oleh geografi, melainkan seberapa jauh kita berani melangkah." +

+ +
+
+
+
+ + +
+
+
Kegiatan Tahunan
+

Temui Kami di Setiap Tahun

+

+ HMIF Informatika UNTAN menyelenggarakan dua kegiatan tahunan + besar yang selalu mengundang dan mempertemukan para alumni. +

+
+ +
+ +
+ SKBI Ramadhan +
+
+ SKBI Ramadhan + Silaturahmi Keluarga Besar Informatika +
+

+ SKBI Ramadhan adalah acara silaturahmi yang mempertemukan + seluruh keluarga besar Informatika UNTAN — mahasiswa aktif, + dosen, dan alumni dari berbagai angkatan. Kegiatan ini menjadi momen silaturahmi yang hangat di bulan Ramadhan, mempererat tali persaudaraan alumni dengan civitas akademika melalui kegiatan sosial, buka bersama, dan networking. +

+ +
+ + + + + + + @hmif_ftuntan + + + + + + + + Info lengkap di Instagram HMIF + +
+
+
+ + +
+ INFORMERS +
+
+ INFORMERS + Informatic Anniversary +
+

+ INFORMERS adalah perayaan Hari Ulang Tahun Program Studi Informatika + UNTAN. Acara besar ini mewadahi berbagai kegiatan kompetisi akademik maupun non-akademik tingkat mahasiswa, pameran inovasi IT, hiburan musik, hingga malam puncak yang mengumpulkan seluruh civitas akademika dan alumni dalam semangat dedikasi dan kebersamaan. +

+ +
+ + + + + + + @informershmif + + + + + + + + Pantau IG untuk jadwal & cara daftar + +
+
+
+
+
+ + +
+
+
+ +
+
Gabung IKA
+

Bergabung dengan Grup Alumni

+

+ Daftarkan dirimu untuk bergabung ke grup WhatsApp Ikatan + Keluarga Alumni (IKA) Informatika UNTAN. Terhubung dengan + ratusan alumni dan dapatkan info lowongan, kegiatan, dan + kolaborasi. +

+ +
+
+
1
+
+
Isi Form Pendaftaran
+

+ Masukkan nama, NIM, nomor HP, email, status pekerjaan, + dan 3 skill utamamu. +

+
+
+
+
2
+
+
Verifikasi Admin IKA
+

+ Admin IKA akan memverifikasi bahwa kamu adalah alumni + Informatika UNTAN dalam 1–2 hari kerja. +

+
+
+
+
+ + + +
+
+
Masuk Grup WhatsApp IKA
+

+ Setelah terverifikasi, kamu akan diundang ke grup + WhatsApp IKA dan langsung terhubung dengan ratusan + alumni! +

+
+
+
+ +
+
Grup IKA Informatika UNTAN
+
+
+ + + +
+
+
IKA Informatika UNTAN
+
500+ anggota aktif
+
+
+
+
+ + + +
+
+
Form Pendaftaran IKA
+

+ Isi data di bawah untuk bergabung ke grup WhatsApp alumni. +

+ + +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+ + +
+ + +
+ + +
+ +

Pilih 3 skill yang paling kamu kuasai.

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+ + + +

Data langsung tersimpan · Proses 1–2 hari kerja

+
+
+
+
+ + +
+
+ +
+
FAQ
+

+ Pertanyaan Seputar Alumni +

+ +
+
+
+ Bagaimana cara bergabung dengan grup alumni IKA? + + + + +
+
+ Isi form pendaftaran di section "Gabung IKA" di atas + dengan nama lengkap, angkatan, nomor WhatsApp, dan email + aktifmu. Setelah diverifikasi admin dalam 1–2 hari kerja, + kamu akan diundang ke grup WhatsApp IKA Informatika UNTAN. +
+
+
+
+ Berapa lama proses verifikasi pendaftaran IKA? + + + + +
+
+ Proses verifikasi biasanya memakan waktu 1–2 hari kerja. + Admin IKA akan mengecek bahwa kamu adalah alumni + Informatika UNTAN berdasarkan nama dan angkatan yang + diisi. +
+
+
+
+ Apa manfaat bergabung ke grup alumni IKA? + + + + +
+
+ Di grup IKA kamu dapat mengakses info lowongan kerja dari + sesama alumni, info kegiatan tahunan seperti SKBI Ramadhan dan + INFORMERS, kolaborasi proyek, berbagi pengalaman karir, + serta membangun koneksi profesional dengan ratusan alumni + dari berbagai angkatan dan industri. +
+
+
+
+ Apakah ada info lowongan kerja atau magang di + IKA? + + + + +
+
+ Ya! Salah satu manfaat utama grup IKA adalah alumni yang + sudah bekerja sering berbagi info lowongan dari perusahaan + mereka. Banyak anggota IKA yang mendapat pekerjaan pertama + atau berpindah karir melalui referral dari sesama alumni + di grup ini. +
+
+
+
+ Apakah ada program kerja sama industri dari Prodi + Informatika? + + + + +
+
+ Prodi Informatika UNTAN memiliki program Kerja Praktik + (KP) wajib yang menghubungkan mahasiswa dengan industri. + Info terkini tentang kerja sama industri bisa diikuti + melalui Instagram @informatika.untan. +
+
+
+
+ Bagaimana cara mengikuti kegiatan SKBI Ramadhan atau + INFORMERS? + + + + +
+
+ Info pendaftaran dan kegiatan SKBI Ramadhan dapat ditemukan di + Instagram @hmif_ftuntan. Untuk INFORMERS, pantau Instagram + @informershmif. Sebagai anggota grup IKA, kamu juga akan + mendapatkan notifikasi langsung setiap kali ada kegiatan + yang melibatkan alumni. +
+
+
+
+ Siapa saja yang bisa mendaftar ke IKA? + + + + +
+
+ Seluruh alumni Program Studi Informatika Universitas + Tanjungpura dari semua angkatan dapat mendaftar ke IKA. + Tidak ada batasan angkatan, status pekerjaan, atau + domisili. Selama kamu adalah lulusan Informatika UNTAN, + kamu berhak bergabung! +
+
+
+
+ + +
+
Kontak & Sosial Media
+

+ Temukan Kami di Instagram +

+

+ Ikuti akun Instagram resmi kami untuk informasi terbaru + seputar kegiatan alumni, info lowongan, dan update Prodi + Informatika UNTAN. +

+ + +
+ + + + + +
+
+
Instagram Resmi Prodi
+
@informatika.untan
+
+ Update akademik, kegiatan, dan info alumni +
+
+ + + + +
+ + + +
+
Siap bergabung?
+

+ Scroll ke atas dan isi form pendaftaran IKA sekarang. + Gratis, cepat, dan langsung terhubung dengan ratusan alumni! +

+ + + + + + + + Daftar IKA Sekarang + +
+
+
+
+ + + +
+ + +
+ + + + + + + diff --git a/student-web-if-development-kit/groups/M4N1FEST/style.css b/student-web-if-development-kit/groups/M4N1FEST/style.css new file mode 100644 index 0000000..1fe65c6 --- /dev/null +++ b/student-web-if-development-kit/groups/M4N1FEST/style.css @@ -0,0 +1,2010 @@ +/* ===================================================== + GROUP 05 — Alumni Informatika UNTAN + style.css — clean, professional, navy + gold theme + ===================================================== */ + +@import url("https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,900;1,700&family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap"); + +/* ── RESET & BASE ── */ +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} +html { + scroll-behavior: smooth; + font-size: 16px; +} +body { + font-family: "Roboto", Arial, sans-serif; + background: #fff; + color: #111827; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; +} +h1, +h2, +h3, +h4, +h5 { + font-family: "Roboto", Arial, sans-serif; + line-height: 1.15; +} +img { + display: block; + max-width: 100%; +} +a { + color: inherit; + text-decoration: none; +} + +/* ── CSS VARIABLES ── */ +:root { + --navy: #1a3a6b; + --brand-navy: #003150; + --navy-mid: #2352a0; + --navy-lt: #3b6cc7; + --navy-ghost: #ebf1fb; + --gold: #feb401; + --gold-lt: #ffda5a; + --gold-bg: #fffbea; + --ink: #111827; + --muted: #6b7280; + --line: #e5e7eb; + --cream: #f9fafb; + --white: #ffffff; + --radius-sm: 8px; + --radius-md: 14px; + --radius-lg: 20px; + --radius-xl: 28px; + --shadow-sm: 0 2px 8px rgba(26, 58, 107, 0.08); + --shadow-md: 0 8px 28px rgba(26, 58, 107, 0.12); + --shadow-lg: 0 16px 48px rgba(26, 58, 107, 0.16); +} + +/* ── CONTAINER ── */ +.container { + width: min(1100px, 92%); + margin-inline: auto; +} + +/* ══════════════════════════════════════════ + NAV +══════════════════════════════════════════ */ +/* ------------------------------------------ + NAV & HERO +------------------------------------------ */ +.nav { + background: #003150; + color: #fff; + border-bottom: 4px solid #feb401; + padding: 14px 0; +} +.brand { + font-size: 1.1rem; + font-weight: 700; + letter-spacing: 0.02em; +} +.cover-hero { + position: relative; + display: flex; + align-items: center; + overflow: hidden; + padding: 64px 40px; + background: linear-gradient(145deg, #0E2147 0%, #1A3A6B 55%, #1D4D9A 100%); + border-radius: 16px; + margin-bottom: 32px; + font-family: 'Plus Jakarta Sans', sans-serif; + } + .cover-hero * { + box-sizing: border-box; + } + .cover-hero .hero-mesh { + position: absolute; + inset: 0; + background-image: radial-gradient(ellipse 80% 60% at 70% 40%, rgba(245, 184, 0, 0.13) 0%, transparent 60%), radial-gradient(ellipse 50% 70% at 10% 80%, rgba(59, 108, 199, 0.22) 0%, transparent 60%); + pointer-events: none; + } + .cover-hero .hero-grid { + position: absolute; + inset: 0; + background-image: linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px); + background-size: 52px 52px; + pointer-events: none; + } + .cover-hero .hero-stripe { + position: absolute; + inset: 0; + background: repeating-linear-gradient(125deg, transparent, transparent 60px, rgba(255, 255, 255, 0.012) 60px, rgba(255, 255, 255, 0.012) 61px); + pointer-events: none; + } + .cover-hero .content-wrap { + position: relative; + z-index: 10; + width: 100%; + } + .cover-hero .hero-badge { + display: inline-flex; + align-items: center; + gap: 8px; + background: rgba(245, 184, 0, 0.12); + border: 1px solid rgba(245, 184, 0, 0.22); + border-radius: 50px; + padding: 6px 16px; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 1.5px; + text-transform: uppercase; + color: #FFDA5A; + margin-bottom: 24px; + } + .cover-hero h1 { + font-family: 'Playfair Display', serif; + font-size: clamp(2.5rem, 5vw, 4.5rem); + font-weight: 900; + color: #fff; + letter-spacing: -1.5px; + line-height: 1.06; + margin-bottom: 20px; + } + .cover-hero p.hero-sub { + font-size: 0.97rem; + line-height: 1.9; + color: rgba(255, 255, 255, 0.58); + max-width: 520px; + margin-bottom: 30px; + } + .cover-hero .hero-btns { + display: flex; + flex-wrap: wrap; + gap: 12px; + margin-bottom: 36px; + } + .cover-hero .btn-gold { + display: inline-flex; + align-items: center; + gap: 8px; + background: #F5B800; + color: #1A3A6B; + padding: 12px 22px; + border-radius: 10px; + font-size: 0.83rem; + font-weight: 700; + text-decoration: none; + transition: all 0.25s; + } + .cover-hero .btn-gold:hover { + background: #FFDA5A; + box-shadow: 0 8px 28px rgba(245, 184, 0, 0.35); + transform: translateY(-2px); + } + .cover-hero .btn-ghost-w { + display: inline-flex; + align-items: center; + gap: 8px; + border: 1.5px solid rgba(255, 255, 255, 0.25); + color: #fff; + padding: 11px 20px; + border-radius: 10px; + font-size: 0.83rem; + font-weight: 600; + text-decoration: none; + transition: all 0.25s; + } + .cover-hero .btn-ghost-w:hover { + border-color: #FFDA5A; + color: #FFDA5A; + } + .cover-hero .stat-strip { + background: rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 20px; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + max-width: 480px; + } + .cover-hero .stat-cell { + padding: 20px 18px; + border-right: 1px solid rgba(255, 255, 255, 0.07); + } + .cover-hero .stat-cell:last-child { + border-right: none; + } + .cover-hero .stat-num { + font-family: 'Playfair Display', serif; + font-size: 1.9rem; + font-weight: 900; + color: #FFDA5A; + line-height: 1; + margin: 0; + } + .cover-hero .stat-lbl { + font-size: 0.58rem; + font-weight: 700; + letter-spacing: 1.5px; + text-transform: uppercase; + color: rgba(255, 255, 255, 0.33); + margin-top: 4px; + } +.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); + opacity: 1; +} +.hero-inner { + position: relative; + z-index: 1; + padding: 36px 0 36px 0; +} +.badge { + display: inline-block; + background: #feb401; + color: #111827; + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.14em; + text-transform: uppercase; + padding: 0.2rem 0.45rem; + margin-bottom: 12px; + border: none; + border-radius: 0; +} +.hero h1, +.hero-inner h1 { + margin: 0; + font-size: clamp(1.6rem, 3.2vw, 2.8rem); + line-height: 1.2; + letter-spacing: normal; +} + +/* ------------------------------------------ + MAIN LAYOUT +------------------------------------------ */ +/* ------------------------------------------ + MAIN LAYOUT +------------------------------------------ */ +/* ------------------------------------------ + MAIN LAYOUT +------------------------------------------ */ +.layout { + display: flex; + flex-direction: column; + gap: 2rem; + padding: 2rem 0 4rem; +} +@media (min-width: 1024px) { + .layout { + /* Menghapus pembagian kolom 3/4 dengan sidebar yang kosong */ + display: block; + } +} + +.meta { + font-size: 0.78rem; + text-transform: uppercase; + color: #475569; + display: flex; + flex-wrap: wrap; + gap: 0.75rem 1rem; + margin-bottom: 1rem; +} +.cover { + background: #f8fafc; + border: 1px solid #e2e8f0; + 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 0.5em; +} +.article-body h3 { + font-size: 1.1rem; + margin: 1.4em 0 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: 0.8rem 1rem; + color: #334155; +} +.article-body a { + color: #005eb8; +} +.article-body img { + max-width: 100%; + border-radius: 8px; +} +.article-body code { + background: #f1f5f9; + padding: 0.1em 0.35em; + border-radius: 4px; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; +} + +.note { + border: 1px solid #e2e8f0; + background: #f8fafc; + padding: 1rem; +} +.note h3 { + margin: 0 0 0.5rem; + font-size: 0.76rem; + text-transform: uppercase; + letter-spacing: 0.12em; + color: #475569; +} + +.footer { + margin-top: 2rem; + background: #003150; + color: #fff; + border-top: 4px solid var(--gold); +} +.footer-inner { + display: flex; + align-items: center; + justify-content: center; + gap: 0.75rem; + padding: 1rem 0; +} +.footer-logo { + height: 28px; + width: auto; +} +.footer p { + font-size: 1rem; + color: #ffffff; + font-weight: normal; + margin: 0; +} +.footer-ornament { + width: 100%; + display: block; + opacity: 0.9; +} + +/* ------------------------------------------ + SHARED UTILITIES (used inside assignment-body) +══════════════════════════════════════════ */ +.sec { + padding: 72px 0; + margin: 0 -24px; + padding-left: 24px; + padding-right: 24px; +} +.sec-cream { + background: var(--cream); + border-radius: var(--radius-lg); + margin: 0; + padding-left: 0; + padding-right: 0; +} +.sec-navy { + background: var(--navy); + border-radius: var(--radius-lg); +} + +/* eyebrow label */ +.eyebrow { + display: inline-flex; + align-items: center; + gap: 10px; + font-size: 0.67rem; + font-weight: 700; + letter-spacing: 2.5px; + text-transform: uppercase; + color: var(--navy-mid); +} +.eyebrow::before { + content: ""; + width: 22px; + height: 2px; + background: var(--gold); + border-radius: 2px; + flex-shrink: 0; +} +.eyebrow-y { + color: var(--gold-lt); +} +.eyebrow-y::before { + background: var(--gold-lt); +} + +/* section headings */ +.sec-h2 { + font-size: clamp(1.6rem, 2.8vw, 2.3rem); + letter-spacing: -0.4px; + margin-top: 10px; + color: var(--ink); +} +.sec-h2 em { + font-style: italic; + color: var(--navy-mid); +} +.sec-h2-w { + color: #fff; +} +.sec-h2-w em { + color: var(--gold-lt); +} +.sec-sub { + font-size: 0.9rem; + line-height: 1.85; + color: var(--muted); + margin-top: 10px; +} + +/* ── BUTTONS ── */ +.btn-gold { + display: inline-flex; + align-items: center; + gap: 8px; + background: var(--gold); + color: var(--navy); + padding: 11px 22px; + border-radius: var(--radius-sm); + font-size: 0.84rem; + font-weight: 700; + transition: all 0.25s; + cursor: pointer; + border: none; +} +.btn-gold:hover { + background: var(--gold-lt); + box-shadow: 0 8px 24px rgba(245, 184, 0, 0.35); + transform: translateY(-2px); +} +.btn-ghost-b { + display: inline-flex; + align-items: center; + gap: 8px; + border: 1.5px solid var(--line); + color: var(--navy); + background: #fff; + padding: 10px 20px; + border-radius: var(--radius-sm); + font-size: 0.84rem; + font-weight: 600; + transition: all 0.25s; +} +.btn-ghost-b:hover { + border-color: var(--navy-mid); + background: var(--navy-ghost); +} +.btn-ig { + display: inline-flex; + align-items: center; + gap: 8px; + background: linear-gradient( + 135deg, + #f09433, + #e6683c, + #dc2743, + #cc2366, + #bc1888 + ); + color: #fff !important; + padding: 10px 18px; + border-radius: var(--radius-sm); + font-size: 0.82rem; + font-weight: 700; + transition: all 0.25s; +} +.btn-ig:hover { + opacity: 0.88; + transform: translateY(-2px); +} + +/* ══════════════════════════════════════════ + HIGH ACHIEVERS +══════════════════════════════════════════ */ +.achiever-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 18px; +} +@media (max-width: 900px) { + .achiever-grid { + grid-template-columns: 1fr 1fr; + } +} +@media (max-width: 500px) { + .achiever-grid { + grid-template-columns: 1fr; + } +} + +.achiever-card { + background: #fff; + border: 1px solid var(--line); + border-radius: var(--radius-lg); + overflow: hidden; + position: relative; + transition: all 0.3s; +} +.achiever-card:hover { + border-color: var(--navy-mid); + box-shadow: var(--shadow-md); + transform: translateY(-4px); +} +.crown-badge { + position: absolute; + top: 10px; + right: 10px; + background: var(--gold-bg); + border: 1px solid var(--gold); + border-radius: 50px; + padding: 3px 10px; + font-size: 0.6rem; + font-weight: 700; + letter-spacing: 1px; + text-transform: uppercase; + color: #b38500; + display: flex; + align-items: center; + gap: 4px; +} +.achiever-body { + padding: 22px 18px; +} +.achiever-avatar-circle { + width: 66px; + height: 66px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + border: 3px solid var(--navy-ghost); + margin-bottom: 12px; +} +.achiever-card:hover .achiever-avatar-circle { + border-color: var(--gold-lt); +} +.achiever-initials { + font-family: "Playfair Display", serif; + font-size: 1.1rem; + font-weight: 900; + color: var(--gold-lt); + letter-spacing: 1px; +} +.achiever-batch { + font-size: 0.6rem; + font-weight: 700; + letter-spacing: 1.5px; + text-transform: uppercase; + color: var(--navy-mid); + margin-bottom: 3px; +} +.achiever-name { + font-size: 0.93rem; + font-weight: 700; + margin-bottom: 3px; + color: var(--ink); + font-family: "Roboto", Arial, sans-serif; +} +.achiever-pos { + font-size: 0.77rem; + color: var(--muted); + line-height: 1.5; + margin-bottom: 12px; + min-height: 40px; +} +ul.achiever-achievements { + list-style: none; + padding: 0; + margin: 0; + text-align: left; + border-top: 1px dashed #e5e7eb; + padding-top: 12px; + width: 100%; +} +ul.achiever-achievements li { + font-size: 0.72rem; + color: var(--ink); + margin-bottom: 6px; + position: relative; + padding-left: 14px; +} +ul.achiever-achievements li::before { + content: "•"; + color: var(--gold); + font-weight: bold; + position: absolute; + left: 2px; + top: 0px; +} + +/* ══════════════════════════════════════════ + CAREER — INDUSTRY BARS +══════════════════════════════════════════ */ +.two-col { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 52px; + align-items: start; +} +.two-col > * { + min-width: 0; +} +@media (max-width: 760px) { + .two-col { + grid-template-columns: 1fr; + gap: 32px; + } +} + +.industry-row { + display: flex; + flex-direction: column; + gap: 4px; + margin-bottom: 14px; +} +.industry-labels { + display: flex; + justify-content: space-between; + align-items: center; +} +.industry-label { + font-size: 0.84rem; + font-weight: 700; + color: var(--ink); +} +.industry-pct { + font-size: 0.84rem; + font-weight: 700; + color: var(--navy-mid); +} +.industry-track { + height: 8px; + border-radius: 50px; + background: var(--navy-ghost); + overflow: hidden; +} +.industry-fill { + height: 100%; + border-radius: 50px; +} + +/* company logo grid */ +.logo-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; +} +@media (max-width: 500px) { + .logo-grid { + grid-template-columns: repeat(3, 1fr); + } +} +.logo-card { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + padding: 14px 10px; + background: #fff; + border: 1px solid var(--line); + border-radius: var(--radius-md); + transition: all 0.22s; + text-align: center; +} +.logo-card:hover { + border-color: var(--navy-mid); + background: var(--navy-ghost); + transform: translateY(-3px); + box-shadow: var(--shadow-sm); +} +.logo-initials { + width: 42px; + height: 42px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.7rem; + font-weight: 800; + letter-spacing: 0.3px; +} +.logo-name { + font-size: 0.64rem; + font-weight: 600; + color: #374151; +} + +/* career info box */ +.career-info-box { + margin-top: 14px; + background: var(--navy-ghost); + border-radius: var(--radius-md); + padding: 14px 16px; + border-left: 3px solid var(--gold); +} +.career-info-box p { + font-size: 0.8rem; + color: #374151; + line-height: 1.7; +} + +/* ══════════════════════════════════════════ + SKILL DISTRIBUTION +══════════════════════════════════════════ */ +.skill-row { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 0; + border-bottom: 1px solid #f3f4f6; +} +.skill-row:last-child { + border-bottom: none; +} +.skill-label { + font-size: 0.82rem; + font-weight: 600; + min-width: 165px; + color: var(--ink); +} +.skill-track { + flex: 1; + height: 7px; + border-radius: 50px; + background: var(--navy-ghost); + overflow: hidden; +} +.skill-fill { + height: 100%; + border-radius: 50px; + background: linear-gradient(90deg, var(--navy), var(--navy-lt)); +} +.skill-pct { + font-size: 0.82rem; + font-weight: 700; + color: var(--navy); + min-width: 34px; + text-align: right; +} + +/* skill stat box */ +.skill-stat-box { + background: var(--navy); + border-radius: var(--radius-lg); + padding: 30px; + position: relative; + overflow: hidden; +} +.skill-stat-box::before { + content: ""; + position: absolute; + top: -20px; + right: -20px; + width: 110px; + height: 110px; + border-radius: 50%; + background: rgba(245, 184, 0, 0.1); +} +.skill-stat-box::after { + content: ""; + position: absolute; + bottom: -28px; + left: -18px; + width: 90px; + height: 90px; + border-radius: 50%; + background: rgba(59, 108, 199, 0.15); +} +.skill-big-num { + font-family: "Playfair Display", serif; + font-size: 3rem; + font-weight: 900; + color: var(--gold-lt); + line-height: 1; + margin-bottom: 6px; + position: relative; + z-index: 1; +} +.skill-stat-title { + font-size: 0.95rem; + font-weight: 700; + color: #fff; + margin-bottom: 8px; + position: relative; + z-index: 1; +} +.skill-stat-sub { + font-size: 0.8rem; + color: rgba(255, 255, 255, 0.5); + line-height: 1.7; + margin-bottom: 18px; + position: relative; + z-index: 1; +} +.skill-stat-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 12px; + background: rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 8px; + margin-bottom: 8px; + position: relative; + z-index: 1; +} +.skill-stat-row:last-child { + margin-bottom: 0; +} +.skill-stat-key { + font-size: 0.78rem; + color: rgba(255, 255, 255, 0.6); +} +.skill-stat-val { + font-size: 0.78rem; + font-weight: 700; + color: var(--gold-lt); +} + +/* ══════════════════════════════════════════ + STATISTIK — SUMMARY CARDS + CHART +══════════════════════════════════════════ */ +.stat-summary-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; + margin-bottom: 36px; +} +@media (max-width: 760px) { + .stat-summary-grid { + grid-template-columns: 1fr 1fr; + } +} + +.sum-card { + border-radius: var(--radius-md); + padding: 20px; + position: relative; + overflow: hidden; +} +.sum-card-navy { + background: var(--navy); +} +.sum-card-white { + background: #fff; + border: 1px solid var(--line); +} +.sum-num-large { + font-family: "Playfair Display", serif; + font-size: 1.9rem; + font-weight: 900; + line-height: 1; + margin-bottom: 4px; +} +.sum-num-navy { + color: var(--gold-lt); +} +.sum-num-blue { + color: var(--navy-mid); +} +.sum-num-green { + color: #059669; +} +.sum-label { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; +} +.sum-label-w { + color: rgba(255, 255, 255, 0.5); +} +.sum-label-g { + color: var(--muted); +} + +.chart-box { + background: #fff; + border: 1px solid var(--line); + border-radius: var(--radius-lg); + padding: 28px; + box-shadow: var(--shadow-sm); +} +.chart-header { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: 12px; + margin-bottom: 24px; +} +.chart-title { + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 1.5px; + text-transform: uppercase; + color: var(--muted); +} +.chart-legend { + display: flex; + align-items: center; + gap: 14px; + flex-wrap: wrap; +} +.legend-dot { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 0.72rem; + color: var(--muted); +} +.legend-dot span { + width: 12px; + height: 12px; + border-radius: 3px; + display: inline-block; +} + +/* bar chart (CSS-only) */ +.bar-chart-wrap { + overflow-x: auto; +} +.bar-chart { + display: flex; + align-items: flex-end; + gap: 6px; + height: 200px; + padding-bottom: 32px; + position: relative; + min-width: 480px; +} +.bar-chart::before { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 32px; + top: 0; + background: repeating-linear-gradient( + to top, + #f3f4f6 0, + #f3f4f6 1px, + transparent 1px, + transparent 25% + ); +} +.bar-group { + flex: 1; + display: flex; + align-items: flex-end; + gap: 3px; + position: relative; +} +.bar { + flex: 1; + border-radius: 5px 5px 0 0; + position: relative; + min-width: 12px; + transition: opacity 0.2s; +} +.bar:hover { + opacity: 0.8; +} +.bar-navy { + background: rgba(26, 58, 107, 0.85); +} +.bar-gold { + background: rgba(245, 184, 0, 0.85); +} +.bar-label { + position: absolute; + bottom: -28px; + left: 50%; + transform: translateX(-50%); + font-size: 0.68rem; + font-weight: 600; + color: var(--muted); + white-space: nowrap; +} + +#career, +#database, +#kontribusi { + background: #f9fafb; + padding: 52px 0; + margin: 8px 0; + position: relative; + overflow: hidden; + width: 100vw; + left: 50%; + right: 50%; + margin-left: -50vw; + margin-right: -50vw; + box-sizing: border-box; +} + +@media (max-width: 480px) { + #database table th, + #database table td { + padding: 10px 12px !important; + font-size: 0.8rem !important; + } + .chart-box { + padding: 16px; + } +} + +.section-inner { + width: min(1100px, 92%); + margin-inline: auto; + position: relative; + z-index: 1; +} + +/* ══════════════════════════════════════════ + TESTIMONIALS +══════════════════════════════════════════ */ +#testimoni { + background: #1a3a6b; + padding: 52px 0; + margin: 8px 0; + position: relative; + overflow: hidden; + width: 100vw; + left: 50%; + right: 50%; + margin-left: -50vw; + margin-right: -50vw; + box-sizing: border-box; +} +.testi-section-inner { + width: min(1100px, 92%); + margin-inline: auto; + position: relative; + z-index: 1; +} +.testi-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 18px; +} +@media (max-width: 660px) { + .testi-grid { + grid-template-columns: 1fr; + } +} +.testi-card { + background: #fff; + border: 1px solid var(--line); + border-radius: var(--radius-lg); + padding: 26px 22px; + position: relative; + transition: all 0.3s; + display: flex; + flex-direction: column; +} +.testi-card:hover { + border-color: var(--navy-mid); + box-shadow: var(--shadow-md); + transform: translateY(-4px); +} +.testi-quote-mark { + position: absolute; + top: 12px; + left: 20px; + font-family: "Playfair Display", serif; + font-size: 3.5rem; + color: var(--navy-ghost); + line-height: 1; + pointer-events: none; + opacity: 0.5; +} +.testi-text { + font-size: 0.88rem; + line-height: 1.85; + color: #374151; + font-style: italic; + margin-bottom: 18px; +} +.testi-footer { + display: flex; + align-items: center; + gap: 12px; + border-top: 1px solid #f3f4f6; + padding-top: 14px; + margin-top: auto; +} +.testi-avatar { + width: 42px; + height: 42px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + border: 2px solid var(--navy-ghost); + flex-shrink: 0; + font-size: 0.76rem; + font-weight: 800; + color: #fff; + font-family: "Roboto", Arial, sans-serif; +} +.testi-meta { + flex: 1; +} +.testi-name { + font-size: 0.88rem; + font-weight: 700; + color: var(--ink); +} +.testi-role { + font-size: 0.74rem; + color: var(--muted); + margin-top: 1px; +} +.stars { + display: flex; + gap: 2px; +} +.star { + width: 12px; + height: 12px; + background: var(--gold); + clip-path: polygon( + 50% 0%, + 61% 35%, + 98% 35%, + 68% 57%, + 79% 91%, + 50% 70%, + 21% 91%, + 32% 57%, + 2% 35%, + 39% 35% + ); +} +.star-empty { + background: #d1d5db; +} + +/* ══════════════════════════════════════════ + KEGIATAN +══════════════════════════════════════════ */ +.event-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 24px; +} +@media (max-width: 660px) { + .event-grid { + grid-template-columns: 1fr; + } +} + +.event-card { + background: #fff; + border: 1px solid var(--line); + border-radius: var(--radius-lg); + overflow: hidden; + transition: all 0.3s; +} +.event-card:hover { + border-color: var(--navy-mid); + box-shadow: var(--shadow-md); + transform: translateY(-4px); +} +.event-card-coming { + border-color: #fde68a; +} +.event-banner { + width: 100%; + height: 180px; + display: flex; + align-items: center; + justify-content: center; + position: relative; +} +.event-banner-done { + background: linear-gradient(135deg, var(--navy), #2352a0); +} +.event-banner-soon { + background: linear-gradient(135deg, #2352a0, var(--navy)); +} +.event-banner svg { + opacity: 0.35; +} +.ribbon { + position: absolute; + top: 14px; + right: -1px; + background: var(--gold); + color: var(--navy); + font-size: 0.6rem; + font-weight: 800; + letter-spacing: 1px; + text-transform: uppercase; + padding: 5px 14px; +} +.event-body { + padding: 22px; +} +.event-title-row { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; + margin-bottom: 12px; +} +.event-name { + font-size: 0.98rem; + font-weight: 800; + color: var(--navy); + font-family: "Playfair Display", serif; +} +.event-badge { + display: inline-flex; + align-items: center; + gap: 5px; + padding: 3px 10px; + border-radius: 50px; + font-size: 0.6rem; + font-weight: 700; + letter-spacing: 1px; + text-transform: uppercase; +} +.badge-done { + background: #dcfce7; + color: #15803d; + border: 1px solid #bbf7d0; +} +.badge-soon { + background: #fef9c3; + color: #b45309; + border: 1px solid #fde68a; +} +.event-desc { + font-size: 0.84rem; + color: #374151; + line-height: 1.75; + margin-bottom: 16px; +} +.event-info-box { + border-radius: var(--radius-sm); + padding: 12px 14px; + margin-bottom: 14px; +} +.event-info-box-done { + background: var(--cream); + border: 1px solid var(--line); +} +.event-info-box-soon { + background: var(--gold-bg); + border: 1px solid #fde68a; +} +.event-info-label { + font-size: 0.66rem; + font-weight: 700; + letter-spacing: 1.5px; + text-transform: uppercase; + margin-bottom: 8px; +} +.event-info-label-done { + color: var(--navy-mid); +} +.event-info-label-soon { + color: #b38500; +} +.schedule-row { + display: flex; + align-items: flex-start; + gap: 8px; + padding: 6px 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} +.schedule-row:last-child { + border-bottom: none; +} +.schedule-icon { + flex-shrink: 0; + margin-top: 1px; +} +.schedule-title { + font-size: 0.74rem; + font-weight: 700; + color: var(--ink); +} +.schedule-sub { + font-size: 0.7rem; + color: var(--muted); +} +.event-actions { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} +.event-info-note { + display: inline-flex; + align-items: center; + gap: 5px; + font-size: 0.74rem; + color: var(--muted); +} + +/* ══════════════════════════════════════════ + FORM / JOIN IKA +══════════════════════════════════════════ */ +.step-list { + display: flex; + flex-direction: column; + gap: 14px; + margin-bottom: 26px; +} +.step-row { + display: flex; + gap: 14px; + align-items: flex-start; +} +.step-num { + width: 34px; + height: 34px; + border-radius: 50%; + background: var(--navy); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + margin-top: 2px; + font-size: 0.8rem; + font-weight: 800; + color: var(--gold-lt); +} +.step-num-done { + background: #22c55e; +} +.step-h { + font-size: 0.88rem; + font-weight: 700; + margin-bottom: 2px; + color: var(--ink); +} +.step-p { + font-size: 0.8rem; + color: var(--muted); + line-height: 1.7; +} + +.group-highlight { + background: var(--navy); + border-radius: var(--radius-md); + padding: 18px 20px; + position: relative; + overflow: hidden; +} +.group-highlight::before { + content: ""; + position: absolute; + top: -14px; + right: -14px; + width: 70px; + height: 70px; + border-radius: 50%; + background: rgba(245, 184, 0, 0.12); +} +.group-ey { + font-size: 0.66rem; + font-weight: 700; + letter-spacing: 2px; + text-transform: uppercase; + color: var(--gold-lt); + margin-bottom: 10px; +} +.group-inner { + display: flex; + align-items: center; + gap: 14px; +} +.group-wa-icon { + width: 42px; + height: 42px; + border-radius: 50%; + background: #22c55e; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.group-title { + font-size: 0.93rem; + font-weight: 700; + color: #fff; +} +.group-member { + font-size: 0.76rem; + color: rgba(255, 255, 255, 0.5); + margin-top: 1px; +} + +/* form card */ +.form-card { + background: #fff; + border: 1px solid var(--line); + border-radius: var(--radius-lg); + padding: 26px 22px; + box-shadow: var(--shadow-sm); +} +.form-card-title { + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 2px; + text-transform: uppercase; + color: var(--navy-mid); + margin-bottom: 4px; +} +.form-card-sub { + font-size: 0.78rem; + color: #9ca3af; + margin-bottom: 18px; +} +.form-group { + margin-bottom: 14px; +} +.form-label { + display: block; + font-size: 0.78rem; + font-weight: 700; + color: #374151; + margin-bottom: 5px; +} +.form-input { + width: 100%; + padding: 10px 13px; + border: 1.5px solid var(--line); + border-radius: var(--radius-sm); + font-size: 0.87rem; + font-family: "Roboto", Arial, sans-serif; + color: var(--ink); + background: var(--cream); + outline: none; +} +.form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; +} +@media (max-width: 440px) { + .form-row { + grid-template-columns: 1fr; + } +} +.form-row-3 { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 10px; +} +@media (max-width: 440px) { + .form-row-3 { + grid-template-columns: 1fr; + } +} +.form-consent { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 11px 13px; + border: 1.5px solid var(--line); + border-radius: var(--radius-sm); + background: var(--cream); +} +.form-checkbox { + width: 16px; + height: 16px; + border: 2px solid var(--navy-mid); + border-radius: 4px; + flex-shrink: 0; + margin-top: 1px; + display: flex; + align-items: center; + justify-content: center; +} +.form-consent-text { + font-size: 0.76rem; + color: var(--muted); + line-height: 1.6; +} +.form-cta-note { + font-size: 0.72rem; + color: #9ca3af; + text-align: center; + margin-top: 8px; +} +.form-note-optional { + font-weight: 400; + color: #9ca3af; +} + +/* ══════════════════════════════════════════ + FAQ +══════════════════════════════════════════ */ +.faq-list { + display: flex; + flex-direction: column; + gap: 8px; +} +.faq-item { + border: 1px solid var(--line); + border-radius: var(--radius-md); + overflow: hidden; +} +.faq-q { + display: flex; + align-items: center; + justify-content: space-between; + padding: 15px 18px; + cursor: pointer; + background: #fff; + font-size: 0.88rem; + font-weight: 700; + color: var(--ink); + gap: 12px; + transition: background 0.2s; + user-select: none; +} +.faq-q:hover { + background: var(--cream); +} +.faq-item.open .faq-q { + background: var(--navy-ghost); + color: var(--navy); +} +.faq-icon { + color: var(--muted); + flex-shrink: 0; + transition: transform 0.25s; +} +.faq-item.open .faq-icon { + transform: rotate(45deg); + color: var(--navy-mid); +} +.faq-a { + display: none; + padding: 0 18px 14px; + font-size: 0.85rem; + color: var(--muted); + line-height: 1.8; + background: #fff; +} +.faq-item.open .faq-a { + display: block; +} + +/* ══════════════════════════════════════════ + CONTACT / INSTAGRAM +══════════════════════════════════════════ */ +.ig-main-card { + display: flex; + align-items: center; + gap: 14px; + padding: 18px 20px; + border: 2px solid var(--line); + background: #fff; + border-radius: var(--radius-lg); + text-decoration: none; + transition: all 0.3s; + margin-bottom: 14px; +} +.ig-main-card:hover { + border-color: #e1306c; + background: #fff5f7; + transform: translateY(-3px); +} +.ig-icon-lg { + width: 52px; + height: 52px; + border-radius: 14px; + background: linear-gradient( + 135deg, + #f09433, + #e6683c, + #dc2743, + #cc2366, + #bc1888 + ); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.ig-main-label { + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 1px; + text-transform: uppercase; + color: #9ca3af; + margin-bottom: 2px; +} +.ig-main-handle { + font-size: 0.98rem; + font-weight: 800; + color: var(--ink); +} +.ig-main-sub { + font-size: 0.74rem; + color: var(--muted); + margin-top: 1px; +} +.ig-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-bottom: 22px; +} +.ig-card { + display: flex; + flex-direction: column; + align-items: center; + gap: 7px; + padding: 14px 10px; + border: 1px solid var(--line); + background: #fff; + border-radius: var(--radius-md); + text-decoration: none; + transition: all 0.25s; + text-align: center; +} +.ig-card:hover { + border-color: #e1306c; + transform: translateY(-2px); +} +.ig-icon-sm { + width: 38px; + height: 38px; + border-radius: 10px; + background: linear-gradient(135deg, #f09433, #dc2743, #bc1888); + display: flex; + align-items: center; + justify-content: center; +} +.ig-handle { + font-size: 0.74rem; + font-weight: 700; + color: var(--ink); +} +.ig-sub { + font-size: 0.67rem; + color: #9ca3af; +} +.cta-box { + background: var(--cream); + border: 1px solid var(--line); + border-radius: var(--radius-md); + padding: 18px 20px; +} +.cta-box-ey { + font-size: 0.7rem; + font-weight: 700; + letter-spacing: 1px; + text-transform: uppercase; + color: var(--muted); + margin-bottom: 7px; +} +.cta-box-p { + font-size: 0.84rem; + color: #374151; + line-height: 1.7; + margin-bottom: 12px; +} + +/* ══════════════════════════════════════════ + REVEAL ANIMATION +══════════════════════════════════════════ */ +.rv { + opacity: 0; + transform: translateY(18px); + transition: + opacity 0.6s ease, + transform 0.6s ease; +} +.rv.in { + opacity: 1; + transform: none; +} +.d1 { + transition-delay: 0.06s; +} +.d2 { + transition-delay: 0.12s; +} +.d3 { + transition-delay: 0.18s; +} +.d4 { + transition-delay: 0.24s; +} + +/* section title block (centered) */ +.sec-title-center { + text-align: center; + margin-bottom: 48px; +} +.sec-title-center .eyebrow { + justify-content: center; +} + +/* small note text */ +.note-tiny { + font-size: 0.72rem; + color: #9ca3af; + margin-top: 12px; +} + +/* Responsive Styles for hero section */ +@media (max-width: 768px) { + .cover-hero { + padding: 40px 24px; + } +} +@media (max-width: 640px) { + .cover-hero .stat-strip { + grid-template-columns: repeat(3, 1fr); + } + .cover-hero .stat-cell { + padding: 14px 10px; + } + .cover-hero .stat-num { + font-size: 1.5rem; + } + .cover-hero .hero-badge { + font-size: 0.6rem; + padding: 5px 12px; + } +} +@media (max-width: 480px) { + .cover-hero .hero-btns { + flex-direction: column; + } + .cover-hero .btn-gold, .cover-hero .btn-ghost-w { + width: 100%; + justify-content: center; + } +} + +/* Responsive Header & Footer */ +@media (max-width: 640px) { + .nav { + padding: 12px 16px; + text-align: center; + } + .brand { + font-size: 0.95rem; + } + .footer-inner { + flex-direction: column; + gap: 12px; + padding: 24px 16px; + text-align: center; + } + .footer p { + font-size: 0.85rem; + } + .cover-hero h1 { + font-size: 2.2rem; + line-height: 1.15; + } + .cover-hero p.hero-sub { + font-size: 0.85rem; + } +} + +/* Fix Grid Blowout */ +.layout > * { + min-width: 0; +} +#assignment-body { + min-width: 0; +} + +/* ===================================================== + CUSTOM HERO FOR M4N1FEST + ===================================================== */ +.hero-custom.custom-hero-m4n1fest { + background-color: #1a3a6b; + background-image: + linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), + linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px); + background-size: 40px 40px; + color: white; + padding: 80px 24px; + border-radius: 0px; + margin-bottom: 30px; + position: relative; + overflow: hidden; +} + +.hero-custom .custom-hero-container { + max-width: 1000px; + margin: 0 auto; + position: relative; + z-index: 2; +} + +.hero-custom .custom-hero-label { + display: inline-flex; + align-items: center; + background-color: rgba(26, 58, 107, 0.5); /* slightly lighter for contrast, or bordered */ + border: 1px solid rgba(245, 184, 0, 0.3); + color: #F5B800; + font-size: 0.75rem; + font-weight: 700; + letter-spacing: 1px; + padding: 6px 16px; + border-radius: 50px; + margin-bottom: 24px; +} + +.hero-custom .custom-hero-title { + font-size: 3.5rem; + line-height: 1.1; + margin-bottom: 8px; + font-weight: 900; +} + +.hero-custom .custom-hero-subtitle { + font-size: 1.7rem; + font-weight: 700; + margin-bottom: 24px; + color: #fff; +} + +.hero-custom .custom-serif { + font-family: inherit; /* Fallback if not loaded */ +} + +/* If you want to use the Playfair Display for serif based on M4N1FEST's import */ +.hero-custom .custom-serif { + font-family: "Playfair Display", serif; + font-style: italic; +} + +.hero-custom .custom-text-yellow { + color: #F5B800; +} + +.hero-custom .custom-hero-desc { + font-size: 1.05rem; + line-height: 1.6; + max-width: 580px; + color: #d1d5db; + margin-bottom: 32px; +} + +.hero-custom .custom-hero-buttons { + display: flex; + gap: 16px; + margin-bottom: 56px; + flex-wrap: wrap; +} + +.hero-custom .custom-btn-primary { + display: inline-flex; + align-items: center; + background-color: #F5B800; + color: #0f172a; + font-weight: 700; + font-size: 0.95rem; + padding: 12px 24px; + border-radius: 8px; + transition: opacity 0.2s; +} + +.hero-custom .custom-btn-primary:hover { + opacity: 0.9; +} + +.hero-custom .custom-btn-secondary { + display: inline-flex; + align-items: center; + background-color: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.15); + color: white; + font-weight: 600; + font-size: 0.95rem; + padding: 12px 24px; + border-radius: 8px; + transition: background-color 0.2s; +} + +.hero-custom .custom-btn-secondary:hover { + background-color: rgba(255, 255, 255, 0.12); +} + +.hero-custom .custom-stats { + display: flex; + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 12px; + display: inline-flex; + flex-wrap: wrap; +} + +.hero-custom .custom-stat-box { + padding: 20px 32px; + border-right: 1px solid rgba(255, 255, 255, 0.1); +} + +.hero-custom .custom-stat-num { + font-size: 2rem; + font-weight: 900; + color: #F5B800; + margin-bottom: 4px; +} + +.hero-custom .custom-stat-plus { + font-size: 1.4rem; + font-style: normal; + vertical-align: super; +} + +.hero-custom .custom-stat-label { + font-size: 0.75rem; + letter-spacing: 1px; + font-weight: 700; + color: #9ca3af; +} + +@media (max-width: 640px) { + .hero-custom .custom-hero-title { + font-size: 2.5rem; + } + .hero-custom .custom-stats { + flex-direction: column; + border-right: none; + width: 100%; + } + .hero-custom .custom-stat-box { + border-right: none; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + text-align: center; + } + .hero-custom .custom-stat-box:last-child { + border-bottom: none; + } + .hero-custom .custom-hero-buttons { + flex-direction: column; + } + .hero-custom .custom-btn-primary, + .hero-custom .custom-btn-secondary { + width: 100%; + justify-content: center; + } +} + diff --git a/student-web-if-development-kit/index.html b/student-web-if-development-kit/index.html new file mode 100644 index 0000000..92564df --- /dev/null +++ b/student-web-if-development-kit/index.html @@ -0,0 +1,34 @@ + + + + + + Web Student Safe - Launcher + + + +
+
+

Web Student Safe

+

Launcher untuk akses halaman tiap kelompok.

+ +
+
+ + diff --git a/student-web-if-development-kit/package-lock.json b/student-web-if-development-kit/package-lock.json new file mode 100644 index 0000000..a16578c --- /dev/null +++ b/student-web-if-development-kit/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/student-web-if-development-kit/package.json b/student-web-if-development-kit/package.json new file mode 100644 index 0000000..31e8272 --- /dev/null +++ b/student-web-if-development-kit/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" + } +}