Files
UAS_WEBGIS_AnderiSaputra_D1…/index.php
T
Anderi Saputra adec71e763 first commit
2026-06-10 17:00:19 +07:00

739 lines
17 KiB
PHP

<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Portal WebGIS yang memuat Project Infrastruktur dan Project Kemiskinan Kota Pontianak.">
<title>Portal Project WebGIS</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@600;700;800&display=swap" rel="stylesheet">
<style>
:root {
--navy: #0b2545;
--navy-light: #163b67;
--blue: #246bfd;
--blue-soft: #eaf1ff;
--orange: #f97316;
--orange-soft: #fff0e6;
--ink: #10233f;
--muted: #65758b;
--line: #dfe7f1;
--surface: #ffffff;
--background: #f4f7fb;
--shadow: 0 22px 55px rgba(13, 43, 78, .12);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
}
body {
min-height: 100vh;
color: var(--ink);
background:
radial-gradient(circle at 8% 5%, rgba(36, 107, 253, .09), transparent 25rem),
radial-gradient(circle at 92% 42%, rgba(249, 115, 22, .08), transparent 24rem),
var(--background);
font-family: "DM Sans", sans-serif;
overflow-x: hidden;
}
a {
color: inherit;
text-decoration: none;
}
.page-shell {
width: min(1180px, calc(100% - 40px));
margin: 0 auto;
}
.site-header {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 84px;
gap: 24px;
}
.brand {
display: inline-flex;
align-items: center;
gap: 12px;
font-family: "Manrope", sans-serif;
font-size: 17px;
font-weight: 800;
letter-spacing: -.02em;
}
.brand-mark {
display: grid;
place-items: center;
width: 42px;
height: 42px;
color: #fff;
background: var(--navy);
border-radius: 13px;
box-shadow: 0 8px 18px rgba(11, 37, 69, .18);
}
.brand-mark svg {
width: 23px;
height: 23px;
}
.header-note {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--muted);
font-size: 13px;
font-weight: 600;
}
.status-dot {
width: 8px;
height: 8px;
background: var(--orange);
border-radius: 50%;
box-shadow: 0 0 0 5px rgba(249, 115, 22, .12);
}
.hero {
display: grid;
grid-template-columns: 1.15fr .85fr;
align-items: center;
min-height: 430px;
padding: 58px 0 68px;
gap: 70px;
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 9px;
margin-bottom: 20px;
padding: 8px 12px;
color: var(--blue);
background: var(--blue-soft);
border-radius: 999px;
font-size: 12px;
font-weight: 700;
letter-spacing: .08em;
text-transform: uppercase;
}
.eyebrow svg {
width: 16px;
height: 16px;
}
h1 {
max-width: 720px;
color: var(--navy);
font-family: "Manrope", sans-serif;
font-size: clamp(42px, 6vw, 70px);
font-weight: 800;
line-height: 1.05;
letter-spacing: -.055em;
}
h1 span {
color: var(--blue);
}
.hero-copy {
max-width: 650px;
margin-top: 24px;
color: var(--muted);
font-size: 18px;
line-height: 1.75;
}
.hero-action {
display: inline-flex;
align-items: center;
gap: 10px;
margin-top: 30px;
padding: 13px 19px;
color: #fff;
background: var(--navy);
border-radius: 12px;
font-size: 14px;
font-weight: 700;
transition: transform .2s ease, background .2s ease;
}
.hero-action:hover {
background: var(--navy-light);
transform: translateY(-2px);
}
.hero-action svg {
width: 17px;
height: 17px;
}
.map-visual {
position: relative;
min-height: 330px;
border: 1px solid rgba(255, 255, 255, .5);
border-radius: 32px;
background:
linear-gradient(rgba(255, 255, 255, .78), rgba(255, 255, 255, .78)),
repeating-linear-gradient(35deg, transparent 0 28px, rgba(36, 107, 253, .2) 29px 31px),
repeating-linear-gradient(125deg, transparent 0 38px, rgba(249, 115, 22, .18) 39px 41px);
box-shadow: var(--shadow);
overflow: hidden;
}
.map-visual::before,
.map-visual::after {
content: "";
position: absolute;
border-radius: 50%;
filter: blur(2px);
}
.map-visual::before {
width: 210px;
height: 210px;
top: -65px;
right: -45px;
background: rgba(36, 107, 253, .12);
}
.map-visual::after {
width: 180px;
height: 180px;
bottom: -60px;
left: -40px;
background: rgba(249, 115, 22, .13);
}
.visual-center {
position: absolute;
inset: 0;
z-index: 1;
display: grid;
place-items: center;
}
.pin {
display: grid;
place-items: center;
width: 92px;
height: 92px;
color: #fff;
background: var(--blue);
border: 12px solid rgba(255, 255, 255, .96);
border-radius: 50% 50% 50% 12px;
box-shadow: 0 18px 35px rgba(36, 107, 253, .32);
transform: rotate(-45deg);
}
.pin svg {
width: 37px;
height: 37px;
transform: rotate(45deg);
}
.map-label {
position: absolute;
z-index: 2;
display: flex;
align-items: center;
gap: 10px;
padding: 10px 14px;
background: rgba(255, 255, 255, .95);
border: 1px solid var(--line);
border-radius: 12px;
box-shadow: 0 10px 25px rgba(16, 35, 63, .1);
font-size: 12px;
font-weight: 700;
}
.map-label.one {
top: 50px;
left: 28px;
}
.map-label.two {
right: 24px;
bottom: 42px;
}
.label-icon {
display: grid;
place-items: center;
width: 28px;
height: 28px;
color: var(--blue);
background: var(--blue-soft);
border-radius: 8px;
}
.map-label.two .label-icon {
color: var(--blue);
background: var(--blue-soft);
}
.label-icon svg {
width: 15px;
height: 15px;
}
.map-label.one .label-icon {
color: var(--orange);
background: var(--orange-soft);
}
.projects-section {
padding: 30px 0 84px;
}
.section-heading {
display: flex;
align-items: end;
justify-content: space-between;
margin-bottom: 28px;
gap: 20px;
}
.section-kicker {
margin-bottom: 7px;
color: var(--blue);
font-size: 12px;
font-weight: 800;
letter-spacing: .12em;
text-transform: uppercase;
}
h2 {
color: var(--navy);
font-family: "Manrope", sans-serif;
font-size: clamp(28px, 4vw, 38px);
letter-spacing: -.035em;
}
.project-count {
color: var(--muted);
font-size: 14px;
font-weight: 600;
}
.project-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 24px;
}
.project-card {
position: relative;
display: flex;
flex-direction: column;
min-height: 375px;
padding: 32px;
background: var(--surface);
border: 1px solid var(--line);
border-radius: 22px;
box-shadow: 0 12px 35px rgba(16, 35, 63, .06);
overflow: hidden;
transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.project-card::after {
content: "";
position: absolute;
width: 160px;
height: 160px;
top: -70px;
right: -55px;
background: var(--orange-soft);
border-radius: 50%;
transition: transform .3s ease;
}
.project-card.blue::after {
background: var(--blue-soft);
}
.project-card:hover {
border-color: #c9d8ec;
box-shadow: 0 20px 45px rgba(16, 35, 63, .12);
transform: translateY(-6px);
}
.project-card:hover::after {
transform: scale(1.18);
}
.card-top {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 28px;
}
.project-icon {
display: grid;
place-items: center;
width: 58px;
height: 58px;
color: var(--orange);
background: var(--orange-soft);
border-radius: 16px;
}
.blue .project-icon {
color: var(--blue);
background: var(--blue-soft);
}
.project-icon svg {
width: 29px;
height: 29px;
}
.project-number {
color: #a9b5c5;
font-family: "Manrope", sans-serif;
font-size: 13px;
font-weight: 800;
letter-spacing: .12em;
}
.project-card h3 {
color: var(--navy);
font-family: "Manrope", sans-serif;
font-size: 25px;
letter-spacing: -.025em;
}
.project-card p {
margin-top: 13px;
color: var(--muted);
font-size: 15px;
line-height: 1.7;
}
.tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 22px 0 26px;
}
.tag {
padding: 6px 10px;
color: #4f6178;
background: #f1f5f9;
border-radius: 8px;
font-size: 11px;
font-weight: 700;
}
.project-link {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
margin-top: auto;
padding: 14px 16px;
color: var(--orange);
background: var(--orange-soft);
border-radius: 12px;
font-size: 14px;
font-weight: 800;
transition: color .2s ease, background .2s ease;
}
.blue .project-link {
color: var(--blue);
background: var(--blue-soft);
}
.project-link:hover {
color: #fff;
background: var(--orange);
}
.blue .project-link:hover {
background: var(--blue);
}
.project-link svg {
width: 18px;
height: 18px;
transition: transform .2s ease;
}
.project-link:hover svg {
transform: translateX(4px);
}
footer {
border-top: 1px solid var(--line);
}
.footer-inner {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 82px;
color: var(--muted);
font-size: 13px;
gap: 20px;
}
.footer-inner strong {
color: var(--navy);
}
@media (max-width: 860px) {
.hero {
grid-template-columns: 1fr;
gap: 44px;
padding-top: 48px;
}
.hero-copy {
max-width: 720px;
}
.map-visual {
min-height: 300px;
}
}
@media (max-width: 680px) {
.page-shell {
width: min(100% - 28px, 1180px);
}
.site-header {
min-height: 74px;
}
.header-note {
display: none;
}
.hero {
min-height: auto;
padding: 40px 0 58px;
}
h1 {
font-size: clamp(39px, 13vw, 56px);
}
.hero-copy {
font-size: 16px;
}
.map-visual {
min-height: 260px;
border-radius: 24px;
}
.pin {
width: 76px;
height: 76px;
}
.map-label.one {
top: 28px;
left: 16px;
}
.map-label.two {
right: 16px;
bottom: 28px;
}
.section-heading {
align-items: start;
flex-direction: column;
}
.project-grid {
grid-template-columns: 1fr;
}
.project-card {
min-height: 360px;
padding: 26px;
}
.footer-inner {
align-items: flex-start;
flex-direction: column;
justify-content: center;
padding: 22px 0;
gap: 7px;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*,
*::before,
*::after {
transition-duration: .01ms !important;
}
}
</style>
</head>
<body>
<header class="page-shell site-header">
<a class="brand" href="./" aria-label="Portal Project WebGIS">
<span class="brand-mark" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
<path d="M4 6.5 9 4l6 2.5L20 4v13.5L15 20l-6-2.5L4 20V6.5Z"/>
<path d="M9 4v13.5M15 6.5V20"/>
</svg>
</span>
<span>Portal WebGIS</span>
</a>
<div class="header-note">
<span class="status-dot" aria-hidden="true"></span>
Dua project tersedia
</div>
</header>
<main>
<section class="page-shell hero">
<div>
<div class="eyebrow">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M12 21s7-4.35 7-11A7 7 0 1 0 5 10c0 6.65 7 11 7 11Z"/>
<circle cx="12" cy="10" r="2.5"/>
</svg>
Sistem Informasi Geografis
</div>
<h1>Jelajahi data melalui <span>peta interaktif.</span></h1>
<p class="hero-copy">
Portal terintegrasi untuk mengakses seluruh project WebGIS. Pilih project di bawah untuk melihat informasi spasial, data, dan analisis pada wilayah Kota Pontianak.
</p>
<a class="hero-action" href="#daftar-project">
Lihat daftar project
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="m6 9 6 6 6-6"/>
</svg>
</a>
</div>
<div class="map-visual" aria-hidden="true">
<div class="map-label one">
<span class="label-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M4 20V10l8-6 8 6v10"/>
<path d="M8 20v-6h8v6M3 20h18"/>
</svg>
</span>
Infrastruktur
</div>
<div class="visual-center">
<div class="pin">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
<path d="M4 6.5 9 4l6 2.5L20 4v13.5L15 20l-6-2.5L4 20V6.5Z"/>
<path d="M9 4v13.5M15 6.5V20"/>
</svg>
</div>
</div>
<div class="map-label two">
<span class="label-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/>
<circle cx="9" cy="7" r="4"/>
<path d="M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75"/>
</svg>
</span>
Kemiskinan
</div>
</div>
</section>
<section class="page-shell projects-section" id="daftar-project">
<div class="section-heading">
<div>
<div class="section-kicker">Daftar Project</div>
<h2>Pilih project untuk dibuka</h2>
</div>
<div class="project-count">2 project WebGIS</div>
</div>
<div class="project-grid">
<article class="project-card">
<div class="card-top">
<div class="project-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
<path d="M3 21h18M5 21V8l7-5 7 5v13M9 21v-5h6v5"/>
<path d="M8 10h2M14 10h2M8 13h2M14 13h2"/>
</svg>
</div>
<span class="project-number">PROJECT 01</span>
</div>
<h3>WebGIS Infrastruktur</h3>
<p>
Pemetaan fasilitas dan infrastruktur Kota Pontianak untuk membantu visualisasi lokasi serta pengelolaan data spasial.
</p>
<div class="tags" aria-label="Cakupan data">
<span class="tag">SPBU</span>
<span class="tag">Jalan</span>
<span class="tag">Kavling</span>
</div>
<a class="project-link" href="infrastruktur/">
Buka Project Infrastruktur
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M5 12h14M13 6l6 6-6 6"/>
</svg>
</a>
</article>
<article class="project-card blue">
<div class="card-top">
<div class="project-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/>
<circle cx="9" cy="7" r="4"/>
<path d="M19 8v6M16 11h6"/>
</svg>
</div>
<span class="project-number">PROJECT 02</span>
</div>
<h3>WebGIS Kemiskinan</h3>
<p>
Pemetaan kemiskinan berbasis partisipasi rumah ibadah untuk mendukung pendataan rumah, bantuan, dan analisis sosial.
</p>
<div class="tags" aria-label="Cakupan data">
<span class="tag">Data Rumah</span>
<span class="tag">Rumah Ibadah</span>
<span class="tag">Bantuan</span>
</div>
<a class="project-link" href="kemiskinan/">
Buka Project Kemiskinan
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M5 12h14M13 6l6 6-6 6"/>
</svg>
</a>
</article>
</div>
</section>
</main>
</body>
</html>