kalei/initial mockups/screens/guide/74-guide-pulse-report.html

379 lines
13 KiB
HTML
Raw 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 — Weekly Pulse (Step 1)</title>
<link rel="stylesheet" href="../../assets/design-system.css">
<style>
@keyframes breathing {
0%, 100% { opacity: 0.5; transform: scale(1) translate(-50%, -50%); }
50% { opacity: 0.9; transform: scale(1.08) translate(-46%, -54%); }
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes diamondPulse {
0%, 100% { filter: drop-shadow(0 0 4px rgba(245,158,11,0.2)); }
50% { filter: drop-shadow(0 0 14px rgba(245,158,11,0.6)); }
}
.pulse-frame {
display: flex;
flex-direction: column;
flex: 1;
padding: 0 var(--space-4) var(--space-6);
}
.step-indicator {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--space-4) 0 var(--space-2);
}
.step-label {
font-size: 12px;
font-weight: 600;
color: var(--dim-light);
}
.step-dots {
display: flex;
gap: 6px;
}
.step-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--twilight);
transition: background 0.2s ease-out;
}
.step-dot.active {
background: linear-gradient(135deg, var(--amethyst), var(--emerald));
box-shadow: 0 0 8px rgba(139,92,246,0.4);
}
.step-dot.complete { background: var(--dim-light); }
.pulse-heading {
font-family: var(--font-display);
font-size: 28px;
font-weight: 700;
color: var(--pure-light);
margin-bottom: var(--space-2);
letter-spacing: -0.01em;
animation: fadeIn 0.4s ease-out 0.1s both;
opacity: 0;
}
.pulse-subheading {
font-size: 15px;
color: var(--dim-light);
margin-bottom: var(--space-6);
animation: fadeIn 0.4s ease-out 0.2s both;
opacity: 0;
}
/* Diamond scale */
.diamond-scale {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: var(--space-2);
margin-bottom: var(--space-5);
animation: fadeIn 0.4s ease-out 0.3s both;
opacity: 0;
}
.scale-item {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-2);
cursor: pointer;
flex: 1;
}
.scale-item svg {
transition: transform 0.2s ease-out, filter 0.2s ease-out;
}
.scale-item:hover svg { transform: scale(1.1); }
.scale-item.selected svg {
animation: diamondPulse 2.5s ease-in-out infinite;
}
.scale-label {
font-size: 10px;
color: var(--faint-light);
text-align: center;
line-height: 1.3;
}
.scale-item.selected .scale-label {
color: var(--amber-light);
font-weight: 600;
}
/* Gradient background auras */
.bg-aura-1 {
position: absolute;
top: 35%;
left: 30%;
width: 200px;
height: 200px;
border-radius: 50%;
background: radial-gradient(circle, rgba(139,92,246,0.1) 0%, transparent 70%);
filter: blur(50px);
animation: breathing 7s ease-in-out infinite;
pointer-events: none;
}
.bg-aura-2 {
position: absolute;
top: 25%;
left: 60%;
width: 160px;
height: 160px;
border-radius: 50%;
background: radial-gradient(circle, rgba(245,158,11,0.08) 0%, transparent 70%);
filter: blur(40px);
animation: breathing 9s ease-in-out infinite 2s;
pointer-events: none;
}
/* Write-in field */
.writein-label {
font-size: 12px;
color: var(--dim-light);
margin-bottom: var(--space-2);
animation: fadeIn 0.4s ease-out 0.4s both;
opacity: 0;
}
.writein-input {
width: 100%;
height: 72px;
background: var(--deep-glass);
border: 1px solid var(--twilight);
border-radius: var(--radius-lg);
padding: var(--space-3) var(--space-4);
font-family: var(--font-primary);
font-size: 14px;
color: var(--pure-light);
resize: none;
outline: none;
transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out;
margin-bottom: var(--space-5);
animation: fadeIn 0.4s ease-out 0.45s both;
opacity: 0;
}
.writein-input::placeholder { color: var(--faint-light); }
.writein-input:focus {
border-color: rgba(139,92,246,0.4);
box-shadow: 0 0 0 3px rgba(139,92,246,0.08);
}
.next-btn {
height: 52px;
background: linear-gradient(135deg, var(--amethyst), var(--sapphire));
color: var(--pure-light);
font-size: 16px;
font-weight: 600;
border-radius: var(--radius-lg);
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
box-shadow: 0 0 24px rgba(139,92,246,0.25);
margin-top: auto;
transition: opacity 0.2s ease-out;
animation: fadeIn 0.4s ease-out 0.5s both;
opacity: 0;
}
.next-btn:hover { opacity: 0.88; }
.close-btn {
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--deep-glass);
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
border: none;
cursor: pointer;
}
/* Week recap mini-stats */
.week-recap {
display: flex;
gap: var(--space-2);
margin-bottom: var(--space-4);
animation: fadeIn 0.4s ease-out 0.25s both;
opacity: 0;
}
.recap-stat {
flex: 1;
background: var(--deep-glass);
border: 1px solid var(--twilight);
border-radius: var(--radius-md);
padding: var(--space-2) var(--space-3);
text-align: center;
}
.recap-num {
font-size: 20px;
font-weight: 700;
color: var(--pure-light);
display: block;
margin-bottom: 2px;
}
.recap-lbl {
font-size: 10px;
color: var(--dim-light);
text-transform: uppercase;
letter-spacing: 0.05em;
}
</style>
</head>
<body>
<div class="device-frame">
<!-- Background auras -->
<div class="bg-aura-1"></div>
<div class="bg-aura-2"></div>
<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="pulse-frame">
<div class="step-indicator">
<span class="step-label">Step 1 of 3</span>
<div class="step-dots">
<div class="step-dot active"></div>
<div class="step-dot"></div>
<div class="step-dot"></div>
</div>
<a class="close-btn" href="../turn/10-turn-home.html">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
<path d="M2 2L10 10M10 2L2 10" stroke="var(--dim-light)" stroke-width="1.5" stroke-linecap="round"/>
</svg>
</a>
</div>
<div class="pulse-heading">Your Weekly Pulse</div>
<div class="pulse-subheading">Feb 1622, 2026 · How did this week feel?</div>
<!-- Week at-a-glance stats -->
<div class="week-recap">
<div class="recap-stat">
<span class="recap-num" style="color: var(--amethyst-light);">14</span>
<span class="recap-lbl">Turns</span>
</div>
<div class="recap-stat">
<span class="recap-num" style="color: var(--sapphire-light);">5</span>
<span class="recap-lbl">Mirror</span>
</div>
<div class="recap-stat">
<span class="recap-num" style="color: var(--emerald-light);">2</span>
<span class="recap-lbl">Rituals</span>
</div>
</div>
<!-- 5-diamond scale -->
<div class="diamond-scale" id="diamondScale">
<!-- 1: Rough -->
<div class="scale-item" data-index="0">
<svg width="40" height="40" viewBox="0 0 40 40">
<defs>
<linearGradient id="d1-gr" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#475569"/>
<stop offset="100%" stop-color="#1C2240"/>
</linearGradient>
</defs>
<path d="M20 4L36 20L20 36L4 20Z" fill="url(#d1-gr)" opacity="0.5"/>
<path d="M20 4L36 20L20 20Z" fill="#fff" opacity="0.04"/>
<path d="M14 14l4 3M20 8l-2 6" stroke="rgba(255,255,255,0.1)" stroke-width="0.8"/>
</svg>
<span class="scale-label">Rough</span>
</div>
<!-- 2: Harder than usual -->
<div class="scale-item" data-index="1">
<svg width="44" height="44" viewBox="0 0 44 44">
<defs>
<linearGradient id="d2-gr" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#64748B"/>
<stop offset="100%" stop-color="#334155"/>
</linearGradient>
</defs>
<path d="M22 4L40 22L22 40L4 22Z" fill="url(#d2-gr)" opacity="0.6"/>
<path d="M22 4L40 22L22 22Z" fill="#fff" opacity="0.06"/>
</svg>
<span class="scale-label">Harder than usual</span>
</div>
<!-- 3: Steady — selected with amber glow -->
<div class="scale-item selected" data-index="2" id="selectedDiamond">
<svg width="52" height="52" viewBox="0 0 52 52">
<defs>
<linearGradient id="d3-gr" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#FCD34D"/>
<stop offset="100%" stop-color="#D97706"/>
</linearGradient>
</defs>
<path d="M26 4L48 26L26 48L4 26Z" fill="url(#d3-gr)" opacity="0.9"/>
<path d="M26 4L48 26L26 26Z" fill="#fff" opacity="0.18"/>
<path d="M26 4L4 26L26 26Z" fill="#fff" opacity="0.06"/>
<line x1="26" y1="4" x2="26" y2="48" stroke="#fff" stroke-width="0.6" opacity="0.15"/>
<line x1="4" y1="26" x2="48" y2="26" stroke="#fff" stroke-width="0.6" opacity="0.1"/>
<circle cx="20" cy="20" r="2.5" fill="#fff" opacity="0.3"/>
</svg>
<span class="scale-label">Steady</span>
</div>
<!-- 4: Good momentum -->
<div class="scale-item" data-index="3">
<svg width="44" height="44" viewBox="0 0 44 44">
<defs>
<linearGradient id="d4-gr" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#6EE7B7"/>
<stop offset="100%" stop-color="#059669"/>
</linearGradient>
</defs>
<path d="M22 3L41 22L22 41L3 22Z" fill="url(#d4-gr)" opacity="0.8"/>
<path d="M22 3L41 22L22 22Z" fill="#fff" opacity="0.14"/>
<circle cx="17" cy="17" r="1.8" fill="#fff" opacity="0.2"/>
</svg>
<span class="scale-label">Good momentum</span>
</div>
<!-- 5: Breakthrough -->
<div class="scale-item" data-index="4">
<svg width="40" height="40" viewBox="0 0 40 40">
<defs>
<linearGradient id="d5-gr" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#C4B5FD"/>
<stop offset="50%" stop-color="#6EE7B7"/>
<stop offset="100%" stop-color="#FCD34D"/>
</linearGradient>
<filter id="d5-glow" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="2" result="b"/>
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
<g filter="url(#d5-glow)">
<path d="M20 2L38 20L20 38L2 20Z" fill="url(#d5-gr)" opacity="0.7"/>
<path d="M20 2L38 20L20 20Z" fill="#fff" opacity="0.2"/>
<path d="M20 2L2 20L20 20Z" fill="#fff" opacity="0.1"/>
<circle cx="15" cy="15" r="2.5" fill="#fff" opacity="0.4"/>
</g>
</svg>
<span class="scale-label">Breakthrough week</span>
</div>
</div>
<div class="writein-label">Anything else you want to add? (optional)</div>
<textarea class="writein-input" placeholder="This week felt..."></textarea>
<a class="next-btn" href="75-guide-pulse-read.html">Next</a>
</div>
</div>
<script>
const items = document.querySelectorAll('.scale-item');
items.forEach((item) => {
item.addEventListener('click', () => {
items.forEach(it => it.classList.remove('selected'));
item.classList.add('selected');
});
});
</script>
</body>
</html>