mirror of
https://github.com/PrivacyIndex/privacyindex.github.io.git
synced 2026-01-13 16:18:07 +00:00
Feat: Add scenic SVG landscape hero viewport
This commit is contained in:
335
index.html
335
index.html
@@ -6,81 +6,98 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<style>
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
html,body{height:100%;width:100%;overflow-x:hidden;font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;background:#bfe7ff}
|
||||
body{overflow-y:auto;color:#123}
|
||||
html,body{height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;background:#e3f4ff;color:#123}
|
||||
body{overflow:hidden}
|
||||
.scene-wrap{
|
||||
position:relative;
|
||||
width:100vw;
|
||||
height:260vh;
|
||||
background:linear-gradient(to bottom,#bfe7ff 0%,#d8f1ff 28%,#f5fbff 46%,#c2e7ff 60%,#8fd48b 78%,#694028 100%);
|
||||
display:block;
|
||||
height:100vh;
|
||||
display:flex;
|
||||
align-items:flex-end;
|
||||
justify-content:center;
|
||||
background:linear-gradient(to bottom,#bfe7ff 0%,#d8f1ff 35%,#f5fbff 100%);
|
||||
}
|
||||
.scene-sky{
|
||||
position:absolute;
|
||||
inset:0;
|
||||
background:radial-gradient(circle at 20% 15%,#ffffffaa 0,transparent 40%);
|
||||
pointer-events:none;
|
||||
z-index:0;
|
||||
}
|
||||
.scene-svg{
|
||||
position:sticky;
|
||||
top:0;
|
||||
position:relative;
|
||||
width:100%;
|
||||
height:100vh;
|
||||
height:100%;
|
||||
display:block;
|
||||
z-index:1;
|
||||
}
|
||||
.title-wrap{
|
||||
position:absolute;
|
||||
top:7vh;
|
||||
left:6vw;
|
||||
z-index:5;
|
||||
color:#0f2434;
|
||||
text-shadow:0 2px 6px #00000026;
|
||||
}
|
||||
.title-wrap h1{
|
||||
font-size:clamp(2.4rem,4vw,3.6rem);
|
||||
font-weight:700;
|
||||
letter-spacing:0.02em;
|
||||
margin-bottom:0.25rem;
|
||||
}
|
||||
.title-wrap p{
|
||||
font-size:clamp(0.9rem,1.2vw,1.05rem);
|
||||
max-width:26rem;
|
||||
line-height:1.5;
|
||||
opacity:0.9;
|
||||
}
|
||||
@keyframes treeFloat{
|
||||
0%{transform:translateY(0)}
|
||||
50%{transform:translateY(-2px)}
|
||||
100%{transform:translateY(0)}
|
||||
}
|
||||
@keyframes cloudDrift{
|
||||
0%{transform:translateX(0)}
|
||||
100%{transform:translateX(40px)}
|
||||
}
|
||||
.cloud{
|
||||
animation:cloudDrift 40s linear infinite alternate;
|
||||
}
|
||||
.cloud.cloud-slow{animation-duration:65s;opacity:.7}
|
||||
.cloud.cloud-fast{animation-duration:26s;opacity:.9}
|
||||
.cloud path{fill:url(#cloudGrad)}
|
||||
@keyframes leafBreathe{
|
||||
0%{transform:translateY(0)}
|
||||
50%{transform:translateY(-3px)}
|
||||
100%{transform:translateY(0)}
|
||||
}
|
||||
.leaf-canopy{animation:leafBreathe 5.5s ease-in-out infinite;transform-origin:50% 50%}
|
||||
.leaf-canopy:nth-child(odd){animation-duration:6.7s}
|
||||
.tree{
|
||||
animation:treeFloat 4s ease-in-out infinite;
|
||||
transform-origin:50% 100%;
|
||||
}
|
||||
.tree:nth-child(odd){animation-duration:5.2s}
|
||||
.cloud{
|
||||
animation:cloudDrift 26s linear infinite alternate;
|
||||
}
|
||||
.ground-label{
|
||||
font-size:9px;
|
||||
fill:#fdfdfd;
|
||||
opacity:.82;
|
||||
letter-spacing:.06em;
|
||||
}
|
||||
@media (max-width:640px){
|
||||
.scene-wrap{height:280vh}
|
||||
.title-wrap{top:5vh;left:5vw;right:8vw}
|
||||
.title-wrap p{max-width:18rem}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="scene-wrap">
|
||||
<div class="scene-sky"></div>
|
||||
<div class="title-wrap">
|
||||
<h1>Privacy Index</h1>
|
||||
<p>
|
||||
A clear landscape of digital privacy.
|
||||
View how services, products, and policies
|
||||
stand on the horizon of trust.
|
||||
</p>
|
||||
</div>
|
||||
<svg
|
||||
class="scene-svg"
|
||||
viewBox="0 0 1440 2600"
|
||||
viewBox="0 0 1440 900"
|
||||
preserveAspectRatio="xMidYMax slice"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<defs>
|
||||
<linearGradient id="skyGrad" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#bfe7ff"/>
|
||||
<stop offset="40%" stop-color="#d8f1ff"/>
|
||||
<stop offset="80%" stop-color="#c2e7ff"/>
|
||||
<stop offset="100%" stop-color="transparent"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="cloudGrad" x1="0" x2="1" y1="0" y2="0">
|
||||
<stop offset="0%" stop-color="#ffffffee"/>
|
||||
<stop offset="100%" stop-color="#edf6ffdd"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="trunkGrad" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#8b5e39"/>
|
||||
<stop offset="35%" stop-color="#6e4426"/>
|
||||
<stop offset="100%" stop-color="#3b2414"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="crownGrad" cx="50%" cy="22%" r="70%">
|
||||
<stop offset="0%" stop-color="#f4fff4"/>
|
||||
<stop offset="25%" stop-color="#c9f5cf"/>
|
||||
<stop offset="60%" stop-color="#79c087"/>
|
||||
<stop offset="100%" stop-color="#2f6b39"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="hillGradient" x1="0" x2="1" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#7ac384" />
|
||||
<stop offset="100%" stop-color="#4a9054" />
|
||||
</linearGradient>
|
||||
<linearGradient id="landGradient" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#86c97a" />
|
||||
<stop offset="55%" stop-color="#4fa65a" />
|
||||
@@ -91,147 +108,141 @@
|
||||
<stop offset="45%" stop-color="#6b4023" />
|
||||
<stop offset="100%" stop-color="#3c2413" />
|
||||
</linearGradient>
|
||||
<radialGradient id="smallTreeCrown" cx="50%" cy="25%" r="65%">
|
||||
<linearGradient id="hillGradient" x1="0" x2="1" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#7ac384" />
|
||||
<stop offset="100%" stop-color="#4a9054" />
|
||||
</linearGradient>
|
||||
<radialGradient id="treeCrown" cx="50%" cy="25%" r="65%">
|
||||
<stop offset="0%" stop-color="#e5ffe5" />
|
||||
<stop offset="35%" stop-color="#8fd19b" />
|
||||
<stop offset="100%" stop-color="#357a42" />
|
||||
</radialGradient>
|
||||
<linearGradient id="smallTreeTrunk" x1="0" x2="0" y1="0" y2="1">
|
||||
<linearGradient id="treeTrunk" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#6b4226" />
|
||||
<stop offset="100%" stop-color="#3d2616" />
|
||||
</linearGradient>
|
||||
<linearGradient id="cloudGrad" x1="0" x2="1" y1="0" y2="0">
|
||||
<stop offset="0%" stop-color="#ffffffee" />
|
||||
<stop offset="100%" stop-color="#f0f6ffdd" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect x="0" y="0" width="1440" height="2600" fill="url(#skyGrad)" />
|
||||
<rect x="0" y="0" width="1440" height="900" fill="transparent" />
|
||||
|
||||
<g class="cloud cloud-slow" transform="translate(40,80)">
|
||||
<path d="M0,60 C10,30 40,20 70,32 C85,10 120,4 150,22 C165,8 190,4 215,16 C245,0 285,8 300,30 C330,26 360,40 370,60 C360,80 330,92 300,88 C280,104 245,110 220,98 C200,112 165,118 140,104 C120,118 80,120 55,104 C30,116 5,104 0,90 Z"/>
|
||||
<g class="cloud" fill="url(#cloudGrad)" opacity="0.9">
|
||||
<ellipse cx="230" cy="110" rx="60" ry="32" />
|
||||
<ellipse cx="280" cy="100" rx="48" ry="26" />
|
||||
<ellipse cx="320" cy="115" rx="54" ry="30" />
|
||||
</g>
|
||||
<g class="cloud" fill="url(#cloudGrad)" opacity="0.78">
|
||||
<ellipse cx="1040" cy="160" rx="70" ry="34" />
|
||||
<ellipse cx="990" cy="170" rx="40" ry="24" />
|
||||
<ellipse cx="1105" cy="168" rx="46" ry="24" />
|
||||
</g>
|
||||
|
||||
<g class="cloud cloud-fast" transform="translate(780,140) scale(1.1)">
|
||||
<path d="M0,48 C16,26 44,18 70,26 C86,10 118,4 144,16 C160,4 188,0 212,10 C236,-2 272,4 286,22 C314,18 344,30 352,48 C344,64 314,80 286,76 C264,92 234,98 210,86 C188,98 158,104 134,92 C112,106 80,108 60,94 C40,106 14,100 0,86 Z"/>
|
||||
<path
|
||||
d="M0,530
|
||||
C240,480 420,470 720,500
|
||||
C1040,530 1180,500 1440,470
|
||||
L1440,660 L0,660 Z"
|
||||
fill="url(#hillGradient)"
|
||||
opacity="0.96"
|
||||
/>
|
||||
|
||||
<path
|
||||
d="M0,560
|
||||
C260,540 480,555 720,570
|
||||
C1040,590 1200,600 1440,610
|
||||
L1440,760 L0,760 Z"
|
||||
fill="url(#landGradient)"
|
||||
/>
|
||||
|
||||
<path
|
||||
d="M0,720
|
||||
C220,700 430,715 720,730
|
||||
C1040,750 1220,760 1440,755
|
||||
L1440,900 L0,900 Z"
|
||||
fill="url(#dirtGradient)"
|
||||
/>
|
||||
|
||||
<g>
|
||||
<circle cx="160" cy="540" r="7" fill="#ffffffaa" />
|
||||
<circle cx="310" cy="520" r="6" fill="#ffffffaa" />
|
||||
<circle cx="490" cy="535" r="5" fill="#ffffffaa" />
|
||||
</g>
|
||||
|
||||
<g class="cloud cloud-slow" transform="translate(1020,260) scale(0.9)">
|
||||
<path d="M0,40 C12,20 36,12 58,18 C74,4 100,0 122,10 C138,0 164,-2 184,8 C206,-4 234,2 248,16 C272,10 298,20 304,36 C296,52 270,64 246,60 C226,74 198,78 178,68 C158,80 130,86 108,76 C88,88 60,90 42,80 C26,90 8,84 0,72 Z"/>
|
||||
<g class="tree" transform="translate(190,520)">
|
||||
<rect x="-5" y="0" width="10" height="42" fill="url(#treeTrunk)" />
|
||||
<circle cx="0" cy="-6" r="24" fill="url(#treeCrown)" />
|
||||
<circle cx="-16" cy="0" r="16" fill="url(#treeCrown)" />
|
||||
<circle cx="16" cy="0" r="16" fill="url(#treeCrown)" />
|
||||
</g>
|
||||
|
||||
<g class="cloud cloud-fast" transform="translate(260,260) scale(1.2)">
|
||||
<path d="M0,44 C14,22 42,14 66,22 C80,8 110,2 136,12 C152,2 180,0 202,10 C228,-2 262,2 278,20 C304,18 334,28 342,46 C334,62 306,76 280,72 C260,88 230,92 206,80 C184,94 154,98 130,86 C106,100 76,102 54,90 C34,102 8,96 0,82 Z"/>
|
||||
<g class="tree" transform="translate(360,515)">
|
||||
<rect x="-4" y="0" width="8" height="36" fill="url(#treeTrunk)" />
|
||||
<circle cx="0" cy="-4" r="20" fill="url(#treeCrown)" />
|
||||
<circle cx="-13" cy="2" r="13" fill="url(#treeCrown)" />
|
||||
<circle cx="13" cy="2" r="13" fill="url(#treeCrown)" />
|
||||
</g>
|
||||
|
||||
<g class="cloud cloud-slow" transform="translate(520,20) scale(0.8)">
|
||||
<path d="M0,44 C10,22 34,12 54,18 C70,6 94,0 114,8 C128,-2 154,-2 172,8 C194,-4 222,2 234,18 C256,14 282,24 288,40 C280,54 254,64 232,60 C214,74 188,78 168,68 C148,80 122,84 102,76 C82,88 56,90 38,80 C22,90 6,84 0,72 Z"/>
|
||||
<g class="tree" transform="translate(560,525)">
|
||||
<rect x="-4" y="0" width="8" height="40" fill="url(#treeTrunk)" />
|
||||
<circle cx="0" cy="-6" r="22" fill="url(#treeCrown)" />
|
||||
<circle cx="-14" cy="2" r="14" fill="url(#treeCrown)" />
|
||||
<circle cx="14" cy="2" r="14" fill="url(#treeCrown)" />
|
||||
</g>
|
||||
|
||||
<g class="tree" transform="translate(720,0)">
|
||||
<g class="tree" transform="translate(860,520)">
|
||||
<rect x="-4" y="0" width="8" height="38" fill="url(#treeTrunk)" />
|
||||
<circle cx="0" cy="-6" r="21" fill="url(#treeCrown)" />
|
||||
<circle cx="-13" cy="2" r="13" fill="url(#treeCrown)" />
|
||||
<circle cx="13" cy="2" r="13" fill="url(#treeCrown)" />
|
||||
</g>
|
||||
|
||||
<g class="tree" transform="translate(1120,515)">
|
||||
<rect x="-5" y="0" width="10" height="44" fill="url(#treeTrunk)" />
|
||||
<circle cx="0" cy="-8" r="25" fill="url(#treeCrown)" />
|
||||
<circle cx="-17" cy="0" r="16" fill="url(#treeCrown)" />
|
||||
<circle cx="17" cy="0" r="16" fill="url(#treeCrown)" />
|
||||
</g>
|
||||
|
||||
<g opacity="0.18" fill="#000000">
|
||||
<ellipse cx="190" cy="565" rx="15" ry="4" />
|
||||
<ellipse cx="360" cy="560" rx="13" ry="3.5" />
|
||||
<ellipse cx="560" cy="570" rx="14" ry="4" />
|
||||
<ellipse cx="860" cy="565" rx="13" ry="3.5" />
|
||||
<ellipse cx="1120" cy="560" rx="16" ry="4" />
|
||||
</g>
|
||||
|
||||
<g opacity="0.5">
|
||||
<path
|
||||
d="M-55,2600
|
||||
C-80,2200 -80,1900 -70,1600
|
||||
C-60,1300 -48,1050 -36,780
|
||||
C-26,550 -18,380 -12,240
|
||||
C-10,190 -4,140 0,80
|
||||
C4,140 10,190 12,240
|
||||
C18,380 26,550 36,780
|
||||
C48,1050 60,1300 70,1600
|
||||
C80,1900 80,2200 55,2600 Z"
|
||||
fill="url(#trunkGrad)"
|
||||
opacity="0.98"
|
||||
/>
|
||||
|
||||
<g fill="url(#trunkGrad)" opacity="0.96">
|
||||
<path d="M-16,880 C-48,880 -86,840 -112,792 C-120,760 -120,720 -106,700 C-86,686 -60,694 -34,710 C-24,740 -18,782 -16,820 Z"/>
|
||||
<path d="M18,1080 C60,1074 106,1034 138,986 C150,952 150,918 136,900 C114,884 86,884 60,898 C48,930 40,970 34,1012 Z"/>
|
||||
<path d="M-10,1320 C-40,1312 -80,1278 -106,1240 C-118,1210 -118,1182 -106,1164 C-80,1148 -54,1148 -30,1164 C-22,1198 -16,1248 -10,1294 Z"/>
|
||||
<path d="M16,1560 C52,1554 92,1526 122,1488 C134,1458 134,1430 120,1414 C96,1400 70,1402 48,1418 C40,1452 30,1496 24,1534 Z"/>
|
||||
<path d="M-8,1780 C-40,1768 -78,1734 -104,1696 C-116,1668 -116,1638 -104,1622 C-78,1606 -52,1608 -28,1622 C-20,1656 -14,1700 -8,1742 Z"/>
|
||||
</g>
|
||||
|
||||
<g class="leaf-canopy" transform="translate(0,360)" fill="url(#crownGrad)" opacity="0.98">
|
||||
<ellipse cx="0" cy="0" rx="260" ry="110"/>
|
||||
<ellipse cx="-180" cy="40" rx="120" ry="70"/>
|
||||
<ellipse cx="180" cy="40" rx="120" ry="70"/>
|
||||
<ellipse cx="0" cy="-40" rx="180" ry="80"/>
|
||||
</g>
|
||||
<g class="leaf-canopy" transform="translate(0,520)" fill="url(#crownGrad)" opacity="0.95">
|
||||
<ellipse cx="0" cy="0" rx="220" ry="96"/>
|
||||
<ellipse cx="-150" cy="38" rx="110" ry="64"/>
|
||||
<ellipse cx="150" cy="38" rx="110" ry="64"/>
|
||||
<ellipse cx="0" cy="-34" rx="160" ry="72"/>
|
||||
</g>
|
||||
<g class="leaf-canopy" transform="translate(0,720)" fill="url(#crownGrad)" opacity="0.93">
|
||||
<ellipse cx="0" cy="0" rx="210" ry="90"/>
|
||||
<ellipse cx="-150" cy="38" rx="100" ry="60"/>
|
||||
<ellipse cx="150" cy="38" rx="100" ry="60"/>
|
||||
<ellipse cx="0" cy="-34" rx="150" ry="68"/>
|
||||
</g>
|
||||
<g class="leaf-canopy" transform="translate(0,940)" fill="url(#crownGrad)" opacity="0.92">
|
||||
<ellipse cx="0" cy="0" rx="190" ry="86"/>
|
||||
<ellipse cx="-135" cy="34" rx="92" ry="54"/>
|
||||
<ellipse cx="135" cy="34" rx="92" ry="54"/>
|
||||
<ellipse cx="0" cy="-30" rx="140" ry="64"/>
|
||||
</g>
|
||||
<g class="leaf-canopy" transform="translate(0,1160)" fill="url(#crownGrad)" opacity="0.9">
|
||||
<ellipse cx="0" cy="0" rx="180" ry="80"/>
|
||||
<ellipse cx="-126" cy="34" rx="88" ry="50"/>
|
||||
<ellipse cx="126" cy="34" rx="88" ry="50"/>
|
||||
<ellipse cx="0" cy="-30" rx="130" ry="58"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g transform="translate(0,2100)">
|
||||
<path
|
||||
d="M0,200
|
||||
C240,150 420,140 720,170
|
||||
C1040,200 1180,170 1440,140
|
||||
L1440,320 L0,320 Z"
|
||||
fill="url(#hillGradient)"
|
||||
opacity="0.96"
|
||||
d="M90,735 C130,728 190,726 240,730"
|
||||
fill="none"
|
||||
stroke="#d9b28a"
|
||||
stroke-width="3"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<path
|
||||
d="M0,230
|
||||
C260,210 480,225 720,240
|
||||
C1040,260 1200,270 1440,280
|
||||
L1440,420 L0,420 Z"
|
||||
fill="url(#landGradient)"
|
||||
d="M520,742 C580,736 640,736 700,741"
|
||||
fill="none"
|
||||
stroke="#c89c73"
|
||||
stroke-width="3"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<path
|
||||
d="M0,340
|
||||
C220,320 430,335 720,350
|
||||
C1040,370 1220,380 1440,375
|
||||
L1440,500 L0,500 Z"
|
||||
fill="url(#dirtGradient)"
|
||||
d="M960,750 C1040,744 1160,744 1240,748"
|
||||
fill="none"
|
||||
stroke="#b6865e"
|
||||
stroke-width="3"
|
||||
stroke-linecap="round"
|
||||
/>
|
||||
<g opacity="0.18" fill="#000">
|
||||
<ellipse cx="720" cy="260" rx="60" ry="10"/>
|
||||
</g>
|
||||
<g>
|
||||
<g transform="translate(260,230)">
|
||||
<rect x="-4" y="0" width="8" height="40" fill="url(#smallTreeTrunk)" />
|
||||
<circle cx="0" cy="-6" r="20" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="-13" cy="2" r="13" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="13" cy="2" r="13" fill="url(#smallTreeCrown)" />
|
||||
</g>
|
||||
<g transform="translate(460,238)">
|
||||
<rect x="-3.5" y="0" width="7" height="34" fill="url(#smallTreeTrunk)" />
|
||||
<circle cx="0" cy="-4" r="18" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="-11" cy="2" r="11" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="11" cy="2" r="11" fill="url(#smallTreeCrown)" />
|
||||
</g>
|
||||
<g transform="translate(980,236)">
|
||||
<rect x="-4" y="0" width="8" height="36" fill="url(#smallTreeTrunk)" />
|
||||
<circle cx="0" cy="-6" r="19" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="-12" cy="2" r="12" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="12" cy="2" r="12" fill="url(#smallTreeCrown)" />
|
||||
</g>
|
||||
<g transform="translate(1200,228)">
|
||||
<rect x="-4.5" y="0" width="9" height="42" fill="url(#smallTreeTrunk)" />
|
||||
<circle cx="0" cy="-8" r="21" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="-14" cy="0" r="14" fill="url(#smallTreeCrown)" />
|
||||
<circle cx="14" cy="0" r="14" fill="url(#smallTreeCrown)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<text
|
||||
x="50"
|
||||
y="880"
|
||||
class="ground-label"
|
||||
>FOUNDATION: TRANSPARENT, VERIFIABLE PRIVACY SCORES</text>
|
||||
</svg>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user