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

362 lines
16 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>