kalei/initial mockups/screens/spectrum/55-spectrum-growth.html

362 lines
16 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=390, initial-scale=1">
<title>Kalei — Growth Trajectory</title>
<link rel="stylesheet" href="../../assets/design-system.css">
<style>
.growth-container {
padding: 16px;
}
.growth-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.growth-score {
text-align: right;
}
.score-val {
font-size: 36px;
font-weight: 700;
font-family: var(--font-display);
}
.score-label {
font-size: 11px;
color: var(--dim-light);
margin-top: -2px;
}
.growth-pct {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 3px 8px;
border-radius: var(--radius-full);
background: rgba(16,185,129,0.15);
font-size: 12px;
font-weight: 600;
color: var(--emerald-light);
margin-top: 4px;
}
.chart-wrap {
background: var(--void);
border: 1px solid var(--twilight);
border-radius: var(--radius-xl);
padding: 16px 12px 12px;
margin-bottom: 14px;
overflow: hidden;
}
.milestones-section {
margin-bottom: 12px;
}
.milestone-item {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 10px 0;
border-bottom: 1px solid rgba(28,34,64,0.5);
}
.milestone-item:last-child { border-bottom: none; }
.milestone-dot {
width: 24px;
height: 24px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-top: 1px;
}
.milestone-dot.achieved {
background: rgba(16,185,129,0.2);
border: 2px solid var(--emerald);
}
.milestone-dot.upcoming {
background: var(--deep-glass);
border: 2px solid var(--twilight);
}
.milestone-info { flex: 1; }
.milestone-title {
font-size: 13px;
font-weight: 500;
color: var(--soft-light);
}
.milestone-date {
font-size: 11px;
color: var(--faint-light);
margin-top: 2px;
}
.insight-panel {
background: linear-gradient(135deg, rgba(16,185,129,0.08), rgba(16,185,129,0.03));
border: 1px solid rgba(16,185,129,0.25);
border-radius: var(--radius-xl);
padding: 14px;
}
.insight-label {
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--emerald-light);
margin-bottom: 6px;
display: flex;
align-items: center;
gap: 6px;
}
.insight-text {
font-size: 14px;
color: var(--soft-light);
line-height: 1.55;
}
.screen-content { padding-bottom: 20px; }
</style>
</head>
<body>
<div class="device-frame">
<div class="status-bar">
<span class="time">9:41</span>
<div class="icons">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none">
<rect x="1" y="7" width="2.5" height="5" rx="0.5" fill="#E2E8F0" opacity="0.4"/>
<rect x="4.5" y="5" width="2.5" height="7" rx="0.5" fill="#E2E8F0" opacity="0.6"/>
<rect x="8" y="3" width="2.5" height="9" rx="0.5" fill="#E2E8F0" opacity="0.8"/>
<rect x="11.5" y="1" width="2.5" height="11" rx="0.5" fill="#E2E8F0"/>
</svg>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M 2,8 C 4,4 12,4 14,8" stroke="#E2E8F0" stroke-width="1.2" fill="none" stroke-linecap="round"/>
<path d="M 4,10 C 6,7 10,7 12,10" stroke="#E2E8F0" stroke-width="1" fill="none" opacity="0.8" stroke-linecap="round"/>
<circle cx="8" cy="12" r="1.2" fill="#E2E8F0"/>
</svg>
<svg width="24" height="12" viewBox="0 0 24 12" fill="none">
<rect x="0.5" y="0.5" width="21" height="11" rx="2.5" stroke="#E2E8F0" stroke-width="1" opacity="0.5"/>
<rect x="22" y="3" width="2" height="6" rx="1" fill="#E2E8F0" opacity="0.3"/>
<rect x="2" y="2" width="16" height="8" rx="1.5" fill="#10B981" opacity="0.9"/>
</svg>
</div>
</div>
<div class="nav-header">
<a class="nav-back" href="50-spectrum-dashboard.html">
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
<path d="M12 4L6 10L12 16" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
<span class="nav-title">Growth</span>
<span class="nav-action"></span>
</div>
<div class="screen-content no-pad">
<div class="growth-container">
<!-- Header with score -->
<div class="growth-header">
<div>
<div class="subheading" style="color: var(--soft-light);">Wellness Score</div>
<div class="body-sm text-dim">This week</div>
</div>
<div class="growth-score">
<div class="score-val" style="color: var(--emerald-light);">78</div>
<div class="score-label">/ 100</div>
<div class="growth-pct">
<svg width="10" height="10" viewBox="0 0 10 10" fill="none">
<path d="M5 8V2M2 5L5 2L8 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
+14% this week
</div>
</div>
</div>
<!-- Line chart — extracted from spectrum-visualizations.svg "GROWTH TRAJECTORY" section -->
<div class="chart-wrap">
<svg width="334" height="170" viewBox="0 0 334 170" style="display:block;">
<defs>
<linearGradient id="s55-grAmethyst" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#C4B5FD"/><stop offset="100%" stop-color="#7C3AED"/>
</linearGradient>
<!-- Area fill under growth curve — #8B5CF6 with low opacity per SVG -->
<linearGradient id="s55-areaFill" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#8B5CF6" stop-opacity="0.08"/>
<stop offset="100%" stop-color="#8B5CF6" stop-opacity="0.01"/>
</linearGradient>
<filter id="s55-glowMd" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="3" result="b"/>
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
<filter id="s55-glowSm" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="1.5" result="b"/>
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
<!-- Chart background -->
<rect width="334" height="170" fill="#0A0E1A"/>
<!-- Axes -->
<line x1="30" y1="125" x2="320" y2="125" stroke="#1C2240" stroke-width="0.5"/>
<line x1="30" y1="125" x2="30" y2="15" stroke="#1C2240" stroke-width="0.5"/>
<!-- Grid lines -->
<line x1="30" y1="35" x2="320" y2="35" stroke="#1C2240" stroke-width="0.5" stroke-dasharray="3,5"/>
<line x1="30" y1="65" x2="320" y2="65" stroke="#1C2240" stroke-width="0.5" stroke-dasharray="3,5"/>
<line x1="30" y1="95" x2="320" y2="95" stroke="#1C2240" stroke-width="0.5" stroke-dasharray="3,5"/>
<!-- Y labels -->
<text x="26" y="38" text-anchor="end" fill="#475569" font-size="8" font-family="Inter">100</text>
<text x="26" y="68" text-anchor="end" fill="#475569" font-size="8" font-family="Inter">75</text>
<text x="26" y="98" text-anchor="end" fill="#475569" font-size="8" font-family="Inter">50</text>
<!-- Month labels -->
<text x="45" y="138" text-anchor="middle" fill="#475569" font-size="8" font-family="Inter">Jan</text>
<text x="97" y="138" text-anchor="middle" fill="#475569" font-size="8" font-family="Inter">Feb</text>
<text x="149" y="138" text-anchor="middle" fill="#475569" font-size="8" font-family="Inter">Mar</text>
<text x="201" y="138" text-anchor="middle" fill="#475569" font-size="8" font-family="Inter">Apr</text>
<text x="253" y="138" text-anchor="middle" fill="#475569" font-size="8" font-family="Inter">May</text>
<text x="305" y="138" text-anchor="middle" fill="#475569" font-size="8" font-family="Inter">Jun</text>
<!-- Growth line + area — adapted from spectrum-visualizations.svg Growth Trajectory -->
<!-- Original: M -220,40 C -180,35 -140,20 -80,10 C -20,0 40,-15 100,-25 C 160,-35 200,-40 240,-50 -->
<!-- Adapted: center=175, y-baseline=125, scale x: +175 shifts origin, y: +125 for baseline -->
<g filter="url(#s55-glowMd)">
<!-- Area fill -->
<path d="M 45,108 C 68,104 91,95 118,90 C 145,85 168,78 195,72 C 222,66 245,59 268,52 C 291,45 305,40 315,34 L 315,125 L 45,125 Z"
fill="url(#s55-areaFill)"/>
<!-- Growth line — stroke with amethyst gradient (exact from SVG) -->
<path d="M 45,108 C 68,104 91,95 118,90 C 145,85 168,78 195,72 C 222,66 245,59 268,52 C 291,45 305,40 315,34"
fill="none" stroke="url(#s55-grAmethyst)" stroke-width="2" stroke-linecap="round" opacity="0.8"/>
<!-- Data point fragments — exact diamond+specular pattern from SVG -->
<path d="M 45,108 L 48,111 L 45,114 L 42,111 Z" fill="url(#s55-grAmethyst)" opacity="0.6" filter="url(#s55-glowSm)"/>
<path d="M 45,108 L 48,111 L 45,111 Z" fill="#fff" opacity="0.15"/>
<path d="M 97,88 L 100,91 L 97,94 L 94,91 Z" fill="url(#s55-grAmethyst)" opacity="0.7" filter="url(#s55-glowSm)"/>
<path d="M 97,88 L 100,91 L 97,91 Z" fill="#fff" opacity="0.15"/>
<path d="M 149,74 L 152,77 L 149,80 L 146,77 Z" fill="url(#s55-grAmethyst)" opacity="0.7" filter="url(#s55-glowSm)"/>
<path d="M 149,74 L 152,77 L 149,77 Z" fill="#fff" opacity="0.15"/>
<path d="M 201,60 L 204,63 L 201,66 L 198,63 Z" fill="url(#s55-grAmethyst)" opacity="0.8" filter="url(#s55-glowSm)"/>
<path d="M 201,60 L 204,63 L 201,63 Z" fill="#fff" opacity="0.15"/>
<path d="M 253,46 L 256,49 L 253,52 L 250,49 Z" fill="url(#s55-grAmethyst)" opacity="0.8" filter="url(#s55-glowSm)"/>
<path d="M 253,46 L 256,49 L 253,49 Z" fill="#fff" opacity="0.15"/>
<!-- Current point (animated pulse) -->
<path d="M 315,34 L 318,37 L 315,40 L 312,37 Z" fill="url(#s55-grAmethyst)" opacity="0.9" filter="url(#s55-glowSm)">
<animate attributeName="opacity" values="0.7;1;0.7" dur="2s" repeatCount="indefinite"/>
</path>
<path d="M 315,34 L 318,37 L 315,37 Z" fill="#fff" opacity="0.15"/>
</g>
<!-- Milestone markers — exact from SVG (circle + label) -->
<g filter="url(#s55-glowSm)">
<!-- 10th Turn milestone at Feb/Mar -->
<circle cx="149" cy="76" r="8" fill="none" stroke="#10B981" stroke-width="0.8" opacity="0.4"/>
<text x="149" y="68" font-size="7" fill="#6EE7B7" text-anchor="middle" font-family="Inter">10th Turn</text>
</g>
<g filter="url(#s55-glowSm)">
<!-- 30-day streak milestone at May -->
<circle cx="253" cy="48" r="8" fill="none" stroke="#F59E0B" stroke-width="0.8" opacity="0.4"/>
<text x="253" y="40" font-size="7" fill="#FDE68A" text-anchor="middle" font-family="Inter">30-day streak</text>
</g>
<!-- Y-axis label -->
<text x="14" y="80" font-size="7" fill="#475569" transform="rotate(-90, 14, 80)" text-anchor="middle" font-family="Inter">Resilience</text>
</svg>
</div>
<!-- Milestones — aligned to Alex canonical data: Feb 1 start, 47 turns, 14 streak, 3 lens goals -->
<div class="milestones-section">
<div class="section-header">
<span class="section-title">Growth Milestones</span>
</div>
<div class="milestone-item">
<div class="milestone-dot achieved">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
<path d="M2 6L5 9L10 3" stroke="#10B981" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<div class="milestone-info">
<div class="milestone-title">First Turn · Feb 1</div>
<div class="milestone-date">Started the practice · +5 wellness points</div>
</div>
</div>
<div class="milestone-item">
<div class="milestone-dot achieved">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
<path d="M2 6L5 9L10 3" stroke="#10B981" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<div class="milestone-info">
<div class="milestone-title">25 Turns completed · Feb 12</div>
<div class="milestone-date">Pattern awareness unlocked · +10 wellness points</div>
</div>
</div>
<div class="milestone-item">
<div class="milestone-dot achieved">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
<path d="M2 6L5 9L10 3" stroke="#10B981" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<div class="milestone-info">
<div class="milestone-title">14-day ritual streak · Feb 22</div>
<div class="milestone-date">Longest streak · +15 wellness points</div>
</div>
</div>
<div class="milestone-item">
<div class="milestone-dot achieved">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
<path d="M2 6L5 9L10 3" stroke="#10B981" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<div class="milestone-info">
<div class="milestone-title">47 Turns · Feb 22</div>
<div class="milestone-date">47 evidence tiles built · +12 wellness points</div>
</div>
</div>
<div class="milestone-item">
<div class="milestone-dot upcoming">
<svg width="12" height="12" viewBox="0 0 12 12">
<path d="M6 1L11 6L6 11L1 6Z" fill="#475569" opacity="0.5"/>
</svg>
</div>
<div class="milestone-info">
<div class="milestone-title" style="color: var(--dim-light);">50 Turns (upcoming)</div>
<div class="milestone-date">3 turns away · +8 wellness points</div>
</div>
</div>
<div class="milestone-item">
<div class="milestone-dot upcoming">
<svg width="12" height="12" viewBox="0 0 12 12">
<path d="M6 1L11 6L6 11L1 6Z" fill="#475569" opacity="0.5"/>
</svg>
</div>
<div class="milestone-info">
<div class="milestone-title" style="color: var(--dim-light);">21-day ritual streak (upcoming)</div>
<div class="milestone-date">7 days away · +20 wellness points</div>
</div>
</div>
</div>
<!-- Insight -->
<div class="insight-panel">
<div class="insight-label">
<svg width="12" height="12" viewBox="0 0 12 12">
<path d="M6 1L11 6L6 11L1 6Z" fill="#34D399"/>
</svg>
Growth Reading
</div>
<div class="insight-text">21 days of practice, 47 turns, 14 consecutive rituals — the trajectory is clear. The steepest climb in your score came between Feb 1222, when the ritual streak took hold. You're 3 turns from hitting 50.</div>
</div>
</div>
</div>
</div>
</body>
</html>