initial commit
This commit is contained in:
+494
@@ -0,0 +1,494 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="id">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Portfolio WebGIS – Cindy Dyra Islamay</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
:root{
|
||||
--mint:#2ECC8E;--mint-soft:#E6F9F2;--mint-mid:#A8EDD0;
|
||||
--sky:#4FAAED;--sky-soft:#EAF4FD;
|
||||
--coral:#FF7E6B;--coral-soft:#FFF0EE;
|
||||
--amber:#F5A623;--amber-soft:#FEF5E7;
|
||||
--white:#FFFFFF;--surface:#F7FAFA;--border:#E4EEF0;
|
||||
--text-primary:#1A2B38;--text-secondary:#4A6274;--text-muted:#8AACBA;
|
||||
--r-sm:10px;--r-md:16px;--r-lg:24px;--r-xl:32px
|
||||
}
|
||||
html{scroll-behavior:smooth}
|
||||
body{font-family:'Plus Jakarta Sans',sans-serif;background:var(--white);color:var(--text-primary);overflow-x:hidden;line-height:1.6}
|
||||
|
||||
/* ── NAV ── */
|
||||
nav{position:sticky;top:0;z-index:100;background:rgba(255,255,255,0.88);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--border);padding:0 clamp(20px,5vw,80px)}
|
||||
.nav-inner{max-width:1120px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;height:60px}
|
||||
.nav-brand{font-size:15px;font-weight:700;color:var(--text-primary);text-decoration:none;display:flex;align-items:center;gap:8px}
|
||||
.nav-dot{width:8px;height:8px;border-radius:50%;background:var(--mint)}
|
||||
.nav-badge{font-size:12px;font-weight:600;color:var(--mint);background:var(--mint-soft);padding:4px 12px;border-radius:100px;border:1px solid var(--mint-mid)}
|
||||
|
||||
/* ── HERO ── */
|
||||
.hero{background:var(--white);padding:80px clamp(20px,5vw,80px) 0;position:relative;overflow:hidden}
|
||||
.hero::after{content:'';position:absolute;bottom:0;left:0;right:0;height:120px;background:linear-gradient(to bottom,transparent,var(--surface))}
|
||||
.hero-bg-circle{position:absolute;border-radius:50%;pointer-events:none}
|
||||
.hero-bg-circle.c1{width:480px;height:480px;background:radial-gradient(circle,#D4F5E8 0%,transparent 70%);top:-80px;right:-60px}
|
||||
.hero-bg-circle.c2{width:320px;height:320px;background:radial-gradient(circle,#DFF0FC 0%,transparent 70%);bottom:40px;left:-80px}
|
||||
.hero-inner{max-width:1120px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center;position:relative;z-index:1}
|
||||
.hero-text{}
|
||||
.hero-pill{display:inline-flex;align-items:center;gap:8px;background:var(--mint-soft);color:#1A7A52;font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:6px 14px;border-radius:100px;border:1px solid var(--mint-mid);margin-bottom:24px}
|
||||
.hero-pill-dot{width:6px;height:6px;border-radius:50%;background:var(--mint);animation:blink 2s ease-in-out infinite}
|
||||
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
|
||||
.hero-title{font-size:clamp(2rem,4.5vw,3.2rem);font-weight:800;line-height:1.1;color:var(--text-primary);margin-bottom:20px}
|
||||
.hero-title em{font-style:normal;color:var(--mint)}
|
||||
.hero-subtitle{font-size:1.05rem;color:var(--text-secondary);line-height:1.75;margin-bottom:36px;max-width:460px}
|
||||
.hero-identity{display:flex;align-items:center;gap:14px}
|
||||
.hero-avatar{width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,var(--mint),var(--sky));display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:800;color:#fff;flex-shrink:0}
|
||||
.hero-name{font-size:.95rem;font-weight:700;color:var(--text-primary)}
|
||||
.hero-nim{font-size:.82rem;color:var(--text-muted);margin-top:2px}
|
||||
.hero-visual{display:flex;justify-content:center;align-items:center;padding-bottom:40px}
|
||||
.hero-globe-wrap{position:relative;width:360px;height:360px}
|
||||
.globe-float{animation:float 6s ease-in-out infinite}
|
||||
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-16px)}}
|
||||
.globe-ring{position:absolute;border-radius:50%;border:1.5px dashed}
|
||||
.globe-ring.r1{width:420px;height:420px;top:50%;left:50%;transform:translate(-50%,-50%);border-color:rgba(46,204,142,.15);animation:spin 24s linear infinite}
|
||||
.globe-ring.r2{width:500px;height:500px;top:50%;left:50%;transform:translate(-50%,-50%);border-color:rgba(79,170,237,.1);animation:spin 36s linear infinite reverse}
|
||||
@keyframes spin{from{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(360deg)}}
|
||||
|
||||
/* ── SECTION BRIDGE ── */
|
||||
.section-bridge{background:var(--surface);padding:48px clamp(20px,5vw,80px)}
|
||||
.bridge-inner{max-width:1120px;margin:0 auto;display:flex;gap:24px;flex-wrap:wrap}
|
||||
.bridge-card{flex:1;min-width:200px;background:var(--white);border-radius:var(--r-md);border:1px solid var(--border);padding:24px;display:flex;align-items:flex-start;gap:16px;transition:transform .25s,box-shadow .25s}
|
||||
.bridge-card:hover{transform:translateY(-4px);box-shadow:0 12px 32px rgba(0,80,60,.07)}
|
||||
.bridge-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
|
||||
.bridge-icon svg{width:22px;height:22px}
|
||||
.bridge-label{font-size:.8rem;color:var(--text-muted);font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px}
|
||||
.bridge-value{font-size:1.1rem;font-weight:700;color:var(--text-primary)}
|
||||
|
||||
/* ── PROJECTS SECTION ── */
|
||||
.projects{background:var(--white);padding:80px clamp(20px,5vw,80px)}
|
||||
.section-head{text-align:center;margin-bottom:60px}
|
||||
.section-eyebrow{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--mint);margin-bottom:12px}
|
||||
.section-title{font-size:clamp(1.6rem,3vw,2.2rem);font-weight:800;color:var(--text-primary);line-height:1.2}
|
||||
.section-desc{font-size:.98rem;color:var(--text-secondary);margin-top:12px;max-width:480px;margin-left:auto;margin-right:auto;line-height:1.7}
|
||||
|
||||
/* ── CARDS ── */
|
||||
.cards{max-width:1120px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:28px}
|
||||
.card{background:var(--white);border:1px solid var(--border);border-radius:var(--r-xl);overflow:hidden;display:flex;flex-direction:column;transition:transform .3s cubic-bezier(.25,.8,.25,1),box-shadow .3s;opacity:0;transform:translateY(32px)}
|
||||
.card.in{opacity:1;transform:translateY(0);transition:opacity .55s ease,transform .55s ease,box-shadow .3s,border-color .3s}
|
||||
.card:hover{transform:translateY(-8px)!important;box-shadow:0 24px 56px rgba(0,0,0,.1)}
|
||||
.card-thumb{height:180px;position:relative;overflow:hidden;flex-shrink:0;display:flex;align-items:center;justify-content:center}
|
||||
.card-thumb-dots{position:absolute;inset:0;background-image:radial-gradient(circle,rgba(255,255,255,.5) 1px,transparent 1px);background-size:20px 20px}
|
||||
.card-number{position:absolute;top:16px;left:16px;width:32px;height:32px;border-radius:10px;background:rgba(255,255,255,.9);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;color:var(--text-primary)}
|
||||
.card-icon-wrap{width:80px;height:80px;border-radius:24px;background:rgba(255,255,255,.9);display:flex;align-items:center;justify-content:center;position:relative;z-index:1;transition:transform .3s}
|
||||
.card:hover .card-icon-wrap{transform:scale(1.08) rotate(-3deg)}
|
||||
.card-icon-wrap svg{width:40px;height:40px}
|
||||
.card-body{padding:28px;flex:1;display:flex;flex-direction:column}
|
||||
.card-tag{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:4px 11px;border-radius:100px;margin-bottom:14px}
|
||||
.card-title{font-size:1.15rem;font-weight:800;color:var(--text-primary);line-height:1.3;margin-bottom:10px}
|
||||
.card-desc{font-size:.9rem;color:var(--text-secondary);line-height:1.75;flex:1;margin-bottom:24px}
|
||||
.card-btn{display:inline-flex;align-items:center;gap:8px;font-size:.88rem;font-weight:700;text-decoration:none;padding:12px 22px;border-radius:100px;transition:gap .2s,opacity .2s;align-self:flex-start}
|
||||
.card-btn:hover{gap:14px;opacity:.88}
|
||||
.card-btn svg{width:15px;height:15px;transition:transform .2s}
|
||||
.card-btn:hover svg{transform:translateX(3px)}
|
||||
|
||||
/* card color themes */
|
||||
.card.theme-green .card-thumb{background:linear-gradient(135deg,#D0F5E6,#A8EDD6)}
|
||||
.card.theme-green .card-tag{background:#D4F5E8;color:#0E6640}
|
||||
.card.theme-green .card-btn{background:#2ECC8E;color:#fff}
|
||||
.card.theme-blue .card-thumb{background:linear-gradient(135deg,#D6EEFF,#B8DAFF)}
|
||||
.card.theme-blue .card-tag{background:#DFF0FC;color:#1155A0}
|
||||
.card.theme-blue .card-btn{background:#4FAAED;color:#fff}
|
||||
.card.theme-coral .card-thumb{background:linear-gradient(135deg,#FFE8E4,#FFCFC8)}
|
||||
.card.theme-coral .card-tag{background:#FFF0EE;color:#B33922}
|
||||
.card.theme-coral .card-btn{background:#FF7E6B;color:#fff}
|
||||
|
||||
/* ── FEATURES STRIP ── */
|
||||
.features{background:var(--surface);padding:72px clamp(20px,5vw,80px)}
|
||||
.features-inner{max-width:1120px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}
|
||||
.features-text .section-eyebrow{text-align:left}
|
||||
.features-text .section-title{text-align:left}
|
||||
.features-list{margin-top:32px;display:flex;flex-direction:column;gap:20px}
|
||||
.feature-item{display:flex;align-items:flex-start;gap:16px}
|
||||
.feature-check{width:36px;height:36px;border-radius:10px;background:var(--mint-soft);border:1px solid var(--mint-mid);display:flex;align-items:center;justify-content:center;flex-shrink:0}
|
||||
.feature-check svg{width:18px;height:18px;color:var(--mint)}
|
||||
.feature-title{font-size:.95rem;font-weight:700;color:var(--text-primary);margin-bottom:3px}
|
||||
.feature-desc{font-size:.86rem;color:var(--text-secondary);line-height:1.65}
|
||||
.features-visual{background:var(--white);border-radius:var(--r-xl);border:1px solid var(--border);padding:32px;display:flex;flex-direction:column;gap:16px}
|
||||
.feat-bar-label{display:flex;justify-content:space-between;align-items:center;font-size:.82rem}
|
||||
.feat-bar-name{color:var(--text-secondary);font-weight:600}
|
||||
.feat-bar-val{color:var(--text-primary);font-weight:700}
|
||||
.feat-bar-track{height:8px;background:#EDF2F5;border-radius:100px;overflow:hidden}
|
||||
.feat-bar-fill{height:100%;border-radius:100px;transform:scaleX(0);transform-origin:left;transition:transform 1.2s cubic-bezier(.4,0,.2,1)}
|
||||
.feat-bar-fill.go{transform:scaleX(1)}
|
||||
.fv-projects{display:flex;flex-direction:column;gap:0}
|
||||
.fv-row{padding:18px 0}
|
||||
.fv-divider{height:1px;background:var(--border)}
|
||||
.fv-row-header{display:flex;align-items:center;gap:10px;margin-bottom:12px}
|
||||
.fv-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}
|
||||
.fv-row-name{font-size:.9rem;font-weight:700;color:var(--text-primary)}
|
||||
.fv-tags{display:flex;flex-wrap:wrap;gap:8px}
|
||||
.fv-tag{font-size:.78rem;font-weight:600;padding:4px 12px;border-radius:100px;letter-spacing:.02em}
|
||||
|
||||
/* ── FOOTER ── */
|
||||
footer{background:#0f6543;padding:48px clamp(20px,5vw,80px);text-align:center}
|
||||
.footer-logo{font-size:1.1rem;font-weight:800;color:var(--white);margin-bottom:8px}
|
||||
.footer-logo span{color:var(--white)}
|
||||
.footer-sub{font-size:.85rem;color:#ffffff;margin-top:4px}
|
||||
.footer-line{width:40px;height:2px;background:var(--white);border-radius:2px;margin:20px auto}
|
||||
|
||||
/* ── RESPONSIVE ── */
|
||||
@media(max-width:900px){
|
||||
.hero-inner{grid-template-columns:1fr;text-align:center;gap:40px}
|
||||
.hero-identity{justify-content:center}
|
||||
.hero-subtitle{margin-left:auto;margin-right:auto}
|
||||
.hero-visual{padding-bottom:0}
|
||||
.hero-globe-wrap{width:260px;height:260px}
|
||||
.features-inner{grid-template-columns:1fr}
|
||||
}
|
||||
@media(max-width:600px){
|
||||
.hero{padding-top:52px}
|
||||
.projects{padding:52px 16px}
|
||||
.features{padding:52px 16px}
|
||||
.section-bridge{padding:32px 16px}
|
||||
.cards{grid-template-columns:1fr;gap:20px}
|
||||
.bridge-card{min-width:150px}
|
||||
footer{padding:40px 16px}
|
||||
}
|
||||
@media(prefers-reduced-motion:reduce){
|
||||
.globe-float,.globe-ring,.hero-bg-circle,.feat-bar-fill,.card,.blink{animation:none;transition:none}
|
||||
.card{opacity:1;transform:none}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- NAV -->
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a class="nav-brand" href="#">
|
||||
<span class="nav-dot"></span>
|
||||
WebGIS Portfolio
|
||||
</a>
|
||||
<span class="nav-badge">SIG · 2026</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- HERO -->
|
||||
<section class="hero">
|
||||
<div class="hero-bg-circle c1" aria-hidden="true"></div>
|
||||
<div class="hero-bg-circle c2" aria-hidden="true"></div>
|
||||
<div class="hero-inner">
|
||||
<div class="hero-text">
|
||||
<div class="hero-pill">
|
||||
<span class="hero-pill-dot"></span>
|
||||
Sistem Informasi Geografis
|
||||
</div>
|
||||
<h1 class="hero-title">Portfolio Proyek<br><em>WebGIS</em></h1>
|
||||
<p class="hero-subtitle">
|
||||
Kumpulan aplikasi pemetaan berbasis web yang dikembangkan untuk
|
||||
memvisualisasikan dan menganalisis data geografis menggunakan
|
||||
teknologi WebGIS modern.
|
||||
</p>
|
||||
<div class="hero-identity">
|
||||
<div class="hero-avatar">CD</div>
|
||||
<div>
|
||||
<div class="hero-name">Cindy Dyra Islamay</div>
|
||||
<div class="hero-nim">NIM: D1041231045</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-visual" aria-hidden="true">
|
||||
<div class="hero-globe-wrap">
|
||||
<div class="globe-ring r1"></div>
|
||||
<div class="globe-ring r2"></div>
|
||||
<svg class="globe-float" viewBox="0 0 360 360" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- soft background disc -->
|
||||
<circle cx="180" cy="180" r="160" fill="#EDF8F3"/>
|
||||
<circle cx="180" cy="180" r="140" fill="#F5FBF8"/>
|
||||
<!-- grid lines -->
|
||||
<ellipse cx="180" cy="180" rx="140" ry="56" stroke="#B0E8CF" stroke-width="1.5" fill="none"/>
|
||||
<ellipse cx="180" cy="180" rx="140" ry="100" stroke="#B0E8CF" stroke-width="1" fill="none"/>
|
||||
<line x1="180" y1="40" x2="180" y2="320" stroke="#B0E8CF" stroke-width="1" stroke-dasharray="6,5"/>
|
||||
<line x1="40" y1="180" x2="320" y2="180" stroke="#B0E8CF" stroke-width="1"/>
|
||||
<line x1="68" y1="100" x2="292" y2="100" stroke="#C8EEE0" stroke-width="1" stroke-dasharray="4,4"/>
|
||||
<line x1="68" y1="260" x2="292" y2="260" stroke="#C8EEE0" stroke-width="1" stroke-dasharray="4,4"/>
|
||||
<!-- landmass blobs -->
|
||||
<path d="M120,140 Q140,120 170,128 Q195,120 205,135 Q220,130 228,148 Q240,155 232,170 Q240,185 225,192 Q215,210 200,202 Q185,215 168,208 Q148,212 138,198 Q118,195 112,180 Q100,165 120,140Z" fill="#A8DDBB" opacity=".9"/>
|
||||
<path d="M200,150 Q215,144 226,152 Q238,148 242,162 Q252,170 244,180 Q248,192 236,196 Q226,206 216,198 Q204,202 198,190 Q188,182 196,170 Q188,158 200,150Z" fill="#90D5AC" opacity=".8"/>
|
||||
<path d="M130,200 Q144,190 156,196 Q166,188 175,198 Q185,196 188,208 Q194,218 184,224 Q178,234 166,228 Q154,234 144,224 Q132,222 128,212 Q122,204 130,200Z" fill="#A8DDBB" opacity=".75"/>
|
||||
<path d="M105,156 Q112,148 122,154 Q130,148 134,160 Q140,168 132,174 Q134,184 124,186 Q114,190 106,182 Q98,176 100,166 Q96,158 105,156Z" fill="#90D5AC" opacity=".7"/>
|
||||
<!-- pin markers -->
|
||||
<g filter="url(#pinShadow)">
|
||||
<circle cx="180" cy="165" r="10" fill="#2ECC8E"/>
|
||||
<circle cx="180" cy="165" r="5" fill="white"/>
|
||||
<circle cx="180" cy="165" r="18" fill="#2ECC8E" opacity=".2"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle cx="145" cy="175" r="7" fill="#4FAAED"/>
|
||||
<circle cx="145" cy="175" r="3.5" fill="white"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle cx="218" cy="170" r="7" fill="#FF7E6B"/>
|
||||
<circle cx="218" cy="170" r="3.5" fill="white"/>
|
||||
</g>
|
||||
<!-- outer border -->
|
||||
<circle cx="180" cy="180" r="140" stroke="#7DD8B0" stroke-width="2" fill="none"/>
|
||||
<defs>
|
||||
<filter id="pinShadow" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feDropShadow dx="0" dy="4" stdDeviation="4" flood-color="#2ECC8E" flood-opacity=".35"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- BRIDGE STRIP -->
|
||||
<div class="section-bridge">
|
||||
<div class="bridge-inner">
|
||||
<div class="bridge-card">
|
||||
<div class="bridge-icon" style="background:#E6F9F2">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="#2ECC8E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="bridge-label">Total Proyek</div>
|
||||
<div class="bridge-value">3 Aplikasi WebGIS</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bridge-card">
|
||||
<div class="bridge-icon" style="background:#EAF4FD">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="#4FAAED" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="bridge-label">Wilayah Studi</div>
|
||||
<div class="bridge-value">Kota Pontianak</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bridge-card">
|
||||
<div class="bridge-icon" style="background:#FEF5E7">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="#F5A623" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="bridge-label">Teknologi</div>
|
||||
<div class="bridge-value">Leaflet.js · GeoJSON</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bridge-card">
|
||||
<div class="bridge-icon" style="background:#FFF0EE">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="#FF7E6B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="bridge-label">Mata Kuliah</div>
|
||||
<div class="bridge-value">Sistem Informasi Geografis C</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<section class="projects">
|
||||
<div class="section-head">
|
||||
<div class="section-eyebrow">Koleksi Karya</div>
|
||||
<h2 class="section-title">Proyek yang Dikembangkan</h2>
|
||||
<p class="section-desc">Setiap aplikasi dirancang untuk menjawab kebutuhan analisis spasial yang nyata di wilayah Kota Pontianak.</p>
|
||||
</div>
|
||||
<div class="cards">
|
||||
|
||||
<!-- Card 1 -->
|
||||
<article class="card theme-green" data-delay="0">
|
||||
<div class="card-thumb">
|
||||
<div class="card-thumb-dots"></div>
|
||||
<span class="card-number">01</span>
|
||||
<div class="card-icon-wrap">
|
||||
<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="24" cy="24" r="22" fill="#D0F5E6"/>
|
||||
<path d="M24 12C18.48 12 14 16.48 14 22c0 7.5 10 18 10 18s10-10.5 10-18c0-5.52-4.48-10-10-10zm0 13a3 3 0 1 1 0-6 3 3 0 0 1 0 6z" fill="#2ECC8E"/>
|
||||
<circle cx="33" cy="14" r="4" fill="#A8EDD0" stroke="#2ECC8E" stroke-width="1.5"/>
|
||||
<circle cx="15" cy="32" r="3" fill="#A8EDD0" stroke="#2ECC8E" stroke-width="1.5"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<span class="card-tag">Pemetaan Fasilitas</span>
|
||||
<h3 class="card-title">Mapping SPBU</h3>
|
||||
<p class="card-desc">Aplikasi WebGIS untuk pemetaan lokasi stasiun pengisian bahan bakar umum (SPBU) dengan fitur visualisasi interaktif dan manajemen data geografis.</p>
|
||||
<a href="http://localhost/webgis/01SPBU/index.html" class="card-btn" target="_blank" rel="noopener">
|
||||
Buka Proyek
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- Card 2 -->
|
||||
<article class="card theme-blue" data-delay="120">
|
||||
<div class="card-thumb">
|
||||
<div class="card-thumb-dots"></div>
|
||||
<span class="card-number">02</span>
|
||||
<div class="card-icon-wrap">
|
||||
<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="24" cy="24" r="22" fill="#D6EEFF"/>
|
||||
<rect x="10" y="14" width="12" height="10" rx="2" fill="#B8DAFF"/>
|
||||
<rect x="26" y="10" width="12" height="14" rx="2" fill="#4FAAED"/>
|
||||
<rect x="10" y="28" width="12" height="10" rx="2" fill="#4FAAED" opacity=".6"/>
|
||||
<rect x="26" y="28" width="12" height="10" rx="2" fill="#B8DAFF"/>
|
||||
<line x1="10" y1="38" x2="38" y2="38" stroke="#4FAAED" stroke-width="1.5"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<span class="card-tag">Demografi</span>
|
||||
<h3 class="card-title">Choropleth Map – Kepadatan Penduduk Kota Pontianak</h3>
|
||||
<p class="card-desc">Visualisasi peta choropleth yang menampilkan distribusi kepadatan penduduk di Kota Pontianak menggunakan gradasi warna untuk analisis demografis.</p>
|
||||
<a href="http://localhost/webgis/02Cloropeth/index.html" class="card-btn" target="_blank" rel="noopener">
|
||||
Buka Proyek
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- Card 3 -->
|
||||
<article class="card theme-coral" data-delay="240">
|
||||
<div class="card-thumb">
|
||||
<div class="card-thumb-dots"></div>
|
||||
<span class="card-number">03</span>
|
||||
<div class="card-icon-wrap">
|
||||
<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="24" cy="24" r="22" fill="#FFE8E4"/>
|
||||
<circle cx="16" cy="20" r="5" fill="#FF7E6B" opacity=".7"/>
|
||||
<circle cx="30" cy="16" r="4" fill="#FFCFC8" stroke="#FF7E6B" stroke-width="1.5"/>
|
||||
<circle cx="26" cy="30" r="4" fill="#FFCFC8" stroke="#FF7E6B" stroke-width="1.5"/>
|
||||
<line x1="16" y1="20" x2="30" y2="16" stroke="#FF7E6B" stroke-width="1.5" stroke-dasharray="4,3"/>
|
||||
<line x1="30" y1="16" x2="26" y2="30" stroke="#FF7E6B" stroke-width="1.5" stroke-dasharray="4,3"/>
|
||||
<line x1="16" y1="20" x2="26" y2="30" stroke="#FF7E6B" stroke-width="1.5" stroke-dasharray="4,3"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<span class="card-tag">Analisis Sosial</span>
|
||||
<h3 class="card-title">WebGIS Pemetaan Kemiskinan</h3>
|
||||
<p class="card-desc">Aplikasi WebGIS yang memetakan distribusi spasial rumah tangga berpenghasilan rendah dan menghubungkannya dengan tempat ibadah sebagai pusat distribusi bantuan.</p>
|
||||
<a href="http://localhost/webgis/03PovertyMapping/login.html" class="card-btn" target="_blank" rel="noopener">
|
||||
Buka Proyek
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FEATURES STRIP -->
|
||||
<section class="features">
|
||||
<div class="features-inner">
|
||||
<div class="features-text">
|
||||
<div class="section-eyebrow">Kemampuan Teknis</div>
|
||||
<h2 class="section-title">Dibangun dengan Teknologi WebGIS Modern</h2>
|
||||
<div class="features-list">
|
||||
<div class="feature-item">
|
||||
<div class="feature-check">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="feature-title">Peta Interaktif Berbasis Web</div>
|
||||
<div class="feature-desc">Visualisasi data geografis yang dapat dijelajahi langsung di browser tanpa instalasi tambahan.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feature-item">
|
||||
<div class="feature-check">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="feature-title">Analisis Data Spasial</div>
|
||||
<div class="feature-desc">Pengolahan dan interpretasi data geografis untuk menghasilkan wawasan berbasis lokasi.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feature-item">
|
||||
<div class="feature-check">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
|
||||
</div>
|
||||
<div>
|
||||
<div class="feature-title">Desain Responsif & Aksesibel</div>
|
||||
<div class="feature-desc">Antarmuka yang menyesuaikan tampilan di berbagai ukuran layar dari desktop hingga ponsel.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="features-visual">
|
||||
<p style="font-size:.82rem;font-weight:700;color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin-bottom:20px">Stack Teknologi per Proyek</p>
|
||||
<div class="fv-projects">
|
||||
|
||||
<div class="fv-row">
|
||||
<div class="fv-row-header">
|
||||
<span class="fv-dot" style="background:#2ECC8E"></span>
|
||||
<span class="fv-row-name">Mapping SPBU</span>
|
||||
</div>
|
||||
<div class="fv-tags">
|
||||
<span class="fv-tag" style="background:#E6F9F2;color:#0E6640">Leaflet.js</span>
|
||||
<span class="fv-tag" style="background:#E6F9F2;color:#0E6640">GeoJSON</span>
|
||||
<span class="fv-tag" style="background:#E6F9F2;color:#0E6640">Layer Control</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fv-divider"></div>
|
||||
|
||||
<div class="fv-row">
|
||||
<div class="fv-row-header">
|
||||
<span class="fv-dot" style="background:#4FAAED"></span>
|
||||
<span class="fv-row-name">Choropleth Kepadatan</span>
|
||||
</div>
|
||||
<div class="fv-tags">
|
||||
<span class="fv-tag" style="background:#EAF4FD;color:#1155A0">Leaflet.js</span>
|
||||
<span class="fv-tag" style="background:#EAF4FD;color:#1155A0">Choropleth</span>
|
||||
<span class="fv-tag" style="background:#EAF4FD;color:#1155A0">GeoJSON</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fv-divider"></div>
|
||||
|
||||
<div class="fv-row">
|
||||
<div class="fv-row-header">
|
||||
<span class="fv-dot" style="background:#FF7E6B"></span>
|
||||
<span class="fv-row-name">Pemetaan Kemiskinan</span>
|
||||
</div>
|
||||
<div class="fv-tags">
|
||||
<span class="fv-tag" style="background:#FFF0EE;color:#B33922">Leaflet.js</span>
|
||||
<span class="fv-tag" style="background:#FFF0EE;color:#B33922">Chart.js</span>
|
||||
<span class="fv-tag" style="background:#FFF0EE;color:#B33922">GeoJSON</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FOOTER -->
|
||||
<footer>
|
||||
<div class="footer-logo">WebGIS<span>.</span></div>
|
||||
<div class="footer-sub">Cindy Dyra Islamay · NIM D1041231045</div>
|
||||
<div class="footer-line"></div>
|
||||
<div style="font-size:.82rem;color:#ffffff">© 2026 Portfolio Proyek Sistem Informasi Geografis</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
(function(){
|
||||
// card entrance
|
||||
var cards=document.querySelectorAll('.card');
|
||||
var io=new IntersectionObserver(function(entries){
|
||||
entries.forEach(function(e){
|
||||
if(!e.isIntersecting)return;
|
||||
var d=parseInt(e.target.dataset.delay||0);
|
||||
setTimeout(function(){e.target.classList.add('in')},d);
|
||||
io.unobserve(e.target);
|
||||
});
|
||||
},{threshold:0.1});
|
||||
cards.forEach(function(c){io.observe(c)});
|
||||
|
||||
// nav shadow on scroll
|
||||
var nav=document.querySelector('nav');
|
||||
window.addEventListener('scroll',function(){
|
||||
nav.style.boxShadow=window.scrollY>10?'0 2px 16px rgba(0,60,40,.07)':'none';
|
||||
},{passive:true});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user