visionos-monorepo 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/.claude/worktrees/competent-burnell-8d1330/README.md +138 -0
  2. package/.claude/worktrees/competent-burnell-8d1330/cli/package.json +35 -0
  3. package/.claude/worktrees/competent-burnell-8d1330/cli/scripts/copy-web-assets.mjs +12 -0
  4. package/.claude/worktrees/competent-burnell-8d1330/cli/src/commands/logout.ts +12 -0
  5. package/.claude/worktrees/competent-burnell-8d1330/cli/src/commands/open.ts +19 -0
  6. package/.claude/worktrees/competent-burnell-8d1330/cli/src/commands/start.ts +97 -0
  7. package/.claude/worktrees/competent-burnell-8d1330/cli/src/commands/status.ts +23 -0
  8. package/.claude/worktrees/competent-burnell-8d1330/cli/src/commands/userinfo.ts +47 -0
  9. package/.claude/worktrees/competent-burnell-8d1330/cli/src/index.ts +23 -0
  10. package/.claude/worktrees/competent-burnell-8d1330/cli/src/lib/auth.ts +84 -0
  11. package/.claude/worktrees/competent-burnell-8d1330/cli/src/lib/browser.ts +37 -0
  12. package/.claude/worktrees/competent-burnell-8d1330/cli/src/lib/localState.ts +80 -0
  13. package/.claude/worktrees/competent-burnell-8d1330/cli/src/lib/runtime.ts +203 -0
  14. package/.claude/worktrees/competent-burnell-8d1330/cli/src/runtime/index.ts +36 -0
  15. package/.claude/worktrees/competent-burnell-8d1330/cli/src/types/inquirer.d.ts +9 -0
  16. package/.claude/worktrees/competent-burnell-8d1330/cli/tsconfig.json +19 -0
  17. package/.claude/worktrees/competent-burnell-8d1330/client/index.html +15 -0
  18. package/.claude/worktrees/competent-burnell-8d1330/client/package.json +27 -0
  19. package/.claude/worktrees/competent-burnell-8d1330/client/postcss.config.cjs +7 -0
  20. package/.claude/worktrees/competent-burnell-8d1330/client/src/App.tsx +57 -0
  21. package/.claude/worktrees/competent-burnell-8d1330/client/src/components/CliAuthPage.tsx +385 -0
  22. package/.claude/worktrees/competent-burnell-8d1330/client/src/components/ManifestoPage.tsx +946 -0
  23. package/.claude/worktrees/competent-burnell-8d1330/client/src/components/TrackCard.tsx +19 -0
  24. package/.claude/worktrees/competent-burnell-8d1330/client/src/lib/api.ts +58 -0
  25. package/.claude/worktrees/competent-burnell-8d1330/client/src/main.tsx +11 -0
  26. package/.claude/worktrees/competent-burnell-8d1330/client/src/styles/index.css +33 -0
  27. package/.claude/worktrees/competent-burnell-8d1330/client/src/styles/manifesto.css +1398 -0
  28. package/.claude/worktrees/competent-burnell-8d1330/client/tailwind.config.ts +36 -0
  29. package/.claude/worktrees/competent-burnell-8d1330/client/tsconfig.json +25 -0
  30. package/.claude/worktrees/competent-burnell-8d1330/client/vite.config.ts +20 -0
  31. package/.claude/worktrees/competent-burnell-8d1330/package-lock.json +5278 -0
  32. package/.claude/worktrees/competent-burnell-8d1330/package.json +24 -0
  33. package/.claude/worktrees/competent-burnell-8d1330/server/package.json +25 -0
  34. package/.claude/worktrees/competent-burnell-8d1330/server/src/app.ts +71 -0
  35. package/.claude/worktrees/competent-burnell-8d1330/server/src/config/env.ts +14 -0
  36. package/.claude/worktrees/competent-burnell-8d1330/server/src/features/auth/sessionStore.ts +74 -0
  37. package/.claude/worktrees/competent-burnell-8d1330/server/src/index.ts +8 -0
  38. package/.claude/worktrees/competent-burnell-8d1330/server/src/routes/auth.ts +112 -0
  39. package/.claude/worktrees/competent-burnell-8d1330/server/src/routes/health.ts +14 -0
  40. package/.claude/worktrees/competent-burnell-8d1330/server/tsconfig.json +19 -0
  41. package/.claude/worktrees/competent-burnell-8d1330/shared/package.json +24 -0
  42. package/.claude/worktrees/competent-burnell-8d1330/shared/src/index.ts +91 -0
  43. package/.claude/worktrees/competent-burnell-8d1330/shared/tsconfig.json +16 -0
  44. package/.claude/worktrees/competent-burnell-8d1330/tsconfig.base.json +12 -0
  45. package/.claude/worktrees/competent-burnell-8d1330/visionos-manifesto/index.html +392 -0
  46. package/.claude/worktrees/competent-burnell-8d1330/visionos-manifesto/script.js +146 -0
  47. package/.claude/worktrees/competent-burnell-8d1330/visionos-manifesto/styles.css +1082 -0
  48. package/.claude/worktrees/vigilant-napier-0de76f/README.md +138 -0
  49. package/.claude/worktrees/vigilant-napier-0de76f/cli/package.json +35 -0
  50. package/.claude/worktrees/vigilant-napier-0de76f/cli/scripts/copy-web-assets.mjs +12 -0
  51. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/commands/logout.ts +12 -0
  52. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/commands/open.ts +19 -0
  53. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/commands/start.ts +97 -0
  54. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/commands/status.ts +23 -0
  55. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/commands/userinfo.ts +47 -0
  56. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/index.ts +23 -0
  57. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/lib/auth.ts +84 -0
  58. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/lib/browser.ts +37 -0
  59. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/lib/localState.ts +80 -0
  60. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/lib/runtime.ts +203 -0
  61. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/runtime/index.ts +36 -0
  62. package/.claude/worktrees/vigilant-napier-0de76f/cli/src/types/inquirer.d.ts +9 -0
  63. package/.claude/worktrees/vigilant-napier-0de76f/cli/tsconfig.json +19 -0
  64. package/.claude/worktrees/vigilant-napier-0de76f/client/index.html +15 -0
  65. package/.claude/worktrees/vigilant-napier-0de76f/client/package.json +27 -0
  66. package/.claude/worktrees/vigilant-napier-0de76f/client/postcss.config.cjs +7 -0
  67. package/.claude/worktrees/vigilant-napier-0de76f/client/src/App.tsx +57 -0
  68. package/.claude/worktrees/vigilant-napier-0de76f/client/src/components/CliAuthPage.tsx +385 -0
  69. package/.claude/worktrees/vigilant-napier-0de76f/client/src/components/ManifestoPage.tsx +946 -0
  70. package/.claude/worktrees/vigilant-napier-0de76f/client/src/components/TrackCard.tsx +19 -0
  71. package/.claude/worktrees/vigilant-napier-0de76f/client/src/lib/api.ts +58 -0
  72. package/.claude/worktrees/vigilant-napier-0de76f/client/src/main.tsx +11 -0
  73. package/.claude/worktrees/vigilant-napier-0de76f/client/src/styles/index.css +33 -0
  74. package/.claude/worktrees/vigilant-napier-0de76f/client/src/styles/manifesto.css +1398 -0
  75. package/.claude/worktrees/vigilant-napier-0de76f/client/tailwind.config.ts +36 -0
  76. package/.claude/worktrees/vigilant-napier-0de76f/client/tsconfig.json +25 -0
  77. package/.claude/worktrees/vigilant-napier-0de76f/client/vite.config.ts +20 -0
  78. package/.claude/worktrees/vigilant-napier-0de76f/package-lock.json +5278 -0
  79. package/.claude/worktrees/vigilant-napier-0de76f/package.json +24 -0
  80. package/.claude/worktrees/vigilant-napier-0de76f/server/package.json +25 -0
  81. package/.claude/worktrees/vigilant-napier-0de76f/server/src/app.ts +71 -0
  82. package/.claude/worktrees/vigilant-napier-0de76f/server/src/config/env.ts +14 -0
  83. package/.claude/worktrees/vigilant-napier-0de76f/server/src/features/auth/sessionStore.ts +74 -0
  84. package/.claude/worktrees/vigilant-napier-0de76f/server/src/index.ts +8 -0
  85. package/.claude/worktrees/vigilant-napier-0de76f/server/src/routes/auth.ts +112 -0
  86. package/.claude/worktrees/vigilant-napier-0de76f/server/src/routes/health.ts +14 -0
  87. package/.claude/worktrees/vigilant-napier-0de76f/server/tsconfig.json +19 -0
  88. package/.claude/worktrees/vigilant-napier-0de76f/shared/package.json +24 -0
  89. package/.claude/worktrees/vigilant-napier-0de76f/shared/src/index.ts +91 -0
  90. package/.claude/worktrees/vigilant-napier-0de76f/shared/tsconfig.json +16 -0
  91. package/.claude/worktrees/vigilant-napier-0de76f/tsconfig.base.json +12 -0
  92. package/.claude/worktrees/vigilant-napier-0de76f/visionos-manifesto/index.html +392 -0
  93. package/.claude/worktrees/vigilant-napier-0de76f/visionos-manifesto/script.js +146 -0
  94. package/.claude/worktrees/vigilant-napier-0de76f/visionos-manifesto/styles.css +1082 -0
  95. package/.github/workflows/publish.yml +30 -0
  96. package/README.md +175 -0
  97. package/cli/README.md +165 -0
  98. package/cli/package.json +36 -0
  99. package/cli/scripts/copy-web-assets.mjs +12 -0
  100. package/cli/src/commands/lessons.ts +68 -0
  101. package/cli/src/commands/login.ts +46 -0
  102. package/cli/src/commands/logout.ts +12 -0
  103. package/cli/src/commands/open.ts +29 -0
  104. package/cli/src/commands/start.ts +146 -0
  105. package/cli/src/commands/status.ts +28 -0
  106. package/cli/src/commands/userinfo.ts +59 -0
  107. package/cli/src/index.ts +109 -0
  108. package/cli/src/lib/auth.ts +84 -0
  109. package/cli/src/lib/browser.ts +37 -0
  110. package/cli/src/lib/content.ts +57 -0
  111. package/cli/src/lib/lessonPrinter.ts +38 -0
  112. package/cli/src/lib/lessonRunner.ts +381 -0
  113. package/cli/src/lib/localState.ts +114 -0
  114. package/cli/src/lib/loginFlow.ts +74 -0
  115. package/cli/src/lib/progress.ts +94 -0
  116. package/cli/src/lib/runtime.ts +220 -0
  117. package/cli/src/lib/validator.ts +401 -0
  118. package/cli/src/runtime/index.ts +108 -0
  119. package/cli/src/types/inquirer.d.ts +9 -0
  120. package/cli/tsconfig.json +19 -0
  121. package/client/index.html +15 -0
  122. package/client/package.json +27 -0
  123. package/client/postcss.config.cjs +7 -0
  124. package/client/src/App.tsx +102 -0
  125. package/client/src/components/AccountPage.tsx +79 -0
  126. package/client/src/components/AuthPanel.tsx +312 -0
  127. package/client/src/components/CliAuthPage.tsx +367 -0
  128. package/client/src/components/CreatorPortal.tsx +885 -0
  129. package/client/src/components/ErrorBoundary.tsx +92 -0
  130. package/client/src/components/ManifestoPage.tsx +1126 -0
  131. package/client/src/components/TrackCard.tsx +19 -0
  132. package/client/src/lib/api.ts +215 -0
  133. package/client/src/main.tsx +14 -0
  134. package/client/src/styles/index.css +33 -0
  135. package/client/src/styles/manifesto.css +1828 -0
  136. package/client/tailwind.config.ts +36 -0
  137. package/client/tsconfig.json +25 -0
  138. package/client/vercel.json +8 -0
  139. package/client/vite.config.ts +33 -0
  140. package/package.json +27 -0
  141. package/server/package.json +26 -0
  142. package/server/src/app.ts +132 -0
  143. package/server/src/config/env.ts +135 -0
  144. package/server/src/features/accounts/accountStore.ts +359 -0
  145. package/server/src/features/accounts/contentStore.ts +264 -0
  146. package/server/src/features/accounts/password.ts +26 -0
  147. package/server/src/features/auth/sessionStore.ts +79 -0
  148. package/server/src/index.ts +8 -0
  149. package/server/src/routes/auth.ts +328 -0
  150. package/server/src/routes/content.ts +174 -0
  151. package/server/src/routes/health.ts +14 -0
  152. package/server/src/routes/progress.ts +105 -0
  153. package/server/tsconfig.json +19 -0
  154. package/shared/package.json +24 -0
  155. package/shared/src/index.ts +455 -0
  156. package/shared/tsconfig.json +16 -0
  157. package/tsconfig.base.json +12 -0
  158. package/visionos-manifesto/index.html +392 -0
  159. package/visionos-manifesto/script.js +146 -0
  160. package/visionos-manifesto/styles.css +1082 -0
@@ -0,0 +1,1398 @@
1
+ /* ================================================================
2
+ VisionOS Manifesto — Mainframe-Inspired Design System (React)
3
+ ================================================================ */
4
+
5
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
6
+
7
+ /* ── Tokens ────────────────────────────────────────────────────── */
8
+ :root {
9
+ --bg-beige: #E0DFD5;
10
+ --bg-beige-light: #E8E7DF;
11
+ --bg-beige-dark: #D4D3CB;
12
+ --m-ink: #0A0A0A;
13
+ --ink-soft: #3A3A3A;
14
+ --ink-muted: #6B6B6B;
15
+ --ink-faint: #9A9A9A;
16
+ --accent-teal: #0e7490;
17
+ --accent-red: #E05A3A;
18
+ --accent-green: #2D8A56;
19
+ --m-white: #FAFAF8;
20
+ --bezel-outer: #A8A8A0;
21
+ --bezel-inner: #C5C4BC;
22
+ --bezel-highlight: #D8D7CF;
23
+
24
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
25
+ --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;
26
+
27
+ --space-xs: 0.5rem;
28
+ --space-sm: 1rem;
29
+ --space-md: 2rem;
30
+ --space-lg: 4rem;
31
+ --space-xl: 6rem;
32
+ --space-xxl: 10rem;
33
+
34
+ --radius-sm: 4px;
35
+ --radius-md: 8px;
36
+ --radius-lg: 16px;
37
+
38
+ --transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
39
+ --transition-spring: 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
40
+ }
41
+
42
+ /* ── Monitor Bezel Frame ───────────────────────────────────────── */
43
+ .monitor-bezel {
44
+ position: relative;
45
+ margin: 12px;
46
+ min-height: calc(100vh - 24px);
47
+ background: linear-gradient(180deg, var(--bezel-inner) 0%, var(--bezel-outer) 100%);
48
+ border-radius: 20px;
49
+ padding: 14px;
50
+ box-shadow:
51
+ inset 0 2px 4px rgba(255, 255, 255, 0.3),
52
+ inset 0 -2px 4px rgba(0, 0, 0, 0.15),
53
+ 0 8px 32px rgba(0, 0, 0, 0.2),
54
+ 0 2px 8px rgba(0, 0, 0, 0.1);
55
+ }
56
+
57
+ .monitor-screen {
58
+ position: relative;
59
+ background: var(--bg-beige);
60
+ border-radius: 10px;
61
+ min-height: calc(100vh - 48px);
62
+ overflow: hidden;
63
+ box-shadow:
64
+ inset 0 1px 3px rgba(0, 0, 0, 0.08),
65
+ 0 1px 2px rgba(255, 255, 255, 0.4);
66
+ }
67
+
68
+ /* Subtle CRT scan-line overlay */
69
+ .monitor-screen::before {
70
+ content: '';
71
+ position: fixed;
72
+ top: 0;
73
+ left: 0;
74
+ right: 0;
75
+ bottom: 0;
76
+ background: repeating-linear-gradient(0deg,
77
+ transparent,
78
+ transparent 2px,
79
+ rgba(0, 0, 0, 0.008) 2px,
80
+ rgba(0, 0, 0, 0.008) 4px);
81
+ pointer-events: none;
82
+ z-index: 100;
83
+ }
84
+
85
+ /* Bottom bezel notch */
86
+ .bezel-notch {
87
+ display: flex;
88
+ justify-content: center;
89
+ padding: 8px 0 4px;
90
+ }
91
+
92
+ .bezel-notch-inner {
93
+ width: 36px;
94
+ height: 4px;
95
+ background: var(--bezel-outer);
96
+ border-radius: 2px;
97
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15);
98
+ }
99
+
100
+ /* ── Sticky Header ─────────────────────────────────────────────── */
101
+ .m-site-header {
102
+ position: sticky;
103
+ top: 0;
104
+ z-index: 50;
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: space-between;
108
+ padding: 20px 40px;
109
+ background: rgba(224, 223, 213, 0.85);
110
+ backdrop-filter: blur(12px);
111
+ -webkit-backdrop-filter: blur(12px);
112
+ border-bottom: 1px solid rgba(0, 0, 0, 0.04);
113
+ transition: background 0.3s ease, border-color 0.3s ease;
114
+ }
115
+
116
+ .m-site-header.scrolled {
117
+ background: rgba(224, 223, 213, 0.95);
118
+ border-bottom-color: rgba(0, 0, 0, 0.08);
119
+ }
120
+
121
+ .header-left {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 32px;
125
+ }
126
+
127
+ .header-brand {
128
+ font-weight: 700;
129
+ font-size: 0.85rem;
130
+ letter-spacing: 0.02em;
131
+ color: var(--m-ink);
132
+ }
133
+
134
+ .header-meta {
135
+ font-size: 0.7rem;
136
+ color: var(--ink-muted);
137
+ line-height: 1.4;
138
+ }
139
+
140
+ .header-nav {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 24px;
144
+ }
145
+
146
+ .header-nav a {
147
+ font-size: 0.82rem;
148
+ font-weight: 500;
149
+ color: var(--m-ink);
150
+ transition: color var(--transition-base);
151
+ display: flex;
152
+ align-items: center;
153
+ gap: 3px;
154
+ text-decoration: none;
155
+ }
156
+
157
+ .header-nav a:hover {
158
+ color: var(--accent-teal);
159
+ }
160
+
161
+ .header-nav .arrow {
162
+ font-size: 0.75rem;
163
+ opacity: 0.6;
164
+ }
165
+
166
+ /* ── Section Containers ────────────────────────────────────────── */
167
+ .m-section {
168
+ padding: var(--space-xxl) 60px;
169
+ position: relative;
170
+ font-family: var(--font-sans);
171
+ }
172
+
173
+ .m-section--hero {
174
+ min-height: 85vh;
175
+ display: flex;
176
+ flex-direction: column;
177
+ justify-content: flex-end;
178
+ padding-bottom: var(--space-lg);
179
+ }
180
+
181
+ /* ── Scan-Line Typography ──────────────────────────────────────── */
182
+ .scanline-text {
183
+ position: relative;
184
+ font-size: clamp(5rem, 14vw, 12rem);
185
+ font-weight: 900;
186
+ line-height: 0.85;
187
+ letter-spacing: -0.03em;
188
+ color: var(--m-ink);
189
+ overflow: hidden;
190
+ display: inline-block;
191
+ font-family: var(--font-sans);
192
+ max-width: 100%;
193
+ }
194
+
195
+ .mobile-break {
196
+ display: none;
197
+ }
198
+
199
+ .scanline-text::after {
200
+ content: '';
201
+ position: absolute;
202
+ top: 0;
203
+ left: -5%;
204
+ right: -5%;
205
+ bottom: 0;
206
+ background: repeating-linear-gradient(0deg,
207
+ transparent,
208
+ transparent 3px,
209
+ var(--bg-beige) 3px,
210
+ var(--bg-beige) 5.5px);
211
+ pointer-events: none;
212
+ }
213
+
214
+ /* Full-width scan-line band */
215
+ .scanline-band {
216
+ width: 100%;
217
+ position: relative;
218
+ overflow: hidden;
219
+ padding: 10px 0;
220
+ }
221
+
222
+ .scanline-band .scanline-text {
223
+ width: 100%;
224
+ display: block;
225
+ text-align: center;
226
+ }
227
+
228
+ .scanline-divider {
229
+ width: 100%;
230
+ height: 120px;
231
+ background: repeating-linear-gradient(0deg,
232
+ var(--m-ink),
233
+ var(--m-ink) 2px,
234
+ var(--bg-beige) 2px,
235
+ var(--bg-beige) 6px);
236
+ position: relative;
237
+ }
238
+
239
+ .scanline-divider--fade-top {
240
+ mask-image: linear-gradient(to bottom, transparent 0%, black 30%, black 100%);
241
+ -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 30%, black 100%);
242
+ }
243
+
244
+ .scanline-divider--fade-bottom {
245
+ mask-image: linear-gradient(to bottom, black 0%, black 70%, transparent 100%);
246
+ -webkit-mask-image: linear-gradient(to bottom, black 0%, black 70%, transparent 100%);
247
+ }
248
+
249
+ .scanline-divider--both {
250
+ mask-image: linear-gradient(to bottom, transparent 0%, black 20%, black 80%, transparent 100%);
251
+ -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 20%, black 80%, transparent 100%);
252
+ }
253
+
254
+ /* ── Typography ────────────────────────────────────────────────── */
255
+ .text-hero-lead {
256
+ font-size: clamp(1.5rem, 3vw, 2.2rem);
257
+ font-weight: 500;
258
+ line-height: 1.3;
259
+ color: var(--m-ink);
260
+ max-width: 700px;
261
+ font-family: var(--font-sans);
262
+ }
263
+
264
+ .text-narrative {
265
+ font-size: clamp(1.25rem, 2.2vw, 1.65rem);
266
+ font-weight: 600;
267
+ line-height: 1.55;
268
+ color: var(--m-ink);
269
+ max-width: min(580px, 100%);
270
+ overflow-wrap: break-word;
271
+ font-family: var(--font-sans);
272
+ }
273
+
274
+ .text-narrative--muted {
275
+ color: var(--ink-muted);
276
+ }
277
+
278
+ .m-text-body {
279
+ font-size: 1rem;
280
+ line-height: 1.7;
281
+ color: var(--ink-soft);
282
+ max-width: 540px;
283
+ font-family: var(--font-sans);
284
+ }
285
+
286
+ .text-label {
287
+ font-size: 0.7rem;
288
+ font-weight: 500;
289
+ letter-spacing: 0.02em;
290
+ color: var(--ink-muted);
291
+ text-transform: lowercase;
292
+ font-family: var(--font-sans);
293
+ }
294
+
295
+ .text-section-title {
296
+ font-size: clamp(2.5rem, 5vw, 4rem);
297
+ font-weight: 900;
298
+ line-height: 1.1;
299
+ letter-spacing: -0.03em;
300
+ color: var(--m-ink);
301
+ font-family: var(--font-sans);
302
+ }
303
+
304
+ .text-section-subtitle {
305
+ font-size: clamp(2rem, 4vw, 3.2rem);
306
+ font-weight: 400;
307
+ line-height: 1.2;
308
+ color: var(--ink-muted);
309
+ font-family: var(--font-sans);
310
+ }
311
+
312
+ /* ── Hero-Specific ─────────────────────────────────────────────── */
313
+ .hero-content {
314
+ padding: 0 60px;
315
+ }
316
+
317
+ .hero-prompt {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 10px;
321
+ margin-top: var(--space-md);
322
+ font-size: 0.9rem;
323
+ color: var(--ink-soft);
324
+ font-family: var(--font-sans);
325
+ }
326
+
327
+ .hero-prompt-key {
328
+ display: inline-flex;
329
+ align-items: center;
330
+ padding: 4px 12px;
331
+ background: var(--m-white);
332
+ border: 1px solid rgba(0, 0, 0, 0.1);
333
+ border-radius: var(--radius-sm);
334
+ font-family: var(--font-mono);
335
+ font-size: 0.78rem;
336
+ font-weight: 500;
337
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
338
+ justify-content: flex-end;
339
+ }
340
+
341
+ .hero-prompt-container {
342
+ display: flex;
343
+ justify-content: flex-end;
344
+ padding-right: 60px;
345
+ }
346
+
347
+ /* ── Scroll Indicator ──────────────────────────────────────────── */
348
+ .scroll-indicator {
349
+ display: flex;
350
+ flex-direction: column;
351
+ align-items: center;
352
+ gap: 2px;
353
+ margin: var(--space-xl) auto var(--space-md);
354
+ opacity: 0.6;
355
+ animation: scrollBounce 2s ease-in-out infinite;
356
+ transition: opacity 0.5s ease;
357
+ }
358
+
359
+ .scroll-indicator.hidden {
360
+ opacity: 0;
361
+ pointer-events: none;
362
+ }
363
+
364
+ .scroll-indicator svg {
365
+ width: 24px;
366
+ height: 24px;
367
+ }
368
+
369
+ .scroll-indicator .arrow {
370
+ font-size: 0.7rem;
371
+ line-height: 1;
372
+ }
373
+
374
+ @keyframes scrollBounce {
375
+
376
+ 0%,
377
+ 100% {
378
+ transform: translateY(0);
379
+ opacity: 0.6;
380
+ }
381
+
382
+ 50% {
383
+ transform: translateY(6px);
384
+ opacity: 1;
385
+ }
386
+ }
387
+
388
+ /* ── Figure / Annotation ───────────────────────────────────────── */
389
+ .figure-caption {
390
+ display: flex;
391
+ gap: 24px;
392
+ align-items: flex-start;
393
+ margin-top: 16px;
394
+ }
395
+
396
+ .figure-label {
397
+ font-size: 0.75rem;
398
+ font-weight: 500;
399
+ color: var(--ink-muted);
400
+ white-space: nowrap;
401
+ min-width: 36px;
402
+ font-family: var(--font-sans);
403
+ }
404
+
405
+ .figure-desc {
406
+ font-size: 0.75rem;
407
+ color: var(--ink-muted);
408
+ line-height: 1.5;
409
+ max-width: 260px;
410
+ font-family: var(--font-sans);
411
+ }
412
+
413
+ /* ── Terminal Illustration ─────────────────────────────────────── */
414
+ .terminal-window {
415
+ background: #1A1A1A;
416
+ border-radius: var(--radius-md);
417
+ overflow: hidden;
418
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);
419
+ border: 1px solid rgba(255, 255, 255, 0.06);
420
+ }
421
+
422
+ .terminal-titlebar {
423
+ display: flex;
424
+ align-items: center;
425
+ gap: 8px;
426
+ padding: 12px 16px;
427
+ background: #252525;
428
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
429
+ }
430
+
431
+ .terminal-dot {
432
+ width: 10px;
433
+ height: 10px;
434
+ border-radius: 50%;
435
+ }
436
+
437
+ .terminal-dot--red {
438
+ background: #FF5F56;
439
+ }
440
+
441
+ .terminal-dot--yellow {
442
+ background: #FFBD2E;
443
+ }
444
+
445
+ .terminal-dot--green {
446
+ background: #27C93F;
447
+ }
448
+
449
+ .terminal-body {
450
+ padding: 20px;
451
+ font-family: var(--font-mono);
452
+ font-size: 0.82rem;
453
+ line-height: 1.8;
454
+ color: #D4D4D4;
455
+ min-height: 180px;
456
+ max-width: 100%;
457
+ min-width: 300px;
458
+ }
459
+
460
+ .terminal-line {
461
+ display: block;
462
+ opacity: 0;
463
+ animation: terminalType 0.3s ease forwards;
464
+ }
465
+
466
+ .terminal-line .t-prompt {
467
+ color: var(--accent-teal);
468
+ font-weight: 600;
469
+ }
470
+
471
+ .terminal-line .command {
472
+ color: #E8E8E8;
473
+ }
474
+
475
+ .terminal-line .output {
476
+ color: #888;
477
+ }
478
+
479
+ .terminal-line .success {
480
+ color: var(--accent-green);
481
+ }
482
+
483
+ /* Staggered terminal line animations */
484
+ .terminal-line:nth-child(1) {
485
+ animation-delay: 0.2s;
486
+ }
487
+
488
+ .terminal-line:nth-child(2) {
489
+ animation-delay: 0.6s;
490
+ }
491
+
492
+ .terminal-line:nth-child(3) {
493
+ animation-delay: 1.0s;
494
+ }
495
+
496
+ .terminal-line:nth-child(4) {
497
+ animation-delay: 1.4s;
498
+ }
499
+
500
+ .terminal-line:nth-child(5) {
501
+ animation-delay: 1.8s;
502
+ }
503
+
504
+ .terminal-line:nth-child(6) {
505
+ animation-delay: 2.2s;
506
+ }
507
+
508
+ .terminal-line:nth-child(7) {
509
+ animation-delay: 2.6s;
510
+ }
511
+
512
+ @keyframes terminalType {
513
+ from {
514
+ opacity: 0;
515
+ transform: translateY(4px);
516
+ }
517
+
518
+ to {
519
+ opacity: 1;
520
+ transform: translateY(0);
521
+ }
522
+ }
523
+
524
+ /* ── Asymmetric 2-Column Layout ────────────────────────────────── */
525
+ .split-layout {
526
+ display: grid;
527
+ grid-template-columns: 1fr 1fr;
528
+ gap: var(--space-lg);
529
+ align-items: start;
530
+ }
531
+
532
+ .split-layout--text-left {
533
+ grid-template-columns: 0.55fr 0.45fr;
534
+ }
535
+
536
+ .split-layout--text-right {
537
+ grid-template-columns: 0.45fr 0.55fr;
538
+ }
539
+
540
+ .split-layout--center {
541
+ align-items: center;
542
+ }
543
+
544
+ .split-layout > * {
545
+ min-width: 0;
546
+ }
547
+
548
+ /* ── Access Card ───────────────────────────────────────────────── */
549
+ .access-card {
550
+ background: var(--bg-beige-light);
551
+ border-radius: var(--radius-lg);
552
+ padding: 32px;
553
+ position: relative;
554
+ overflow: hidden;
555
+ border: 1px solid rgba(0, 0, 0, 0.06);
556
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
557
+ width: 100%;
558
+ max-width: 420px;
559
+ box-sizing: border-box;
560
+ }
561
+
562
+ .access-card-stripe {
563
+ position: absolute;
564
+ left: 0;
565
+ top: 0;
566
+ bottom: 0;
567
+ width: 48px;
568
+ background: repeating-linear-gradient(0deg,
569
+ var(--m-ink),
570
+ var(--m-ink) 2px,
571
+ var(--bg-beige-light) 2px,
572
+ var(--bg-beige-light) 5px);
573
+ }
574
+
575
+ .access-card-content {
576
+ margin-left: 64px;
577
+ }
578
+
579
+ .access-card-label {
580
+ font-size: 0.65rem;
581
+ color: var(--ink-muted);
582
+ text-transform: uppercase;
583
+ letter-spacing: 0.05em;
584
+ margin-bottom: 4px;
585
+ display: block;
586
+ font-family: var(--font-sans);
587
+ }
588
+
589
+ .access-card-value {
590
+ font-size: 1.1rem;
591
+ font-weight: 700;
592
+ color: var(--m-ink);
593
+ display: block;
594
+ font-family: var(--font-sans);
595
+ }
596
+
597
+ .access-card-row {
598
+ display: flex;
599
+ gap: 32px;
600
+ margin-top: 24px;
601
+ }
602
+
603
+ .access-card-field {
604
+ flex: 1;
605
+ }
606
+
607
+ .access-card-mono {
608
+ font-family: var(--font-mono);
609
+ font-weight: 600;
610
+ }
611
+
612
+ /* Copy Command Block */
613
+ .copy-command {
614
+ display: flex;
615
+ align-items: center;
616
+ gap: 12px;
617
+ padding: 16px 20px;
618
+ background: var(--m-white);
619
+ border: 1px solid rgba(0, 0, 0, 0.1);
620
+ border-radius: var(--radius-md);
621
+ font-family: var(--font-mono);
622
+ font-size: 0.88rem;
623
+ color: var(--m-ink);
624
+ cursor: pointer;
625
+ transition: all var(--transition-base);
626
+ max-width: 440px;
627
+ margin-top: var(--space-md);
628
+ position: relative;
629
+ }
630
+
631
+ .copy-command:hover {
632
+ border-color: var(--accent-teal);
633
+ box-shadow: 0 2px 12px rgba(14, 116, 144, 0.1);
634
+ }
635
+
636
+ .copy-command .copy-icon {
637
+ margin-left: auto;
638
+ opacity: 0.4;
639
+ transition: opacity var(--transition-base);
640
+ flex-shrink: 0;
641
+ }
642
+
643
+ .copy-command:hover .copy-icon {
644
+ opacity: 1;
645
+ }
646
+
647
+ .copy-command .copied-tooltip {
648
+ position: absolute;
649
+ top: -32px;
650
+ right: 0;
651
+ background: var(--m-ink);
652
+ color: var(--m-white);
653
+ padding: 4px 10px;
654
+ border-radius: var(--radius-sm);
655
+ font-size: 0.72rem;
656
+ opacity: 0;
657
+ transform: translateY(4px);
658
+ transition: all 0.2s ease;
659
+ pointer-events: none;
660
+ }
661
+
662
+ .copy-command.copied .copied-tooltip {
663
+ opacity: 1;
664
+ transform: translateY(0);
665
+ }
666
+
667
+ /* ── Steps / How It Works ──────────────────────────────────────── */
668
+ .steps-grid {
669
+ display: grid;
670
+ grid-template-columns: repeat(3, 1fr);
671
+ gap: var(--space-md);
672
+ margin-top: var(--space-lg);
673
+ }
674
+
675
+ .step-card {
676
+ padding: 32px;
677
+ border-radius: var(--radius-lg);
678
+ background: var(--bg-beige-light);
679
+ border: 1px solid rgba(0, 0, 0, 0.04);
680
+ transition: transform var(--transition-base), box-shadow var(--transition-base);
681
+ }
682
+
683
+ .step-card:hover {
684
+ transform: translateY(-4px);
685
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
686
+ }
687
+
688
+ .step-number {
689
+ font-family: var(--font-mono);
690
+ font-size: 0.7rem;
691
+ font-weight: 600;
692
+ color: var(--accent-teal);
693
+ margin-bottom: 16px;
694
+ letter-spacing: 0.05em;
695
+ display: block;
696
+ }
697
+
698
+ .step-title {
699
+ font-size: 1.3rem;
700
+ font-weight: 800;
701
+ margin-bottom: 12px;
702
+ letter-spacing: -0.01em;
703
+ color: var(--m-ink);
704
+ font-family: var(--font-sans);
705
+ }
706
+
707
+ .step-code {
708
+ display: inline-block;
709
+ margin-top: 12px;
710
+ padding: 8px 14px;
711
+ background: var(--m-ink);
712
+ color: var(--accent-green);
713
+ border-radius: var(--radius-sm);
714
+ font-family: var(--font-mono);
715
+ font-size: 0.78rem;
716
+ font-weight: 500;
717
+ }
718
+
719
+ /* ── Track Cards ───────────────────────────────────────────────── */
720
+ .m-tracks-grid {
721
+ display: grid;
722
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
723
+ gap: 20px;
724
+ margin-top: var(--space-lg);
725
+ }
726
+
727
+ .m-track-card {
728
+ padding: 28px 24px;
729
+ background: var(--bg-beige-light);
730
+ border-radius: var(--radius-lg);
731
+ border: 1px solid rgba(0, 0, 0, 0.04);
732
+ transition: all var(--transition-base);
733
+ position: relative;
734
+ overflow: hidden;
735
+ }
736
+
737
+ .m-track-card::before {
738
+ content: '';
739
+ position: absolute;
740
+ top: 0;
741
+ left: 0;
742
+ right: 0;
743
+ height: 3px;
744
+ background: var(--accent-teal);
745
+ transform: scaleX(0);
746
+ transform-origin: left;
747
+ transition: transform 0.4s ease;
748
+ }
749
+
750
+ .m-track-card:hover::before {
751
+ transform: scaleX(1);
752
+ }
753
+
754
+ .m-track-card:hover {
755
+ transform: translateY(-4px);
756
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
757
+ }
758
+
759
+ .m-track-card-icon {
760
+ width: 40px;
761
+ height: 40px;
762
+ border-radius: 10px;
763
+ background: var(--m-ink);
764
+ display: flex;
765
+ align-items: center;
766
+ justify-content: center;
767
+ color: var(--m-white);
768
+ font-family: var(--font-mono);
769
+ font-size: 0.85rem;
770
+ font-weight: 700;
771
+ margin-bottom: 16px;
772
+ }
773
+
774
+ .m-track-card-title {
775
+ font-size: 1.15rem;
776
+ font-weight: 800;
777
+ margin-bottom: 8px;
778
+ letter-spacing: -0.01em;
779
+ color: var(--m-ink);
780
+ font-family: var(--font-sans);
781
+ }
782
+
783
+ .m-track-card-desc {
784
+ font-size: 0.82rem;
785
+ color: var(--ink-muted);
786
+ line-height: 1.55;
787
+ font-family: var(--font-sans);
788
+ }
789
+
790
+ /* ── CLI Commands Reference ────────────────────────────────────── */
791
+ .commands-list {
792
+ display: flex;
793
+ flex-direction: column;
794
+ gap: 1px;
795
+ background: rgba(0, 0, 0, 0.06);
796
+ border-radius: var(--radius-md);
797
+ overflow: hidden;
798
+ margin-top: var(--space-md);
799
+ }
800
+
801
+ .command-row {
802
+ display: grid;
803
+ grid-template-columns: 220px 1fr;
804
+ gap: var(--space-md);
805
+ padding: 16px 24px;
806
+ background: var(--bg-beige-light);
807
+ transition: background var(--transition-base);
808
+ }
809
+
810
+ .command-row:hover {
811
+ background: var(--bg-beige);
812
+ }
813
+
814
+ .command-name {
815
+ font-family: var(--font-mono);
816
+ font-size: 0.82rem;
817
+ font-weight: 600;
818
+ color: var(--accent-teal);
819
+ }
820
+
821
+ .command-desc {
822
+ font-size: 0.85rem;
823
+ color: var(--ink-soft);
824
+ font-family: var(--font-sans);
825
+ }
826
+
827
+ /* ── Logged-In Dark Terminal Section (Image 1 style) ───────────── */
828
+ .logged-in-terminal-section {
829
+ background: #1a1a1a;
830
+ padding: 80px 60px 60px;
831
+ position: relative;
832
+ overflow: hidden;
833
+ min-height: 400px;
834
+ display: flex;
835
+ flex-direction: column;
836
+ justify-content: center;
837
+ }
838
+
839
+ .logged-in-terminal-section::before {
840
+ content: '';
841
+ position: absolute;
842
+ inset: 0;
843
+ background: repeating-linear-gradient(0deg,
844
+ transparent,
845
+ transparent 2px,
846
+ rgba(255, 255, 255, 0.015) 2px,
847
+ rgba(255, 255, 255, 0.015) 4px);
848
+ pointer-events: none;
849
+ }
850
+
851
+ .logged-in-quote {
852
+ font-family: var(--font-mono);
853
+ font-size: clamp(1rem, 2.5vw, 1.6rem);
854
+ font-weight: 500;
855
+ color: rgba(255, 255, 255, 0.55);
856
+ line-height: 1.8;
857
+ letter-spacing: 0.12em;
858
+ text-transform: uppercase;
859
+ max-width: 700px;
860
+ position: relative;
861
+ z-index: 1;
862
+ }
863
+
864
+ .logged-in-meta {
865
+ margin-top: 60px;
866
+ font-family: var(--font-mono);
867
+ font-size: 0.78rem;
868
+ color: rgba(255, 255, 255, 0.3);
869
+ line-height: 1.6;
870
+ position: relative;
871
+ z-index: 1;
872
+ }
873
+
874
+ .logged-in-header {
875
+ position: absolute;
876
+ top: 20px;
877
+ left: 0;
878
+ right: 0;
879
+ display: flex;
880
+ justify-content: space-between;
881
+ align-items: flex-start;
882
+ padding: 0 40px;
883
+ z-index: 2;
884
+ }
885
+
886
+ .logged-in-header-left {
887
+ display: flex;
888
+ gap: 32px;
889
+ align-items: flex-start;
890
+ }
891
+
892
+ .logged-in-header-brand {
893
+ font-family: var(--font-sans);
894
+ font-size: 0.7rem;
895
+ font-weight: 600;
896
+ color: rgba(255, 255, 255, 0.4);
897
+ letter-spacing: 0.05em;
898
+ }
899
+
900
+ .logged-in-header-copy {
901
+ font-family: var(--font-sans);
902
+ font-size: 0.65rem;
903
+ color: rgba(255, 255, 255, 0.25);
904
+ line-height: 1.4;
905
+ }
906
+
907
+ .logged-in-header-nav {
908
+ display: flex;
909
+ gap: 20px;
910
+ }
911
+
912
+ .logged-in-header-nav a {
913
+ font-family: var(--font-sans);
914
+ font-size: 0.78rem;
915
+ font-weight: 500;
916
+ color: rgba(255, 255, 255, 0.4);
917
+ text-decoration: none;
918
+ display: flex;
919
+ align-items: center;
920
+ gap: 3px;
921
+ transition: color 0.3s ease;
922
+ }
923
+
924
+ .logged-in-header-nav a:hover {
925
+ color: rgba(255, 255, 255, 0.7);
926
+ }
927
+
928
+ /* ── Footer Bottom Section (Image 2 style) ─────────────────────── */
929
+ .m-footer-showcase {
930
+ padding: 80px 60px 60px;
931
+ position: relative;
932
+ }
933
+
934
+ .m-footer-showcase-header {
935
+ display: flex;
936
+ justify-content: space-between;
937
+ align-items: flex-start;
938
+ padding: 0 0 40px;
939
+ }
940
+
941
+ .m-footer-showcase .barcode-stripes-left {
942
+ display: none;
943
+ }
944
+
945
+ .m-footer-showcase-content {
946
+ display: grid;
947
+ grid-template-columns: 1fr 1fr;
948
+ gap: 60px;
949
+ align-items: center;
950
+ position: relative;
951
+ z-index: 1;
952
+ }
953
+
954
+ .m-footer-heading {
955
+ font-family: var(--font-sans);
956
+ font-size: clamp(2.5rem, 5vw, 4rem);
957
+ font-weight: 900;
958
+ line-height: 1.1;
959
+ letter-spacing: -0.03em;
960
+ color: var(--m-ink);
961
+ }
962
+
963
+ .m-footer-heading-sub {
964
+ font-weight: 400;
965
+ color: var(--ink-muted);
966
+ display: block;
967
+ }
968
+
969
+ .m-footer-cta-area {
970
+ margin-top: 48px;
971
+ }
972
+
973
+ .m-footer-cta-icon {
974
+ width: 64px;
975
+ height: 64px;
976
+ margin-bottom: 16px;
977
+ }
978
+
979
+ .m-footer-cta-text {
980
+ font-family: var(--font-sans);
981
+ font-size: 1rem;
982
+ font-weight: 500;
983
+ color: var(--m-ink);
984
+ margin-bottom: 20px;
985
+ }
986
+
987
+ .m-footer-input-group {
988
+ display: flex;
989
+ align-items: stretch;
990
+ gap: 0;
991
+ max-width: 380px;
992
+ }
993
+
994
+ .m-footer-input {
995
+ flex: 1;
996
+ padding: 14px 20px;
997
+ border: 1px solid rgba(0, 0, 0, 0.12);
998
+ border-right: none;
999
+ border-radius: var(--radius-md) 0 0 var(--radius-md);
1000
+ background: var(--m-white);
1001
+ font-family: var(--font-mono);
1002
+ font-size: 0.85rem;
1003
+ color: var(--m-ink);
1004
+ outline: none;
1005
+ transition: border-color var(--transition-base);
1006
+ }
1007
+
1008
+ .m-footer-input:focus {
1009
+ border-color: var(--accent-teal);
1010
+ }
1011
+
1012
+ .m-footer-input::placeholder {
1013
+ color: var(--ink-faint);
1014
+ }
1015
+
1016
+ .m-footer-send-btn {
1017
+ display: flex;
1018
+ align-items: center;
1019
+ justify-content: center;
1020
+ padding: 14px 18px;
1021
+ background: var(--m-ink);
1022
+ border: 1px solid var(--m-ink);
1023
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
1024
+ color: var(--m-white);
1025
+ cursor: pointer;
1026
+ transition: all var(--transition-base);
1027
+ font-size: 1.1rem;
1028
+ }
1029
+
1030
+ .m-footer-send-btn:hover {
1031
+ background: var(--accent-teal);
1032
+ border-color: var(--accent-teal);
1033
+ }
1034
+
1035
+ /* ID Card on right */
1036
+ .m-id-card {
1037
+ display: grid;
1038
+ grid-template-columns: 1fr auto;
1039
+ gap: 0;
1040
+ max-width: 540px;
1041
+ margin-left: auto;
1042
+ border-radius: var(--radius-lg);
1043
+ overflow: hidden;
1044
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
1045
+ border: 1px solid rgba(0, 0, 0, 0.06);
1046
+ }
1047
+
1048
+ .m-id-card-image {
1049
+ background: linear-gradient(135deg, #e8e7df 0%, #d4d3cb 100%);
1050
+ min-height: 240px;
1051
+ position: relative;
1052
+ overflow: hidden;
1053
+ display: flex;
1054
+ align-items: center;
1055
+ justify-content: center;
1056
+ }
1057
+
1058
+ .m-id-card-image::after {
1059
+ content: '';
1060
+ position: absolute;
1061
+ inset: 0;
1062
+ background: none;
1063
+ }
1064
+
1065
+ .m-id-card-image-inner {
1066
+ width: 64px;
1067
+ height: 64px;
1068
+ background: var(--m-ink);
1069
+ border-radius: 50%;
1070
+ display: flex;
1071
+ align-items: center;
1072
+ justify-content: center;
1073
+ font-family: var(--font-mono);
1074
+ font-size: 1.5rem;
1075
+ font-weight: 700;
1076
+ color: var(--m-white);
1077
+ }
1078
+
1079
+ .m-id-card-info {
1080
+ background: var(--m-white);
1081
+ padding: 28px 24px;
1082
+ display: flex;
1083
+ flex-direction: column;
1084
+ justify-content: space-between;
1085
+ min-width: 200px;
1086
+ }
1087
+
1088
+ .m-id-card-name-label {
1089
+ font-size: 0.6rem;
1090
+ color: var(--ink-muted);
1091
+ text-transform: uppercase;
1092
+ letter-spacing: 0.1em;
1093
+ font-family: var(--font-sans);
1094
+ }
1095
+
1096
+ .m-id-card-name-value {
1097
+ font-size: 1.3rem;
1098
+ font-weight: 900;
1099
+ color: var(--m-ink);
1100
+ margin-top: 4px;
1101
+ line-height: 1.2;
1102
+ font-family: var(--font-sans);
1103
+ }
1104
+
1105
+ .m-id-card-barcode {
1106
+ margin-top: auto;
1107
+ padding-top: 20px;
1108
+ font-family: var(--font-mono);
1109
+ font-size: 0.6rem;
1110
+ color: var(--ink-muted);
1111
+ writing-mode: vertical-rl;
1112
+ letter-spacing: 0.1em;
1113
+ text-align: right;
1114
+ position: absolute;
1115
+ right: 12px;
1116
+ top: 50%;
1117
+ transform: translateY(-50%);
1118
+ }
1119
+
1120
+ .m-id-card-footer {
1121
+ display: flex;
1122
+ gap: 20px;
1123
+ margin-top: 16px;
1124
+ }
1125
+
1126
+ .m-id-card-footer-item {
1127
+ display: flex;
1128
+ flex-direction: column;
1129
+ }
1130
+
1131
+ .m-id-card-footer-label {
1132
+ font-size: 0.55rem;
1133
+ color: var(--ink-muted);
1134
+ text-transform: capitalize;
1135
+ font-family: var(--font-sans);
1136
+ }
1137
+
1138
+ .m-id-card-footer-value {
1139
+ font-family: var(--font-mono);
1140
+ font-size: 0.85rem;
1141
+ font-weight: 700;
1142
+ color: var(--m-ink);
1143
+ margin-top: 2px;
1144
+ }
1145
+
1146
+ /* ── Footer ────────────────────────────────────────────────────── */
1147
+ .m-site-footer {
1148
+ display: flex;
1149
+ align-items: center;
1150
+ justify-content: space-between;
1151
+ padding: 24px 40px;
1152
+ border-top: 1px solid rgba(0, 0, 0, 0.06);
1153
+ font-family: var(--font-sans);
1154
+ }
1155
+
1156
+ /* ── Scroll Animations (reveal on scroll) ──────────────────────── */
1157
+ .reveal {
1158
+ opacity: 0;
1159
+ transform: translateY(40px);
1160
+ transition: opacity 0.8s ease, transform 0.8s ease;
1161
+ }
1162
+
1163
+ .reveal.visible {
1164
+ opacity: 1;
1165
+ transform: translateY(0);
1166
+ }
1167
+
1168
+ .reveal-left {
1169
+ opacity: 0;
1170
+ transform: translateX(-40px);
1171
+ transition: opacity 0.8s ease, transform 0.8s ease;
1172
+ }
1173
+
1174
+ .reveal-left.visible {
1175
+ opacity: 1;
1176
+ transform: translateX(0);
1177
+ }
1178
+
1179
+ .reveal-right {
1180
+ opacity: 0;
1181
+ transform: translateX(40px);
1182
+ transition: opacity 0.8s ease, transform 0.8s ease;
1183
+ }
1184
+
1185
+ .reveal-right.visible {
1186
+ opacity: 1;
1187
+ transform: translateX(0);
1188
+ }
1189
+
1190
+ .reveal-scale {
1191
+ opacity: 0;
1192
+ transform: scale(0.95);
1193
+ transition: opacity 0.8s ease, transform 0.8s ease;
1194
+ }
1195
+
1196
+ .reveal-scale.visible {
1197
+ opacity: 1;
1198
+ transform: scale(1);
1199
+ }
1200
+
1201
+ /* Staggered delays */
1202
+ .delay-1 {
1203
+ transition-delay: 0.1s;
1204
+ }
1205
+
1206
+ .delay-2 {
1207
+ transition-delay: 0.2s;
1208
+ }
1209
+
1210
+ .delay-3 {
1211
+ transition-delay: 0.3s;
1212
+ }
1213
+
1214
+ .delay-4 {
1215
+ transition-delay: 0.4s;
1216
+ }
1217
+
1218
+ .delay-5 {
1219
+ transition-delay: 0.5s;
1220
+ }
1221
+
1222
+ /* ── Responsive ────────────────────────────────────────────────── */
1223
+ @media (max-width: 1024px) {
1224
+ .m-section {
1225
+ padding: var(--space-xl) 40px;
1226
+ }
1227
+
1228
+ .hero-content {
1229
+ padding: 0 40px;
1230
+ }
1231
+
1232
+ .hero-prompt-container {
1233
+ padding-right: 40px;
1234
+ }
1235
+
1236
+ .split-layout,
1237
+ .split-layout--text-left,
1238
+ .split-layout--text-right {
1239
+ grid-template-columns: 1fr;
1240
+ gap: var(--space-md);
1241
+ }
1242
+
1243
+ .steps-grid {
1244
+ grid-template-columns: repeat(2, 1fr);
1245
+ gap: var(--space-sm);
1246
+ }
1247
+
1248
+ .m-footer-showcase-content {
1249
+ grid-template-columns: 1fr;
1250
+ gap: 40px;
1251
+ }
1252
+
1253
+ .m-id-card {
1254
+ margin-left: 0;
1255
+ max-width: 440px;
1256
+ }
1257
+
1258
+ .access-card {
1259
+ max-width: 100%;
1260
+ }
1261
+
1262
+ .terminal-window {
1263
+ max-width: 100%;
1264
+ }
1265
+
1266
+ .logged-in-terminal-section {
1267
+ padding: 60px 40px 40px;
1268
+ }
1269
+
1270
+ .command-row {
1271
+ grid-template-columns: 180px 1fr;
1272
+ }
1273
+ }
1274
+
1275
+ @media (max-width: 768px) {
1276
+ .steps-grid {
1277
+ grid-template-columns: 1fr;
1278
+ gap: var(--space-sm);
1279
+ }
1280
+ }
1281
+
1282
+ @media (max-width: 640px) {
1283
+ .monitor-bezel {
1284
+ margin: 6px;
1285
+ padding: 8px;
1286
+ border-radius: 12px;
1287
+ }
1288
+
1289
+ .monitor-screen {
1290
+ border-radius: 6px;
1291
+ }
1292
+
1293
+ .m-section {
1294
+ padding: var(--space-lg) 20px;
1295
+ }
1296
+
1297
+ .m-section--hero {
1298
+ min-height: 70vh;
1299
+ }
1300
+
1301
+ .hero-content {
1302
+ padding: 0 20px;
1303
+ }
1304
+
1305
+ .hero-prompt-container {
1306
+ padding-right: 20px;
1307
+ }
1308
+
1309
+ .m-site-header {
1310
+ padding: 16px 20px;
1311
+ flex-wrap: wrap;
1312
+ gap: 12px;
1313
+ }
1314
+
1315
+ .header-nav {
1316
+ gap: 16px;
1317
+ }
1318
+
1319
+ .scanline-text {
1320
+ font-size: clamp(3rem, 18vw, 6rem);
1321
+ }
1322
+
1323
+ .mobile-break {
1324
+ display: block;
1325
+ }
1326
+
1327
+ .command-row {
1328
+ grid-template-columns: 1fr;
1329
+ gap: 6px;
1330
+ }
1331
+
1332
+ .m-footer-input-group {
1333
+ flex-direction: column;
1334
+ }
1335
+
1336
+ .m-footer-input {
1337
+ border-right: 1px solid rgba(0, 0, 0, 0.12);
1338
+ border-radius: var(--radius-md);
1339
+ }
1340
+
1341
+ .m-footer-send-btn {
1342
+ border-radius: var(--radius-md);
1343
+ }
1344
+
1345
+ .access-card {
1346
+ max-width: 100%;
1347
+ }
1348
+
1349
+ .access-card-row {
1350
+ flex-direction: column;
1351
+ gap: 16px;
1352
+ }
1353
+
1354
+ .m-site-footer {
1355
+ flex-direction: column;
1356
+ gap: 16px;
1357
+ text-align: center;
1358
+ }
1359
+
1360
+ .logged-in-terminal-section {
1361
+ padding: 50px 20px 30px;
1362
+ }
1363
+
1364
+ .logged-in-header {
1365
+ padding: 0 20px;
1366
+ flex-wrap: wrap;
1367
+ gap: 12px;
1368
+ }
1369
+
1370
+ .m-footer-showcase {
1371
+ padding: 60px 20px 40px;
1372
+ }
1373
+
1374
+ .m-id-card {
1375
+ grid-template-columns: 1fr;
1376
+ max-width: 100%;
1377
+ }
1378
+
1379
+ .m-footer-showcase-content {
1380
+ gap: 32px;
1381
+ }
1382
+
1383
+ .m-footer-heading {
1384
+ font-size: clamp(2rem, 8vw, 3rem);
1385
+ }
1386
+
1387
+ .text-section-title {
1388
+ font-size: clamp(2rem, 6vw, 3rem);
1389
+ }
1390
+
1391
+ .text-section-subtitle {
1392
+ font-size: clamp(1.5rem, 5vw, 2.2rem);
1393
+ }
1394
+
1395
+ .user-log-grid {
1396
+ grid-template-columns: 1fr 1fr;
1397
+ }
1398
+ }