Harsh200415 Claude Sonnet 5 commited on
Commit
7dd0d81
·
1 Parent(s): f9393f8

Revert to the bar-graph logo

Browse files

The Dome/Clarity mark didn't land well in practice — reverting App.jsx,
AuthView, OnboardingView, HowItWorksView, ProfileView's empty state,
favicon.svg, generate-icons.html, and the extension icon PNGs to their
pre-dome-mark state, and removing the now-unused Logo.jsx.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

frontend/generate-icons.html CHANGED
@@ -73,68 +73,85 @@
73
  ctx.closePath()
74
  }
75
 
76
- // Mirror.'s "Dome / Clarity" mark — see docs/Mirror_Canonical_Vision.md and
77
- // frontend/src/components/Logo.jsx (the in-app source of truth this canvas
78
- // version is kept in sync with by hand, since it has no build-time access
79
- // to the React component). Dark rounded-square background, 7 individually
80
- // placed gray dashes tracing the ghost dome's arc (exact coordinates in a
81
- // 0-100 space, mirrored around the crown — matches Logo.jsx's DASH_COORDS
82
- // exactly, not approximated via a dash pattern), a mirror line with a real
83
- // gap on both sides, and a solid dome below glowing brighter at its center
84
- // and deepening toward its edges (radial gradient).
85
- const DASH_COORDS = [
86
- [24.30, 38.39, 26.45, 33.21],
87
- [29.17, 29.13, 33.13, 25.17],
88
- [37.21, 22.45, 42.39, 20.30],
89
- [47.20, 19.35, 52.80, 19.35],
90
- [57.61, 20.30, 62.79, 22.45],
91
- [66.87, 25.17, 70.83, 29.13],
92
- [73.55, 33.21, 75.70, 38.39],
93
- ]
94
-
95
  function drawIcon(size) {
96
  const canvas = document.createElement('canvas')
97
  canvas.width = size
98
  canvas.height = size
99
  const ctx = canvas.getContext('2d')
100
- const s = size / 100 // scale factor: DASH_COORDS etc. are in 0-100 space
101
 
102
- // Rounded background — near-black, matches the app's own dark theme.
103
- const r = size * 0.22
104
  ctx.fillStyle = '#0f1117'
105
  roundedRect(ctx, 0, 0, size, size, r)
106
  ctx.fill()
107
 
108
- // 7 dashes tracing the ghost dome
109
- ctx.strokeStyle = '#5c6079'
110
- ctx.lineWidth = Math.max(1.2, size * 0.042)
111
- ctx.lineCap = 'round'
112
- DASH_COORDS.forEach(([x1, y1, x2, y2]) => {
113
- ctx.beginPath()
114
- ctx.moveTo(x1 * s, y1 * s)
115
- ctx.lineTo(x2 * s, y2 * s)
116
- ctx.stroke()
117
- })
118
 
119
- // Mirror line — gapped from both domes, not touching either
120
- ctx.strokeStyle = '#8b8ca3'
121
- ctx.lineWidth = Math.max(1, size * 0.032)
122
- ctx.beginPath()
123
- ctx.moveTo(10 * s, 50 * s)
124
- ctx.lineTo(90 * s, 50 * s)
125
- ctx.stroke()
126
-
127
- // Solid bottom dome — bright at center, deepening toward the edges
128
- const domeCx = 50 * s, domeCy = 54 * s, domeR = 27 * s
129
- const grad = ctx.createRadialGradient(domeCx, domeCy, 0, domeCx, domeCy, domeR)
130
- grad.addColorStop(0, '#a5b4fc')
131
- grad.addColorStop(0.55, '#1d4ed8')
132
- grad.addColorStop(1, '#1e3a8a')
133
- ctx.fillStyle = grad
134
- ctx.beginPath()
135
- ctx.arc(domeCx, domeCy, domeR, 0, Math.PI, false)
136
- ctx.fill()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
 
138
  return canvas
139
  }
140
 
 
73
  ctx.closePath()
74
  }
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  function drawIcon(size) {
77
  const canvas = document.createElement('canvas')
78
  canvas.width = size
79
  canvas.height = size
80
  const ctx = canvas.getContext('2d')
 
81
 
82
+ // Rounded background
83
+ const r = size * 0.18
84
  ctx.fillStyle = '#0f1117'
85
  roundedRect(ctx, 0, 0, size, size, r)
86
  ctx.fill()
87
 
88
+ const grad = ctx.createLinearGradient(0, 0, size, 0)
89
+ grad.addColorStop(0, '#1d4ed8')
90
+ grad.addColorStop(1, '#0891b2')
 
 
 
 
 
 
 
91
 
92
+ function bar(x, y, w, h, br, alpha) {
93
+ ctx.globalAlpha = alpha
94
+ ctx.fillStyle = grad
95
+ roundedRect(ctx, x, y, w, h, br)
96
+ ctx.fill()
97
+ }
98
+
99
+ if (size === 16) {
100
+ // Simplified 3-bar design — bold and crisp at tiny size
101
+ const mid = size / 2 // 8
102
+ // bar positions: left, center, right
103
+ // top bars
104
+ bar(2, 5, 2, 3, 1, 0.55) // left short
105
+ bar(7, 2, 2, 6, 1, 1.00) // center tall
106
+ bar(12, 5, 2, 3, 1, 0.55) // right short
107
+ // mirror line
108
+ ctx.globalAlpha = 1
109
+ ctx.strokeStyle = '#2a3050'
110
+ ctx.lineWidth = 1
111
+ ctx.beginPath(); ctx.moveTo(0, mid); ctx.lineTo(size, mid); ctx.stroke()
112
+ // reflection bars
113
+ bar(2, 9, 2, 3, 1, 0.22)
114
+ bar(7, 9, 2, 5, 1, 0.38)
115
+ bar(12, 9, 2, 3, 1, 0.22)
116
+
117
+ } else if (size === 48) {
118
+ // 5-bar design on a 48×48 grid — balanced
119
+ const mid = 24
120
+ bar(4, 18, 6, 6, 3, 0.40)
121
+ bar(12, 12, 6, 12, 3, 0.65)
122
+ bar(21, 6, 6, 18, 3, 1.00)
123
+ bar(30, 12, 6, 12, 3, 0.65)
124
+ bar(38, 18, 6, 6, 3, 0.40)
125
+ ctx.globalAlpha = 1
126
+ ctx.strokeStyle = '#2a3050'
127
+ ctx.lineWidth = 1.5
128
+ ctx.beginPath(); ctx.moveTo(0, mid); ctx.lineTo(size, mid); ctx.stroke()
129
+ bar(4, 25, 6, 6, 3, 0.18)
130
+ bar(12, 25, 6, 11, 3, 0.30)
131
+ bar(21, 25, 6, 17, 3, 0.38)
132
+ bar(30, 25, 6, 11, 3, 0.30)
133
+ bar(38, 25, 6, 6, 3, 0.18)
134
+
135
+ } else {
136
+ // 128px — full detailed design on 128×128 grid
137
+ const mid = 64
138
+ bar(8, 48, 16, 16, 8, 0.40)
139
+ bar(30, 32, 16, 32, 8, 0.65)
140
+ bar(56, 12, 16, 52, 8, 1.00)
141
+ bar(82, 32, 16, 32, 8, 0.65)
142
+ bar(104,48, 16, 16, 8, 0.40)
143
+ ctx.globalAlpha = 1
144
+ ctx.strokeStyle = '#2a3050'
145
+ ctx.lineWidth = 2
146
+ ctx.beginPath(); ctx.moveTo(0, mid); ctx.lineTo(size, mid); ctx.stroke()
147
+ bar(8, 66, 16, 16, 8, 0.18)
148
+ bar(30, 66, 16, 30, 8, 0.30)
149
+ bar(56, 66, 16, 50, 8, 0.38)
150
+ bar(82, 66, 16, 30, 8, 0.30)
151
+ bar(104,66, 16, 16, 8, 0.18)
152
+ }
153
 
154
+ ctx.globalAlpha = 1
155
  return canvas
156
  }
157
 
frontend/public/favicon.svg CHANGED
frontend/public/icons/icon128.png CHANGED
frontend/public/icons/icon16.png CHANGED
frontend/public/icons/icon48.png CHANGED
frontend/src/App.jsx CHANGED
@@ -1,7 +1,6 @@
1
  import { useState, useEffect } from "react"
2
  import { supabase } from "./lib/supabase"
3
  import api from "./lib/api"
4
- import { LogoLockup } from "./components/Logo"
5
  import AuthView from "./components/AuthView"
6
  import OnboardingView from "./components/OnboardingView"
7
  import ResultsView from "./components/ResultsView"
@@ -150,7 +149,29 @@ export default function App() {
150
  {/* Header */}
151
  <div style={{ marginBottom: 28, display: "flex",
152
  justifyContent: "space-between", alignItems: "flex-start" }}>
153
- <LogoLockup markSize={26} fontSize={22} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
 
155
  <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
156
  {/* Open as full page — only in side panel */}
 
1
  import { useState, useEffect } from "react"
2
  import { supabase } from "./lib/supabase"
3
  import api from "./lib/api"
 
4
  import AuthView from "./components/AuthView"
5
  import OnboardingView from "./components/OnboardingView"
6
  import ResultsView from "./components/ResultsView"
 
149
  {/* Header */}
150
  <div style={{ marginBottom: 28, display: "flex",
151
  justifyContent: "space-between", alignItems: "flex-start" }}>
152
+ <div style={{ display: "flex", alignItems: "center", gap: 10 }}>
153
+ <svg width="26" height="26" viewBox="0 0 32 32" fill="none">
154
+ <defs>
155
+ <linearGradient id="hdr-g" x1="0" y1="0" x2="32" y2="0" gradientUnits="userSpaceOnUse">
156
+ <stop stopColor="#1d4ed8"/><stop offset="1" stopColor="#0891b2"/>
157
+ </linearGradient>
158
+ </defs>
159
+ <rect x="2" y="12" width="4" height="4" rx="2" fill="url(#hdr-g)" opacity=".4"/>
160
+ <rect x="8" y="8" width="4" height="8" rx="2" fill="url(#hdr-g)" opacity=".65"/>
161
+ <rect x="14" y="4" width="4" height="12" rx="2" fill="url(#hdr-g)"/>
162
+ <rect x="20" y="8" width="4" height="8" rx="2" fill="url(#hdr-g)" opacity=".65"/>
163
+ <rect x="26" y="12" width="4" height="4" rx="2" fill="url(#hdr-g)" opacity=".4"/>
164
+ <line x1="0" y1="17.5" x2="32" y2="17.5" stroke="#1e2438" strokeWidth="1"/>
165
+ <rect x="2" y="18" width="4" height="4" rx="2" fill="url(#hdr-g)" opacity=".18"/>
166
+ <rect x="8" y="18" width="4" height="8" rx="2" fill="url(#hdr-g)" opacity=".3"/>
167
+ <rect x="14" y="18" width="4" height="12" rx="2" fill="url(#hdr-g)" opacity=".38"/>
168
+ <rect x="20" y="18" width="4" height="8" rx="2" fill="url(#hdr-g)" opacity=".3"/>
169
+ <rect x="26" y="18" width="4" height="4" rx="2" fill="url(#hdr-g)" opacity=".18"/>
170
+ </svg>
171
+ <h1 style={{ fontSize: 22, fontWeight: 700, margin: 0, letterSpacing: "-0.3px", color: "#f0eeff" }}>
172
+ mirror<span style={{ color: "#1d4ed8" }}>.</span>
173
+ </h1>
174
+ </div>
175
 
176
  <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
177
  {/* Open as full page — only in side panel */}
frontend/src/components/AuthView.jsx CHANGED
@@ -1,6 +1,5 @@
1
  import { useState, useRef } from "react"
2
  import { supabase } from "../lib/supabase"
3
- import { DomeMark } from "./Logo"
4
 
5
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
6
 
@@ -131,9 +130,24 @@ export default function AuthView({ onAuth }) {
131
 
132
  {/* Logo */}
133
  <div style={{ textAlign: "center", marginBottom: 36 }}>
134
- <div style={{ display: "flex", justifyContent: "center", marginBottom: 14 }}>
135
- <DomeMark size={48} />
136
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  <h1 style={{ fontSize: 24, fontWeight: 700, margin: "0 0 6px",
138
  letterSpacing: "-0.5px", color: "#f0eeff" }}>
139
  mirror<span style={{ color: "#1d4ed8" }}>.</span>
 
1
  import { useState, useRef } from "react"
2
  import { supabase } from "../lib/supabase"
 
3
 
4
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
5
 
 
130
 
131
  {/* Logo */}
132
  <div style={{ textAlign: "center", marginBottom: 36 }}>
133
+ <svg width="48" height="48" viewBox="0 0 52 52" fill="none" style={{ marginBottom: 14 }}>
134
+ <defs>
135
+ <linearGradient id="auth-g" x1="0" y1="0" x2="52" y2="0" gradientUnits="userSpaceOnUse">
136
+ <stop stopColor="#1d4ed8"/><stop offset="1" stopColor="#0891b2"/>
137
+ </linearGradient>
138
+ </defs>
139
+ <rect x="2" y="20" width="6" height="6" rx="3" fill="url(#auth-g)" opacity=".35"/>
140
+ <rect x="11" y="13" width="6" height="13" rx="3" fill="url(#auth-g)" opacity=".6"/>
141
+ <rect x="20" y="6" width="8" height="20" rx="4" fill="url(#auth-g)"/>
142
+ <rect x="31" y="13" width="6" height="13" rx="3" fill="url(#auth-g)" opacity=".6"/>
143
+ <rect x="40" y="20" width="6" height="6" rx="3" fill="url(#auth-g)" opacity=".35"/>
144
+ <line x1="0" y1="28" x2="52" y2="28" stroke="#1e2438" strokeWidth="1.25"/>
145
+ <rect x="2" y="29" width="6" height="6" rx="3" fill="url(#auth-g)" opacity=".15"/>
146
+ <rect x="11" y="29" width="6" height="13" rx="3" fill="url(#auth-g)" opacity=".27"/>
147
+ <rect x="20" y="29" width="8" height="20" rx="4" fill="url(#auth-g)" opacity=".33"/>
148
+ <rect x="31" y="29" width="6" height="13" rx="3" fill="url(#auth-g)" opacity=".27"/>
149
+ <rect x="40" y="29" width="6" height="6" rx="3" fill="url(#auth-g)" opacity=".15"/>
150
+ </svg>
151
  <h1 style={{ fontSize: 24, fontWeight: 700, margin: "0 0 6px",
152
  letterSpacing: "-0.5px", color: "#f0eeff" }}>
153
  mirror<span style={{ color: "#1d4ed8" }}>.</span>
frontend/src/components/HowItWorksView.jsx CHANGED
@@ -1,5 +1,4 @@
1
  import Reveal, { RevealItem } from "./Reveal"
2
- import { DomeMark } from "./Logo"
3
 
4
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
5
 
@@ -98,7 +97,24 @@ export default function HowItWorksView({ onBack }) {
98
  <Reveal>
99
  <div style={{ textAlign: "center", marginBottom: 72 }}>
100
  <div style={{ display: "flex", justifyContent: "center", marginBottom: 20 }}>
101
- <DomeMark size={52} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  </div>
103
  <h1 style={{ fontSize: 30, fontWeight: 800, margin: "0 0 6px",
104
  letterSpacing: "-0.7px", lineHeight: 1.2, color: "#f0eeff" }}>
 
1
  import Reveal, { RevealItem } from "./Reveal"
 
2
 
3
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
4
 
 
97
  <Reveal>
98
  <div style={{ textAlign: "center", marginBottom: 72 }}>
99
  <div style={{ display: "flex", justifyContent: "center", marginBottom: 20 }}>
100
+ <svg width="52" height="52" viewBox="0 0 52 52" fill="none">
101
+ <defs>
102
+ <linearGradient id="hiw-g" x1="0" y1="0" x2="52" y2="0" gradientUnits="userSpaceOnUse">
103
+ <stop stopColor="#1d4ed8"/><stop offset="1" stopColor="#0891b2"/>
104
+ </linearGradient>
105
+ </defs>
106
+ <rect x="2" y="20" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".35"/>
107
+ <rect x="11" y="13" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".6"/>
108
+ <rect x="20" y="6" width="8" height="20" rx="4" fill="url(#hiw-g)"/>
109
+ <rect x="31" y="13" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".6"/>
110
+ <rect x="40" y="20" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".35"/>
111
+ <line x1="0" y1="28" x2="52" y2="28" stroke="#1e2438" strokeWidth="1.25"/>
112
+ <rect x="2" y="29" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".15"/>
113
+ <rect x="11" y="29" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".27"/>
114
+ <rect x="20" y="29" width="8" height="20" rx="4" fill="url(#hiw-g)" opacity=".33"/>
115
+ <rect x="31" y="29" width="6" height="13" rx="3" fill="url(#hiw-g)" opacity=".27"/>
116
+ <rect x="40" y="29" width="6" height="6" rx="3" fill="url(#hiw-g)" opacity=".15"/>
117
+ </svg>
118
  </div>
119
  <h1 style={{ fontSize: 30, fontWeight: 800, margin: "0 0 6px",
120
  letterSpacing: "-0.7px", lineHeight: 1.2, color: "#f0eeff" }}>
frontend/src/components/Logo.jsx DELETED
@@ -1,63 +0,0 @@
1
- import { useId } from "react"
2
-
3
- // Mirror.'s "Dome / Clarity" mark — single source of truth. Meaning, per
4
- // docs/Mirror_Canonical_Vision.md: you can't quite see yourself directly (the
5
- // faint, dashed dome above the line), but the reflection brings you into
6
- // focus (the solid, complete dome below, glowing brighter at its center and
7
- // deepening toward its edges). Every in-app usage should import from here
8
- // rather than duplicating SVG — that drift is exactly what the old bar-graph
9
- // logo suffered (5 independently hand-maintained copies).
10
- //
11
- // The 7 dash coordinates below are exact, individually computed points at
12
- // 22.5° increments around the ghost dome's arc (radius 26.8, center 50,46),
13
- // mirrored around the crown — deliberately not a stroke-dasharray, which
14
- // can't guarantee true bilateral symmetry.
15
- const DASH_COORDS = [
16
- [24.30, 38.39, 26.45, 33.21],
17
- [29.17, 29.13, 33.13, 25.17],
18
- [37.21, 22.45, 42.39, 20.30],
19
- [47.20, 19.35, 52.80, 19.35],
20
- [57.61, 20.30, 62.79, 22.45],
21
- [66.87, 25.17, 70.83, 29.13],
22
- [73.55, 33.21, 75.70, 38.39],
23
- ]
24
-
25
- export function DomeMark({
26
- size = 48,
27
- dashColor = "#6b6888",
28
- lineColor = "#8b89aa",
29
- domeBright = "#a5b4fc",
30
- domeMid = "#1d4ed8",
31
- domeDeep = "#1e3a8a",
32
- }) {
33
- const gradientId = useId()
34
- return (
35
- <svg width={size} height={size} viewBox="0 0 100 100" fill="none">
36
- <defs>
37
- <radialGradient id={gradientId} cx="50" cy="54" r="27" gradientUnits="userSpaceOnUse">
38
- <stop offset="0%" stopColor={domeBright} />
39
- <stop offset="55%" stopColor={domeMid} />
40
- <stop offset="100%" stopColor={domeDeep} />
41
- </radialGradient>
42
- </defs>
43
- <g stroke={dashColor} strokeWidth="4.2" strokeLinecap="round">
44
- {DASH_COORDS.map(([x1, y1, x2, y2], i) => (
45
- <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} />
46
- ))}
47
- </g>
48
- <line x1="10" y1="50" x2="90" y2="50" stroke={lineColor} strokeWidth="3.2" />
49
- <path d="M 23 54 A 27 27 0 0 0 77 54 Z" fill={`url(#${gradientId})`} />
50
- </svg>
51
- )
52
- }
53
-
54
- export function LogoLockup({ markSize = 26, fontSize = 22, gap = 10 }) {
55
- return (
56
- <div style={{ display: "flex", alignItems: "center", gap }}>
57
- <DomeMark size={markSize} />
58
- <h1 style={{ fontSize, fontWeight: 700, margin: 0, letterSpacing: "-0.3px", color: "#f0eeff" }}>
59
- mirror<span style={{ color: "#1d4ed8" }}>.</span>
60
- </h1>
61
- </div>
62
- )
63
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/src/components/OnboardingView.jsx CHANGED
@@ -1,13 +1,35 @@
1
  import { useState } from "react"
2
- import { DomeMark } from "./Logo"
3
 
4
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  function StepConcept() {
7
  return (
8
  <div>
9
  <div style={{ display: "flex", justifyContent: "center", marginBottom: 18 }}>
10
- <DomeMark size={48} />
11
  </div>
12
  <h1 style={{
13
  fontSize: 26, fontWeight: 700, color: "#f0eeff",
 
1
  import { useState } from "react"
 
2
 
3
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
4
 
5
+ function MirrorLogo() {
6
+ return (
7
+ <svg width="48" height="48" viewBox="0 0 52 52" fill="none">
8
+ <defs>
9
+ <linearGradient id="onb-g" x1="0" y1="0" x2="52" y2="0" gradientUnits="userSpaceOnUse">
10
+ <stop stopColor="#1d4ed8"/><stop offset="1" stopColor="#0891b2"/>
11
+ </linearGradient>
12
+ </defs>
13
+ <rect x="2" y="20" width="6" height="6" rx="3" fill="url(#onb-g)" opacity=".35"/>
14
+ <rect x="11" y="13" width="6" height="13" rx="3" fill="url(#onb-g)" opacity=".6"/>
15
+ <rect x="20" y="6" width="8" height="20" rx="4" fill="url(#onb-g)"/>
16
+ <rect x="31" y="13" width="6" height="13" rx="3" fill="url(#onb-g)" opacity=".6"/>
17
+ <rect x="40" y="20" width="6" height="6" rx="3" fill="url(#onb-g)" opacity=".35"/>
18
+ <line x1="0" y1="28" x2="52" y2="28" stroke="#1e2438" strokeWidth="1.25"/>
19
+ <rect x="2" y="29" width="6" height="6" rx="3" fill="url(#onb-g)" opacity=".15"/>
20
+ <rect x="11" y="29" width="6" height="13" rx="3" fill="url(#onb-g)" opacity=".27"/>
21
+ <rect x="20" y="29" width="8" height="20" rx="4" fill="url(#onb-g)" opacity=".33"/>
22
+ <rect x="31" y="29" width="6" height="13" rx="3" fill="url(#onb-g)" opacity=".3"/>
23
+ <rect x="40" y="29" width="6" height="6" rx="3" fill="url(#onb-g)" opacity=".15"/>
24
+ </svg>
25
+ )
26
+ }
27
+
28
  function StepConcept() {
29
  return (
30
  <div>
31
  <div style={{ display: "flex", justifyContent: "center", marginBottom: 18 }}>
32
+ <MirrorLogo />
33
  </div>
34
  <h1 style={{
35
  fontSize: 26, fontWeight: 700, color: "#f0eeff",
frontend/src/components/ProfileView.jsx CHANGED
@@ -6,7 +6,6 @@ import {
6
  } from "recharts"
7
  import api from "../lib/api"
8
  import Reveal, { RevealItem } from "./Reveal"
9
- import { DomeMark } from "./Logo"
10
 
11
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
12
 
@@ -543,7 +542,24 @@ export default function ProfileView({ active }) {
543
  return (
544
  <div style={{ textAlign: "center", padding: "60px 20px" }}>
545
  <div style={{ display: "flex", justifyContent: "center", marginBottom: 16 }}>
546
- <DomeMark size={52} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  </div>
548
  <h2 style={{ fontSize: 20, fontWeight: 700, margin: "0 0 10px", color: "#f0eeff" }}>
549
  Your mirror is waiting
 
6
  } from "recharts"
7
  import api from "../lib/api"
8
  import Reveal, { RevealItem } from "./Reveal"
 
9
 
10
  const G = "linear-gradient(135deg, #1d4ed8 0%, #0891b2 100%)"
11
 
 
542
  return (
543
  <div style={{ textAlign: "center", padding: "60px 20px" }}>
544
  <div style={{ display: "flex", justifyContent: "center", marginBottom: 16 }}>
545
+ <svg width="52" height="52" viewBox="0 0 52 52" fill="none">
546
+ <defs>
547
+ <linearGradient id="pv-empty-g" x1="0" y1="0" x2="52" y2="0" gradientUnits="userSpaceOnUse">
548
+ <stop stopColor="#1d4ed8"/><stop offset="1" stopColor="#0891b2"/>
549
+ </linearGradient>
550
+ </defs>
551
+ <rect x="2" y="20" width="6" height="6" rx="3" fill="url(#pv-empty-g)" opacity=".35"/>
552
+ <rect x="11" y="13" width="6" height="13" rx="3" fill="url(#pv-empty-g)" opacity=".6"/>
553
+ <rect x="20" y="6" width="8" height="20" rx="4" fill="url(#pv-empty-g)"/>
554
+ <rect x="31" y="13" width="6" height="13" rx="3" fill="url(#pv-empty-g)" opacity=".6"/>
555
+ <rect x="40" y="20" width="6" height="6" rx="3" fill="url(#pv-empty-g)" opacity=".35"/>
556
+ <line x1="0" y1="28" x2="52" y2="28" stroke="#1e2438" strokeWidth="1.25"/>
557
+ <rect x="2" y="29" width="6" height="6" rx="3" fill="url(#pv-empty-g)" opacity=".15"/>
558
+ <rect x="11" y="29" width="6" height="13" rx="3" fill="url(#pv-empty-g)" opacity=".27"/>
559
+ <rect x="20" y="29" width="8" height="20" rx="4" fill="url(#pv-empty-g)" opacity=".33"/>
560
+ <rect x="31" y="29" width="6" height="13" rx="3" fill="url(#pv-empty-g)" opacity=".27"/>
561
+ <rect x="40" y="29" width="6" height="6" rx="3" fill="url(#pv-empty-g)" opacity=".15"/>
562
+ </svg>
563
  </div>
564
  <h2 style={{ fontSize: 20, fontWeight: 700, margin: "0 0 10px", color: "#f0eeff" }}>
565
  Your mirror is waiting