@aigne/afs-ui 1.11.0-beta.12

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 (196) hide show
  1. package/LICENSE.md +26 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  4. package/dist/aup-protocol.cjs +235 -0
  5. package/dist/aup-protocol.d.cts +78 -0
  6. package/dist/aup-protocol.d.cts.map +1 -0
  7. package/dist/aup-protocol.d.mts +78 -0
  8. package/dist/aup-protocol.d.mts.map +1 -0
  9. package/dist/aup-protocol.mjs +235 -0
  10. package/dist/aup-protocol.mjs.map +1 -0
  11. package/dist/aup-registry.cjs +2489 -0
  12. package/dist/aup-registry.mjs +2487 -0
  13. package/dist/aup-registry.mjs.map +1 -0
  14. package/dist/aup-spec.cjs +1467 -0
  15. package/dist/aup-spec.mjs +1466 -0
  16. package/dist/aup-spec.mjs.map +1 -0
  17. package/dist/aup-types.cjs +165 -0
  18. package/dist/aup-types.d.cts +157 -0
  19. package/dist/aup-types.d.cts.map +1 -0
  20. package/dist/aup-types.d.mts +157 -0
  21. package/dist/aup-types.d.mts.map +1 -0
  22. package/dist/aup-types.mjs +157 -0
  23. package/dist/aup-types.mjs.map +1 -0
  24. package/dist/backend.cjs +14 -0
  25. package/dist/backend.d.cts +104 -0
  26. package/dist/backend.d.cts.map +1 -0
  27. package/dist/backend.d.mts +104 -0
  28. package/dist/backend.d.mts.map +1 -0
  29. package/dist/backend.mjs +13 -0
  30. package/dist/backend.mjs.map +1 -0
  31. package/dist/degradation.cjs +85 -0
  32. package/dist/degradation.d.cts +17 -0
  33. package/dist/degradation.d.cts.map +1 -0
  34. package/dist/degradation.d.mts +17 -0
  35. package/dist/degradation.d.mts.map +1 -0
  36. package/dist/degradation.mjs +84 -0
  37. package/dist/degradation.mjs.map +1 -0
  38. package/dist/index.cjs +36 -0
  39. package/dist/index.d.cts +12 -0
  40. package/dist/index.d.mts +12 -0
  41. package/dist/index.mjs +13 -0
  42. package/dist/runtime.cjs +117 -0
  43. package/dist/runtime.d.cts +59 -0
  44. package/dist/runtime.d.cts.map +1 -0
  45. package/dist/runtime.d.mts +59 -0
  46. package/dist/runtime.d.mts.map +1 -0
  47. package/dist/runtime.mjs +118 -0
  48. package/dist/runtime.mjs.map +1 -0
  49. package/dist/session.cjs +159 -0
  50. package/dist/session.d.cts +80 -0
  51. package/dist/session.d.cts.map +1 -0
  52. package/dist/session.d.mts +80 -0
  53. package/dist/session.d.mts.map +1 -0
  54. package/dist/session.mjs +159 -0
  55. package/dist/session.mjs.map +1 -0
  56. package/dist/snapshot.cjs +162 -0
  57. package/dist/snapshot.mjs +163 -0
  58. package/dist/snapshot.mjs.map +1 -0
  59. package/dist/term-page.cjs +264 -0
  60. package/dist/term-page.mjs +264 -0
  61. package/dist/term-page.mjs.map +1 -0
  62. package/dist/term.cjs +295 -0
  63. package/dist/term.d.cts +84 -0
  64. package/dist/term.d.cts.map +1 -0
  65. package/dist/term.d.mts +84 -0
  66. package/dist/term.d.mts.map +1 -0
  67. package/dist/term.mjs +296 -0
  68. package/dist/term.mjs.map +1 -0
  69. package/dist/tty.cjs +136 -0
  70. package/dist/tty.d.cts +53 -0
  71. package/dist/tty.d.cts.map +1 -0
  72. package/dist/tty.d.mts +53 -0
  73. package/dist/tty.d.mts.map +1 -0
  74. package/dist/tty.mjs +135 -0
  75. package/dist/tty.mjs.map +1 -0
  76. package/dist/ui-provider.cjs +4615 -0
  77. package/dist/ui-provider.d.cts +307 -0
  78. package/dist/ui-provider.d.cts.map +1 -0
  79. package/dist/ui-provider.d.mts +307 -0
  80. package/dist/ui-provider.d.mts.map +1 -0
  81. package/dist/ui-provider.mjs +4616 -0
  82. package/dist/ui-provider.mjs.map +1 -0
  83. package/dist/web-page/core.cjs +1388 -0
  84. package/dist/web-page/core.mjs +1387 -0
  85. package/dist/web-page/core.mjs.map +1 -0
  86. package/dist/web-page/css.cjs +1699 -0
  87. package/dist/web-page/css.mjs +1698 -0
  88. package/dist/web-page/css.mjs.map +1 -0
  89. package/dist/web-page/icons.cjs +248 -0
  90. package/dist/web-page/icons.mjs +248 -0
  91. package/dist/web-page/icons.mjs.map +1 -0
  92. package/dist/web-page/overlay-themes.cjs +514 -0
  93. package/dist/web-page/overlay-themes.mjs +513 -0
  94. package/dist/web-page/overlay-themes.mjs.map +1 -0
  95. package/dist/web-page/renderers/action.cjs +72 -0
  96. package/dist/web-page/renderers/action.mjs +72 -0
  97. package/dist/web-page/renderers/action.mjs.map +1 -0
  98. package/dist/web-page/renderers/broadcast.cjs +160 -0
  99. package/dist/web-page/renderers/broadcast.mjs +160 -0
  100. package/dist/web-page/renderers/broadcast.mjs.map +1 -0
  101. package/dist/web-page/renderers/calendar.cjs +137 -0
  102. package/dist/web-page/renderers/calendar.mjs +137 -0
  103. package/dist/web-page/renderers/calendar.mjs.map +1 -0
  104. package/dist/web-page/renderers/canvas.cjs +173 -0
  105. package/dist/web-page/renderers/canvas.mjs +173 -0
  106. package/dist/web-page/renderers/canvas.mjs.map +1 -0
  107. package/dist/web-page/renderers/cdn-loader.cjs +25 -0
  108. package/dist/web-page/renderers/cdn-loader.mjs +25 -0
  109. package/dist/web-page/renderers/cdn-loader.mjs.map +1 -0
  110. package/dist/web-page/renderers/chart.cjs +101 -0
  111. package/dist/web-page/renderers/chart.mjs +101 -0
  112. package/dist/web-page/renderers/chart.mjs.map +1 -0
  113. package/dist/web-page/renderers/deck.cjs +390 -0
  114. package/dist/web-page/renderers/deck.mjs +390 -0
  115. package/dist/web-page/renderers/deck.mjs.map +1 -0
  116. package/dist/web-page/renderers/device.cjs +1015 -0
  117. package/dist/web-page/renderers/device.mjs +1015 -0
  118. package/dist/web-page/renderers/device.mjs.map +1 -0
  119. package/dist/web-page/renderers/editor.cjs +127 -0
  120. package/dist/web-page/renderers/editor.mjs +127 -0
  121. package/dist/web-page/renderers/editor.mjs.map +1 -0
  122. package/dist/web-page/renderers/finance-chart.cjs +178 -0
  123. package/dist/web-page/renderers/finance-chart.mjs +178 -0
  124. package/dist/web-page/renderers/finance-chart.mjs.map +1 -0
  125. package/dist/web-page/renderers/frame.cjs +274 -0
  126. package/dist/web-page/renderers/frame.mjs +274 -0
  127. package/dist/web-page/renderers/frame.mjs.map +1 -0
  128. package/dist/web-page/renderers/globe.cjs +119 -0
  129. package/dist/web-page/renderers/globe.mjs +119 -0
  130. package/dist/web-page/renderers/globe.mjs.map +1 -0
  131. package/dist/web-page/renderers/input.cjs +137 -0
  132. package/dist/web-page/renderers/input.mjs +137 -0
  133. package/dist/web-page/renderers/input.mjs.map +1 -0
  134. package/dist/web-page/renderers/list.cjs +1243 -0
  135. package/dist/web-page/renderers/list.mjs +1243 -0
  136. package/dist/web-page/renderers/list.mjs.map +1 -0
  137. package/dist/web-page/renderers/map.cjs +126 -0
  138. package/dist/web-page/renderers/map.mjs +126 -0
  139. package/dist/web-page/renderers/map.mjs.map +1 -0
  140. package/dist/web-page/renderers/media.cjs +106 -0
  141. package/dist/web-page/renderers/media.mjs +106 -0
  142. package/dist/web-page/renderers/media.mjs.map +1 -0
  143. package/dist/web-page/renderers/moonphase.cjs +105 -0
  144. package/dist/web-page/renderers/moonphase.mjs +105 -0
  145. package/dist/web-page/renderers/moonphase.mjs.map +1 -0
  146. package/dist/web-page/renderers/natal-chart.cjs +222 -0
  147. package/dist/web-page/renderers/natal-chart.mjs +222 -0
  148. package/dist/web-page/renderers/natal-chart.mjs.map +1 -0
  149. package/dist/web-page/renderers/overlay.cjs +531 -0
  150. package/dist/web-page/renderers/overlay.mjs +531 -0
  151. package/dist/web-page/renderers/overlay.mjs.map +1 -0
  152. package/dist/web-page/renderers/table.cjs +74 -0
  153. package/dist/web-page/renderers/table.mjs +74 -0
  154. package/dist/web-page/renderers/table.mjs.map +1 -0
  155. package/dist/web-page/renderers/terminal.cjs +30 -0
  156. package/dist/web-page/renderers/terminal.mjs +30 -0
  157. package/dist/web-page/renderers/terminal.mjs.map +1 -0
  158. package/dist/web-page/renderers/text.cjs +109 -0
  159. package/dist/web-page/renderers/text.mjs +109 -0
  160. package/dist/web-page/renderers/text.mjs.map +1 -0
  161. package/dist/web-page/renderers/ticker.cjs +133 -0
  162. package/dist/web-page/renderers/ticker.mjs +133 -0
  163. package/dist/web-page/renderers/ticker.mjs.map +1 -0
  164. package/dist/web-page/renderers/time.cjs +69 -0
  165. package/dist/web-page/renderers/time.mjs +69 -0
  166. package/dist/web-page/renderers/time.mjs.map +1 -0
  167. package/dist/web-page/renderers/unknown.cjs +20 -0
  168. package/dist/web-page/renderers/unknown.mjs +20 -0
  169. package/dist/web-page/renderers/unknown.mjs.map +1 -0
  170. package/dist/web-page/renderers/view.cjs +161 -0
  171. package/dist/web-page/renderers/view.mjs +161 -0
  172. package/dist/web-page/renderers/view.mjs.map +1 -0
  173. package/dist/web-page/renderers/wm.cjs +669 -0
  174. package/dist/web-page/renderers/wm.mjs +669 -0
  175. package/dist/web-page/renderers/wm.mjs.map +1 -0
  176. package/dist/web-page/skeleton.cjs +103 -0
  177. package/dist/web-page/skeleton.mjs +103 -0
  178. package/dist/web-page/skeleton.mjs.map +1 -0
  179. package/dist/web-page.cjs +114 -0
  180. package/dist/web-page.d.cts +19 -0
  181. package/dist/web-page.d.cts.map +1 -0
  182. package/dist/web-page.d.mts +19 -0
  183. package/dist/web-page.d.mts.map +1 -0
  184. package/dist/web-page.mjs +115 -0
  185. package/dist/web-page.mjs.map +1 -0
  186. package/dist/web.cjs +827 -0
  187. package/dist/web.d.cts +144 -0
  188. package/dist/web.d.cts.map +1 -0
  189. package/dist/web.d.mts +144 -0
  190. package/dist/web.d.mts.map +1 -0
  191. package/dist/web.mjs +828 -0
  192. package/dist/web.mjs.map +1 -0
  193. package/dist/wm-state.cjs +172 -0
  194. package/dist/wm-state.mjs +171 -0
  195. package/dist/wm-state.mjs.map +1 -0
  196. package/package.json +59 -0
@@ -0,0 +1,1699 @@
1
+
2
+ //#region src/web-page/css.ts
3
+ /**
4
+ * AUP CSS — Design Invariants
5
+ *
6
+ * 1. EXPLICIT WINS: Global layout defaults MUST NOT override elements with
7
+ * explicit sizing attributes (data-width, data-height, inline flex).
8
+ * Pattern: use :not([data-width]) to exclude explicitly sized elements.
9
+ *
10
+ * 2. LAYOUT vs SIZING are orthogonal:
11
+ * - layout (row/column/grid) controls spatial arrangement
12
+ * - size props (width/flex/maxWidth) control element dimensions
13
+ * When both are present, size props win.
14
+ *
15
+ * 3. FULL-PAGE mode: Root view becomes full-width (max-width:none).
16
+ * Children get max-width:1200px + margin:auto for centering.
17
+ * Panel-mode children get calculated padding for alignment.
18
+ */
19
+ const CSS = `
20
+ /* ── Reset ── */
21
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
22
+
23
+ /* ══════════════════════════════════════════════════
24
+ Design Token System — Style Manager
25
+ Two axes: style (structure) + mode (light/dark)
26
+ JS sets data-theme + data-mode on <html>
27
+ ══════════════════════════════════════════════════ */
28
+
29
+ /* ── Shared layout tokens ── */
30
+ :root {
31
+ --msg-gap: 0.8rem;
32
+ --msg-padding: 0.7rem 1rem;
33
+ --msg-max-width: 75%;
34
+ --input-padding: 0.8rem 1.5rem;
35
+ }
36
+
37
+ /* ═══ Style: Midnight ═══ terminal/hacker ═══ */
38
+ :root, [data-theme="midnight"] {
39
+ --font: "Manrope", -apple-system, "Segoe UI", sans-serif;
40
+ --font-heading: "Playfair Display", Georgia, serif;
41
+ --font-display: "Playfair Display", Georgia, serif;
42
+ --heading-weight: 700;
43
+ --heading-spacing: -0.02em;
44
+ --heading-transform: none;
45
+ --msg-font-size: 0.85rem;
46
+ --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
47
+ --card-shadow: 0 1px 4px rgba(0,0,0,0.3), 0 1px 2px rgba(0,0,0,0.2), 0 0 0 1px rgba(230,180,80,0.03);
48
+ --card-shadow-hover: 0 12px 28px rgba(0,0,0,0.45), 0 4px 10px rgba(0,0,0,0.3), 0 0 20px rgba(230,180,80,0.06);
49
+ --card-border: 1px solid var(--border);
50
+ --card-bg: var(--surface);
51
+ --card-backdrop: none;
52
+ --transition: 0.15s;
53
+ --glow: none;
54
+ --atmosphere: radial-gradient(ellipse 80% 50% at 50% 0%, rgba(230,180,80,0.08) 0%, transparent 70%), radial-gradient(ellipse 40% 40% at 80% 20%, rgba(89,194,255,0.04) 0%, transparent 50%);
55
+ --accent-secondary: #59c2ff;
56
+ --heading-gradient: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
57
+ /* dark (default) */
58
+ --bg: #0a0e14; --surface: #131820; --border: #1d2433;
59
+ --text: #b3b1ad; --dim: #626a73;
60
+ --accent: #e6b450; --accent-bg: #2a2000;
61
+ --assistant-color: #59c2ff; --assistant-bg: #0d1a2d;
62
+ --success: #91b362; --error: #f07178;
63
+ }
64
+ [data-theme="midnight"][data-mode="light"] {
65
+ --bg: #f5f3ef; --surface: #fefdfb; --border: #e0dcd4;
66
+ --text: #2c2418; --dim: #8a7e6e;
67
+ --accent: #b8860b; --accent-bg: #fef7e5;
68
+ --assistant-color: #1a6dbd; --assistant-bg: #eaf2fc;
69
+ --success: #4d8a30; --error: #c53030;
70
+ --card-shadow: 0 1px 4px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
71
+ --card-shadow-hover: 0 12px 28px rgba(0,0,0,0.12), 0 4px 10px rgba(0,0,0,0.06);
72
+ --atmosphere: radial-gradient(ellipse 80% 50% at 50% 0%, rgba(184,134,11,0.06) 0%, transparent 70%);
73
+ }
74
+
75
+ /* ═══ Style: Clean ═══ modern corporate ═══ */
76
+ [data-theme="clean"] {
77
+ --font: "DM Sans", -apple-system, "Segoe UI", sans-serif;
78
+ --font-heading: "Plus Jakarta Sans", -apple-system, sans-serif;
79
+ --font-display: "Plus Jakarta Sans", -apple-system, sans-serif;
80
+ --heading-weight: 800;
81
+ --heading-spacing: -0.025em;
82
+ --heading-transform: none;
83
+ --msg-font-size: 0.9rem;
84
+ --radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px;
85
+ --card-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 2px rgba(0,0,0,0.15);
86
+ --card-shadow-hover: 0 16px 32px rgba(0,0,0,0.25), 0 6px 12px rgba(0,0,0,0.15);
87
+ --card-border: 1px solid var(--border);
88
+ --card-bg: var(--surface);
89
+ --card-backdrop: none;
90
+ --transition: 0.2s;
91
+ --glow: none;
92
+ --atmosphere: radial-gradient(ellipse 60% 40% at 30% 0%, rgba(96,165,250,0.08) 0%, transparent 60%), radial-gradient(ellipse 30% 30% at 70% 80%, rgba(74,222,128,0.04) 0%, transparent 40%);
93
+ --accent-secondary: #4ade80;
94
+ --heading-gradient: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
95
+ /* dark */
96
+ --bg: #1a1d24; --surface: #242830; --border: #353942;
97
+ --text: #e2e4e9; --dim: #8890a0;
98
+ --accent: #60a5fa; --accent-bg: #1a2e4a;
99
+ --assistant-color: #93bbfc; --assistant-bg: #1a2540;
100
+ --success: #4ade80; --error: #f87171;
101
+ }
102
+ [data-theme="clean"][data-mode="light"] {
103
+ --bg: #f0f2f5; --surface: #ffffff; --border: #e0e4ea;
104
+ --text: #1a1d23; --dim: #6b7280;
105
+ --accent: #2563eb; --accent-bg: #eff6ff;
106
+ --assistant-color: #1d4ed8; --assistant-bg: #e7f0fd;
107
+ --success: #16a34a; --error: #dc2626;
108
+ --card-shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.05);
109
+ --card-shadow-hover: 0 16px 32px rgba(0,0,0,0.12), 0 6px 12px rgba(0,0,0,0.06);
110
+ --atmosphere: linear-gradient(180deg, rgba(37,99,235,0.04) 0%, transparent 40%), radial-gradient(ellipse 40% 30% at 80% 80%, rgba(22,163,74,0.03) 0%, transparent 40%);
111
+ }
112
+
113
+ /* ═══ Style: Glass ═══ glassmorphism, frosted ═══ */
114
+ [data-theme="glass"] {
115
+ --font: "Sora", -apple-system, "Segoe UI", sans-serif;
116
+ --font-heading: "Fraunces", Georgia, serif;
117
+ --font-display: "Fraunces", Georgia, serif;
118
+ --heading-weight: 700;
119
+ --heading-spacing: -0.01em;
120
+ --heading-transform: none;
121
+ --msg-font-size: 0.88rem;
122
+ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px;
123
+ --card-backdrop: blur(20px) saturate(1.5);
124
+ --transition: 0.3s;
125
+ --glow: none;
126
+ --atmosphere: radial-gradient(ellipse 50% 60% at 20% 0%, rgba(167,139,250,0.12) 0%, transparent 50%), radial-gradient(ellipse 40% 40% at 80% 20%, rgba(244,114,182,0.08) 0%, transparent 50%), radial-gradient(ellipse 30% 30% at 50% 60%, rgba(52,211,153,0.05) 0%, transparent 40%);
127
+ --accent-secondary: #f472b6;
128
+ --heading-gradient: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
129
+ /* dark */
130
+ --bg: #0f0720; --surface: rgba(255,255,255,0.08); --border: rgba(255,255,255,0.1);
131
+ --text: #e0dce8; --dim: #8a80a0;
132
+ --accent: #a78bfa; --accent-bg: rgba(167,139,250,0.12);
133
+ --assistant-color: #c4b5fd; --assistant-bg: rgba(167,139,250,0.08);
134
+ --success: #34d399; --error: #fb7185;
135
+ --card-shadow: 0 8px 32px rgba(0,0,0,0.2);
136
+ --card-shadow-hover: 0 16px 48px rgba(0,0,0,0.35), 0 0 20px rgba(167,139,250,0.1);
137
+ --card-border: 1px solid rgba(255,255,255,0.12);
138
+ --card-bg: rgba(255,255,255,0.06);
139
+ }
140
+ [data-theme="glass"][data-mode="light"] {
141
+ --bg: #ece4f5; --surface: rgba(255,255,255,0.65); --border: rgba(120,60,200,0.12);
142
+ --text: #2a1a45; --dim: #7a6a95;
143
+ --accent: #7c3aed; --accent-bg: rgba(124,58,237,0.08);
144
+ --assistant-color: #6d28d9; --assistant-bg: rgba(124,58,237,0.06);
145
+ --success: #059669; --error: #e11d48;
146
+ --card-shadow: 0 8px 32px rgba(100,50,180,0.1);
147
+ --card-shadow-hover: 0 16px 48px rgba(100,50,180,0.15), 0 0 16px rgba(124,58,237,0.06);
148
+ --card-border: 1px solid rgba(120,60,200,0.1);
149
+ --card-bg: rgba(255,255,255,0.5);
150
+ --atmosphere: radial-gradient(ellipse 50% 60% at 20% 0%, rgba(124,58,237,0.06) 0%, transparent 50%), radial-gradient(ellipse 40% 40% at 80% 20%, rgba(219,39,119,0.04) 0%, transparent 50%);
151
+ }
152
+
153
+ /* ═══ Style: Brutalist ═══ raw anti-design ═══ */
154
+ [data-theme="brutalist"] {
155
+ --font: "Courier New", "Courier", monospace;
156
+ --font-heading: Georgia, "Times New Roman", serif;
157
+ --heading-weight: 900;
158
+ --heading-spacing: 0.02em;
159
+ --heading-transform: uppercase;
160
+ --msg-font-size: 0.9rem;
161
+ --radius-sm: 0; --radius-md: 0; --radius-lg: 0;
162
+ --card-shadow: 4px 4px 0 var(--text);
163
+ --card-shadow-hover: 6px 6px 0 var(--text);
164
+ --card-border: 3px solid var(--text);
165
+ --card-bg: var(--surface);
166
+ --card-backdrop: none;
167
+ --transition: 0s;
168
+ --glow: none;
169
+ --atmosphere: none;
170
+ --accent-secondary: #ff6600;
171
+ --heading-gradient: none;
172
+ /* light (natural) */
173
+ --bg: #fffff0; --surface: #ffffff; --border: #000000;
174
+ --text: #000000; --dim: #555555;
175
+ --accent: #ff0000; --accent-bg: #ffff00;
176
+ --assistant-color: #0000ff; --assistant-bg: #e0e0ff;
177
+ --success: #008000; --error: #ff0000;
178
+ }
179
+ [data-theme="brutalist"][data-mode="dark"] {
180
+ --bg: #111111; --surface: #1a1a1a; --border: #ffffff;
181
+ --text: #ffffff; --dim: #999999;
182
+ --accent: #ff3333; --accent-bg: #331111;
183
+ --assistant-color: #6666ff; --assistant-bg: #1a1a33;
184
+ --success: #33cc33; --error: #ff3333;
185
+ }
186
+
187
+ /* ═══ Style: Soft ═══ neumorphism, embossed ═══ */
188
+ [data-theme="soft"] {
189
+ --font: "Outfit", -apple-system, "Segoe UI", sans-serif;
190
+ --font-heading: "Crimson Pro", Georgia, serif;
191
+ --font-display: "Crimson Pro", Georgia, serif;
192
+ --heading-weight: 700;
193
+ --heading-spacing: -0.01em;
194
+ --heading-transform: none;
195
+ --msg-font-size: 0.9rem;
196
+ --radius-sm: 12px; --radius-md: 16px; --radius-lg: 20px;
197
+ --card-border: none;
198
+ --card-bg: var(--surface);
199
+ --card-backdrop: none;
200
+ --transition: 0.25s;
201
+ --glow: none;
202
+ --atmosphere: radial-gradient(ellipse 70% 50% at 50% -10%, rgba(99,102,241,0.04) 0%, transparent 60%);
203
+ --accent-secondary: #818cf8;
204
+ --heading-gradient: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
205
+ /* light (natural) */
206
+ --bg: #e8e8e8; --surface: #e8e8e8; --border: #d0d0d0;
207
+ --text: #444444; --dim: #888888;
208
+ --accent: #6366f1; --accent-bg: #e0e0f8;
209
+ --assistant-color: #4f46e5; --assistant-bg: #ebebf8;
210
+ --success: #059669; --error: #e11d48;
211
+ --card-shadow: 6px 6px 14px #c5c5c5, -6px -6px 14px #ffffff;
212
+ --card-shadow-hover: 8px 8px 18px #b8b8b8, -8px -8px 18px #ffffff;
213
+ }
214
+ [data-theme="soft"][data-mode="dark"] {
215
+ --bg: #2c2c34; --surface: #2c2c34; --border: #3a3a44;
216
+ --text: #d0d0d8; --dim: #7a7a88;
217
+ --accent: #818cf8; --accent-bg: #2a2a48;
218
+ --assistant-color: #a5b4fc; --assistant-bg: #2a2a40;
219
+ --success: #34d399; --error: #fb7185;
220
+ --card-shadow: 6px 6px 14px #1c1c24, -6px -6px 14px #3c3c44;
221
+ --card-shadow-hover: 8px 8px 18px #161620, -8px -8px 18px #424250;
222
+ --atmosphere: radial-gradient(ellipse 70% 50% at 50% -10%, rgba(99,102,241,0.06) 0%, transparent 60%);
223
+ }
224
+
225
+ /* ═══ Style: Cyber ═══ neon retro-futurism ═══ */
226
+ [data-theme="cyber"] {
227
+ --font: "Share Tech Mono", "Fira Code", monospace;
228
+ --font-heading: var(--font);
229
+ --heading-weight: 400;
230
+ --heading-spacing: 0.08em;
231
+ --heading-transform: uppercase;
232
+ --msg-font-size: 0.85rem;
233
+ --radius-sm: 2px; --radius-md: 3px; --radius-lg: 4px;
234
+ --card-backdrop: none;
235
+ --transition: 0.15s;
236
+ --glow: 0 0 8px var(--accent), 0 0 20px rgba(0,255,255,0.1);
237
+ --atmosphere: radial-gradient(ellipse 40% 30% at 50% 0%, rgba(0,255,255,0.06) 0%, transparent 50%), radial-gradient(ellipse 30% 30% at 80% 70%, rgba(255,0,255,0.04) 0%, transparent 50%);
238
+ --accent-secondary: #ff00ff;
239
+ --heading-gradient: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
240
+ /* dark (default) */
241
+ --bg: #030810; --surface: #06101c; --border: rgba(0,255,255,0.2);
242
+ --text: #b0e0e6; --dim: #3a6a70;
243
+ --accent: #00ffff; --accent-bg: #001a1a;
244
+ --assistant-color: #ff00ff; --assistant-bg: #1a001a;
245
+ --success: #00ff41; --error: #ff2040;
246
+ --card-shadow: 0 0 12px rgba(0,255,255,0.15), inset 0 0 12px rgba(0,255,255,0.03);
247
+ --card-shadow-hover: 0 0 24px rgba(0,255,255,0.25), 0 0 48px rgba(0,255,255,0.08), inset 0 0 16px rgba(0,255,255,0.05);
248
+ --card-border: 1px solid rgba(0,255,255,0.3);
249
+ --card-bg: rgba(0,10,20,0.8);
250
+ }
251
+ [data-theme="cyber"][data-mode="light"] {
252
+ --bg: #f0fafa; --surface: #ffffff; --border: rgba(0,160,160,0.25);
253
+ --text: #0a2828; --dim: #4a7070;
254
+ --accent: #0891b2; --accent-bg: #ecfeff;
255
+ --assistant-color: #a21caf; --assistant-bg: #fdf4ff;
256
+ --success: #059669; --error: #e11d48;
257
+ --card-shadow: 0 0 12px rgba(0,180,180,0.1), inset 0 0 8px rgba(0,180,180,0.02);
258
+ --card-shadow-hover: 0 0 20px rgba(0,180,180,0.15), 0 0 40px rgba(0,180,180,0.06), inset 0 0 12px rgba(0,180,180,0.03);
259
+ --card-border: 1px solid rgba(0,160,160,0.2);
260
+ --card-bg: rgba(240,250,250,0.8);
261
+ --glow: 0 0 6px rgba(8,145,178,0.3);
262
+ --atmosphere: radial-gradient(ellipse 40% 30% at 50% 0%, rgba(8,145,178,0.05) 0%, transparent 50%);
263
+ }
264
+
265
+ /* ═══ Style: Editorial ═══ luxury tech magazine ═══ */
266
+ [data-theme="editorial"] {
267
+ --font: "Sora", "Noto Sans SC", -apple-system, sans-serif;
268
+ --font-heading: "DM Serif Display", Georgia, serif;
269
+ --font-display: "DM Serif Display", Georgia, serif;
270
+ --heading-weight: 400;
271
+ --heading-spacing: -0.02em;
272
+ --heading-transform: none;
273
+ --msg-font-size: 0.88rem;
274
+ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 2rem;
275
+ --card-shadow: 0 2px 8px rgba(0,0,0,0.2);
276
+ --card-shadow-hover: 0 16px 40px rgba(0,0,0,0.35), 0 0 20px rgba(196,240,77,0.08);
277
+ --card-border: 1px solid var(--border);
278
+ --card-bg: var(--surface);
279
+ --card-backdrop: blur(20px);
280
+ --transition: 0.3s;
281
+ --glow: none;
282
+ --atmosphere: radial-gradient(ellipse 60% 50% at 50% 0%, rgba(196,240,77,0.08) 0%, transparent 60%), radial-gradient(ellipse 40% 40% at 80% 30%, rgba(196,240,77,0.04) 0%, transparent 50%);
283
+ --accent-secondary: #e879f9;
284
+ --heading-gradient: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
285
+ /* dark (default) */
286
+ --bg: #0a0a0f; --surface: #1a1a25; --border: rgba(255,255,255,0.06);
287
+ --text: #e8e6f0; --dim: #8b89a0;
288
+ --accent: #c4f04d; --accent-bg: rgba(196,240,77,0.12);
289
+ --assistant-color: #c4f04d; --assistant-bg: rgba(196,240,77,0.08);
290
+ --success: #91b362; --error: #f07178;
291
+ }
292
+ [data-theme="editorial"][data-mode="light"] {
293
+ --bg: #fafaf8; --surface: #ffffff; --border: rgba(0,0,0,0.08);
294
+ --text: #1a1a1f; --dim: #6b6b78;
295
+ --accent: #2a6e00; --accent-bg: rgba(42,110,0,0.08);
296
+ --assistant-color: #2a6e00; --assistant-bg: rgba(42,110,0,0.06);
297
+ --success: #2a6e00; --error: #c53030;
298
+ --card-shadow: 0 2px 8px rgba(0,0,0,0.06);
299
+ --card-shadow-hover: 0 12px 32px rgba(0,0,0,0.1), 0 0 12px rgba(42,110,0,0.04);
300
+ --atmosphere: radial-gradient(ellipse 60% 50% at 50% 0%, rgba(42,110,0,0.03) 0%, transparent 60%);
301
+ }
302
+
303
+ /* ═══ Style: Brutalist Mono ═══ terminal-inspired raw ═══ */
304
+ [data-theme="brutalist-mono"] {
305
+ --font: "Space Mono", "Noto Sans SC", monospace;
306
+ --font-heading: "Instrument Serif", Georgia, serif;
307
+ --heading-weight: 400;
308
+ --heading-spacing: -0.03em;
309
+ --heading-transform: none;
310
+ --msg-font-size: 0.85rem;
311
+ --radius-sm: 0; --radius-md: 0; --radius-lg: 0;
312
+ --card-shadow: none;
313
+ --card-shadow-hover: none;
314
+ --card-border: 1px solid var(--border);
315
+ --card-bg: var(--surface);
316
+ --card-backdrop: none;
317
+ --transition: 0s;
318
+ --glow: none;
319
+ --atmosphere: none;
320
+ --accent-secondary: #88ff00;
321
+ --heading-gradient: none;
322
+ /* dark (default) */
323
+ --bg: #000000; --surface: #111111; --border: #222222;
324
+ --text: #ffffff; --dim: #888888;
325
+ --accent: #00ff88; --accent-bg: rgba(0,255,136,0.08);
326
+ --assistant-color: #00ff88; --assistant-bg: rgba(0,255,136,0.06);
327
+ --success: #00ff88; --error: #ff3344;
328
+ }
329
+ [data-theme="brutalist-mono"][data-mode="light"] {
330
+ --bg: #f0ede6; --surface: #ffffff; --border: #dddddd;
331
+ --text: #000000; --dim: #666666;
332
+ --accent: #006633; --accent-bg: rgba(0,102,51,0.06);
333
+ --assistant-color: #006633; --assistant-bg: rgba(0,102,51,0.05);
334
+ --success: #006633; --error: #cc0022;
335
+ --card-shadow: none;
336
+ --card-shadow-hover: none;
337
+ }
338
+
339
+ /* ── Layout ── */
340
+ html, body { height: 100%; }
341
+ body { font-family: var(--font); background: var(--bg); color: var(--text); display: flex; flex-direction: column; transition: background var(--transition), color var(--transition); position: relative; }
342
+ body::before { content: ""; position: fixed; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: -1; opacity: 0.7; background: var(--atmosphere, none); }
343
+ body::after { content: ""; position: fixed; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: -1; opacity: 0.015; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); background-repeat: repeat; background-size: 256px 256px; mix-blend-mode: overlay; }
344
+ [data-theme="brutalist"] body::after, [data-theme="brutalist-mono"] body::after { opacity: 0; }
345
+
346
+ /* Background grid texture — subtle structural depth for dark themes */
347
+ html:not([data-mode="light"]):not([data-theme="brutalist"]):not([data-theme="brutalist-mono"]) body { background-color: var(--bg); background-image: linear-gradient(rgba(255,255,255,0.018) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.018) 1px, transparent 1px); background-size: auto, 60px 60px, 60px 60px; }
348
+
349
+ /* Editorial: light body weight, generous line-height, pill buttons */
350
+ [data-theme="editorial"] body { font-weight: 300; line-height: 1.7; }
351
+ [data-theme="editorial"] .aup-action { border-radius: 2rem; }
352
+ [data-theme="editorial"] .aup-text[data-scale="code"] { font-family: "Courier New", monospace; }
353
+
354
+ /* Brutalist Mono: crosshair cursor, accent-border code, uppercase labels */
355
+ [data-theme="brutalist-mono"] body { cursor: crosshair; line-height: 1.6; }
356
+ [data-theme="brutalist-mono"] .aup-action { cursor: crosshair; }
357
+ [data-theme="brutalist-mono"] .aup-text[data-scale="code"] { border-left: 3px solid var(--accent); border-radius: 0; font-family: "Space Mono", monospace; }
358
+ [data-theme="brutalist-mono"] .aup-text[data-mode="badge"] { font-size: 0.65rem; letter-spacing: 0.2em; text-transform: uppercase; border-radius: 0; }
359
+ [data-theme="brutalist-mono"] .aup-text[data-intent="danger"] { border-left: 3px solid var(--error); background: color-mix(in srgb, var(--error) 8%, var(--bg)); }
360
+
361
+ header { padding: 0.6rem 1.5rem; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 0.8rem; background: var(--surface); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); position: sticky; top: 0; z-index: 10; }
362
+ header h1 { font-family: var(--font-heading); font-size: 1rem; font-weight: 700; color: var(--accent); letter-spacing: var(--heading-spacing); }
363
+ header .status { font-size: 0.75rem; color: var(--dim); }
364
+ header .dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
365
+ header .dot.on { background: var(--success); box-shadow: 0 0 6px var(--success); }
366
+ header .dot.off { background: var(--error); }
367
+
368
+ #messages { flex: 1; overflow-y: auto; padding: 1rem 1.5rem; display: flex; flex-direction: column; gap: var(--msg-gap); }
369
+
370
+ /* ── Message bubbles ── */
371
+ .msg { max-width: var(--msg-max-width); padding: var(--msg-padding); border-radius: var(--radius-lg); font-size: var(--msg-font-size); line-height: 1.6; word-wrap: break-word; overflow-wrap: break-word; position: relative; transition: background var(--transition), color var(--transition); }
372
+ .msg.user { align-self: flex-end; background: var(--accent-bg); color: var(--accent); border-bottom-right-radius: var(--radius-sm); white-space: pre-wrap; }
373
+ .msg.assistant { align-self: flex-start; background: var(--assistant-bg); color: var(--assistant-color); border-bottom-left-radius: var(--radius-sm); }
374
+ .msg.system { align-self: center; color: var(--dim); font-size: 0.78rem; }
375
+ .msg.error { align-self: center; background: #2a0000; color: var(--error); font-size: 0.78rem; white-space: pre-wrap; }
376
+ .msg.notify { align-self: flex-start; background: #0d2a0d; color: var(--success); font-size: 0.82rem; white-space: pre-wrap; border-radius: var(--radius-md); }
377
+
378
+ /* ── Copy button ── */
379
+ .msg .copy-btn { position: absolute; top: 6px; right: 6px; background: var(--surface); border: 1px solid var(--border); color: var(--dim); width: 26px; height: 26px; border-radius: var(--radius-sm); cursor: pointer; display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity var(--transition); font-size: 14px; line-height: 1; padding: 0; }
380
+ .msg:hover .copy-btn { opacity: 1; }
381
+ .msg .copy-btn:hover { border-color: var(--accent); color: var(--accent); }
382
+ .msg .copy-btn.copied { border-color: var(--success); color: var(--success); }
383
+
384
+ /* ── Markdown inside assistant bubbles ── */
385
+ .msg.assistant p { margin: 0.4em 0; }
386
+ .msg.assistant p:first-child { margin-top: 0; }
387
+ .msg.assistant p:last-child { margin-bottom: 0; }
388
+ .msg.assistant h1, .msg.assistant h2, .msg.assistant h3,
389
+ .msg.assistant h4, .msg.assistant h5, .msg.assistant h6 { color: var(--text); margin: 0.8em 0 0.3em; font-size: 0.95em; }
390
+ .msg.assistant h1 { font-size: 1.1em; }
391
+ .msg.assistant h2 { font-size: 1.0em; }
392
+ .msg.assistant strong { color: var(--text); }
393
+ .msg.assistant em { color: var(--dim); }
394
+ .msg.assistant a { color: var(--accent); text-decoration: underline; }
395
+ .msg.assistant code { background: var(--bg); color: var(--accent); padding: 1px 5px; border-radius: var(--radius-sm); font-family: "JetBrains Mono", "Fira Code", monospace; font-size: 0.82em; }
396
+ .msg.assistant pre { background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 0.7em 0.9em; margin: 0.5em 0; overflow-x: auto; font-size: 0.82em; line-height: 1.5; }
397
+ .msg.assistant pre code { background: none; padding: 0; color: var(--text); font-size: inherit; }
398
+ .msg.assistant pre code.hljs { background: transparent; padding: 0; }
399
+ .msg.assistant ul, .msg.assistant ol { margin: 0.4em 0; padding-left: 1.5em; }
400
+ .msg.assistant li { margin: 0.2em 0; }
401
+ .msg.assistant blockquote { border-left: 3px solid var(--border); padding-left: 0.8em; color: var(--dim); margin: 0.5em 0; }
402
+ .msg.assistant table { border-collapse: collapse; margin: 0.5em 0; font-size: 0.82em; width: 100%; }
403
+ .msg.assistant th, .msg.assistant td { border: 1px solid var(--border); padding: 0.3em 0.6em; text-align: left; }
404
+ .msg.assistant th { background: var(--surface); color: var(--text); }
405
+ .msg.assistant hr { border: none; border-top: 1px solid var(--border); margin: 0.6em 0; }
406
+ .msg.assistant img { max-width: 100%; border-radius: var(--radius-sm); }
407
+
408
+ /* ── Component: table ── */
409
+ .component-table { width: 100%; border-collapse: separate; border-spacing: 0; margin: 0.3em 0; border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
410
+ .component-table th, .component-table td { padding: 8px 12px; text-align: left; border-bottom: 1px solid var(--border); }
411
+ .component-table th { background: var(--surface); color: var(--text); border-bottom: 2px solid var(--border); }
412
+ .component-table tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--surface) 50%, transparent); }
413
+ .component-table tbody tr:hover td { background: var(--accent-bg); }
414
+ .component-table tbody tr:last-child td { border-bottom: none; }
415
+ .component-image { max-width: 100%; border-radius: var(--radius-md); }
416
+
417
+ /* ── Prompt area ── */
418
+ #prompt-area { display: none; padding: 12px 1.5rem; background: var(--surface); border-top: 1px solid var(--border); }
419
+ #prompt-area .prompt-msg { margin-bottom: 8px; font-weight: bold; color: var(--accent); }
420
+ #prompt-area .prompt-options { display: flex; flex-direction: column; gap: 4px; }
421
+ #prompt-area .prompt-options button { background: var(--bg); color: var(--text); border: 1px solid var(--border); padding: 6px 12px; border-radius: var(--radius-md); cursor: pointer; text-align: left; font-family: var(--font); font-size: var(--msg-font-size); transition: all var(--transition); }
422
+ #prompt-area .prompt-options button:hover { background: var(--accent-bg); border-color: var(--accent); color: var(--accent); }
423
+
424
+ /* ── Input bar ── */
425
+ #input-bar { padding: var(--input-padding); border-top: 1px solid var(--border); display: flex; gap: 0.5rem; }
426
+ #input-bar textarea { flex: 1; background: var(--surface); border: 1px solid var(--border); color: var(--text); padding: 0.6rem 0.8rem; border-radius: var(--radius-md); font-family: var(--font); font-size: var(--msg-font-size); resize: none; outline: none; min-height: 40px; max-height: 120px; transition: border-color var(--transition); }
427
+ #input-bar textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent); }
428
+ #input-bar button { background: var(--accent); border: 1px solid var(--accent); color: var(--bg); padding: 0 1.2rem; border-radius: var(--radius-md); font-family: var(--font); font-size: var(--msg-font-size); font-weight: 600; cursor: pointer; transition: all var(--transition); }
429
+ #input-bar button:hover { filter: brightness(1.15); box-shadow: 0 2px 8px color-mix(in srgb, var(--accent) 35%, transparent); }
430
+ #input-bar button:disabled { opacity: 0.4; cursor: default; }
431
+
432
+ /* ── Page view ── */
433
+ #page-view { display: none; flex: 1; overflow-y: auto; flex-direction: column; }
434
+ #page-view .page-toolbar { padding: 6px 16px; background: var(--surface); border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; }
435
+ #page-view .page-toolbar button { background: var(--bg); color: var(--text); border: 1px solid var(--border); padding: 4px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.85em; transition: all var(--transition); }
436
+ #page-view .page-toolbar button:hover { border-color: var(--accent); color: var(--accent); }
437
+ #page-view .page-toolbar span { font-size: 0.85em; color: var(--dim); }
438
+ #page-content { flex: 1; padding: 16px; overflow-y: auto; color: var(--text); }
439
+
440
+ /* ── Layout page grid ── */
441
+ .layout-page { display: grid; grid-template-areas: "header header" "sidebar main" "footer footer"; grid-template-columns: 240px 1fr; grid-template-rows: auto 1fr auto; min-height: 100%; gap: 1px; background: var(--border); }
442
+ .layout-header { grid-area: header; background: var(--surface); padding: 12px 16px; }
443
+ .layout-sidebar { grid-area: sidebar; background: var(--bg); padding: 12px 16px; }
444
+ .layout-main { grid-area: main; background: var(--bg); padding: 16px; }
445
+ .layout-footer { grid-area: footer; background: var(--surface); padding: 8px 16px; font-size: 0.85em; color: var(--dim); }
446
+
447
+ /* ── Desktop Splash ── */
448
+ @keyframes splash-breathe { 0%, 100% { opacity: 0.18; transform: scale(1); } 50% { opacity: 0.35; transform: scale(1.04); } }
449
+ @keyframes splash-orbit-spin { 0% { transform: translate(-50%, -50%) rotate(0deg); } 100% { transform: translate(-50%, -50%) rotate(360deg); } }
450
+ @keyframes splash-glyph-breathe { 0%, 100% { opacity: 0.25; } 50% { opacity: 0.5; } }
451
+ @keyframes splash-core-pulse { 0%, 100% { opacity: 0.3; r: 6; } 50% { opacity: 0.6; r: 7; } }
452
+ @keyframes splash-ray-flow { 0%, 100% { opacity: 0.1; } 50% { opacity: 0.3; } }
453
+ #desktop-splash {
454
+ flex: 1; display: flex; align-items: center; justify-content: center;
455
+ background: var(--bg);
456
+ position: relative; overflow: hidden;
457
+ transition: opacity 0.6s ease-out;
458
+ }
459
+ #desktop-splash::before {
460
+ content: ""; position: absolute; inset: 0;
461
+ background:
462
+ radial-gradient(ellipse 50% 50% at 50% 50%, color-mix(in srgb, var(--accent) 5%, transparent) 0%, transparent 70%);
463
+ pointer-events: none;
464
+ animation: splash-breathe 6s ease-in-out infinite;
465
+ }
466
+ #desktop-splash.hidden { opacity: 0; pointer-events: none; position: absolute; }
467
+ .splash-orbit {
468
+ position: absolute; top: 50%; left: 50%;
469
+ border: 1px solid color-mix(in srgb, var(--accent) 8%, transparent);
470
+ border-radius: 50%; pointer-events: none;
471
+ }
472
+ .splash-orbit-1 { width: 240px; height: 240px; animation: splash-orbit-spin 40s linear infinite; }
473
+ .splash-orbit-2 { width: 360px; height: 360px; animation: splash-orbit-spin 60s linear infinite reverse; border-style: dashed; border-color: color-mix(in srgb, var(--dim) 6%, transparent); }
474
+ .splash-orbit-3 { width: 500px; height: 500px; animation: splash-orbit-spin 90s linear infinite; border-color: color-mix(in srgb, var(--dim) 3%, transparent); }
475
+ .splash-content { text-align: center; user-select: none; position: relative; z-index: 1; }
476
+ .splash-glyph { width: 80px; height: 80px; margin: 0 auto 24px; color: var(--dim); }
477
+ .splash-glyph svg { width: 100%; height: 100%; }
478
+ .splash-glyph .glyph-outer { opacity: 0.15; animation: splash-glyph-breathe 5s ease-in-out infinite; }
479
+ .splash-glyph .glyph-inner { opacity: 0.2; animation: splash-glyph-breathe 5s ease-in-out infinite 1.5s; }
480
+ .splash-glyph .glyph-core { opacity: 0.35; animation: splash-core-pulse 4s ease-in-out infinite; }
481
+ .splash-glyph .glyph-ray { opacity: 0.12; animation: splash-ray-flow 4s ease-in-out infinite; }
482
+ .splash-glyph .glyph-ray:nth-child(5) { animation-delay: 0.4s; }
483
+ .splash-glyph .glyph-ray:nth-child(6) { animation-delay: 0.8s; }
484
+ .splash-glyph .glyph-ray:nth-child(7) { animation-delay: 1.2s; }
485
+ .splash-glyph .glyph-ray:nth-child(8) { animation-delay: 1.6s; }
486
+ .splash-glyph .glyph-ray:nth-child(9) { animation-delay: 2.0s; }
487
+ .splash-glyph .glyph-ray:nth-child(10) { animation-delay: 2.4s; }
488
+ .splash-wordmark {
489
+ font-family: var(--font-heading); font-size: 2.4rem; font-weight: 800;
490
+ letter-spacing: 0.15em; color: var(--dim); opacity: 0.2;
491
+ text-transform: uppercase;
492
+ animation: splash-breathe 6s ease-in-out infinite 0.5s;
493
+ }
494
+ .splash-sub {
495
+ font-family: var(--font); font-size: 0.7rem; font-weight: 400;
496
+ letter-spacing: 0.3em; text-transform: uppercase;
497
+ color: var(--dim); opacity: 0.15; margin-top: 4px;
498
+ }
499
+ .splash-status {
500
+ margin-top: 32px; display: flex; align-items: center; justify-content: center; gap: 6px;
501
+ font-family: var(--font); font-size: 0.65rem; letter-spacing: 0.08em;
502
+ text-transform: uppercase; color: var(--dim); opacity: 0.3;
503
+ }
504
+
505
+ /* ── Session Badge ── */
506
+ #session-badge {
507
+ position: fixed; bottom: 8px; left: 10px; z-index: 9999;
508
+ display: flex; align-items: center; gap: 5px;
509
+ font-family: var(--font-mono, "JetBrains Mono", "Share Tech Mono", monospace);
510
+ font-size: 0.6rem; letter-spacing: 0.04em;
511
+ color: var(--dim); opacity: 0.25;
512
+ user-select: all; pointer-events: auto;
513
+ transition: opacity 0.3s;
514
+ }
515
+ #session-badge:hover { opacity: 0.6; }
516
+ #session-badge:hover #session-dot.connected { background: rgba(80,200,120,0.8); }
517
+ #session-badge:hover #session-dot.disconnected { background: rgba(220,80,80,0.7); }
518
+ #session-badge:hover #session-dot.connecting { background: rgba(200,180,80,0.7); }
519
+ #session-id:empty { display: none; }
520
+ #session-dot {
521
+ width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0;
522
+ background: rgba(100,100,100,0.4); transition: background 0.3s;
523
+ }
524
+ #session-dot.connected { background: rgba(80,200,120,0.35); }
525
+ #session-dot.disconnected { background: rgba(220,80,80,0.35); }
526
+ #session-dot.connecting { background: rgba(200,180,80,0.35); animation: session-dot-blink 1.2s ease-in-out infinite; }
527
+ @keyframes session-dot-blink { 0%,100% { opacity: 0.3; } 50% { opacity: 1; } }
528
+
529
+ /* ── AUP Display ── */
530
+ #aup-display { display: none; flex: 1; overflow-y: auto; padding: 20px 24px; }
531
+ #aup-display.active { display: flex; flex-direction: column; }
532
+ #aup-display.full-page { padding: 0; overflow: hidden; }
533
+ #aup-display.full-page .aup-toolbar { display: none; }
534
+ #aup-display.full-page #aup-root { max-width: none; padding: 0; margin: 0; height: 100vh; overflow: hidden; display: flex; flex-direction: column; }
535
+ #aup-display.full-page #aup-root > .aup-view { flex: 1; max-width: none !important; width: 100% !important; padding: 0 !important; margin: 0 !important; border-radius: 0 !important; background: none !important; border: none !important; box-shadow: none !important; overflow-y: auto; }
536
+ #aup-display.full-page #aup-root > .aup-view[data-layout="overlay-grid"] { padding: var(--overlay-pad) !important; }
537
+ /* Full-page centering: non-panel, non-shell children get max-width + auto margin */
538
+ #aup-display.full-page #aup-root > .aup-view > *:not([data-mode="panel"]):not([data-mode="shell"]):not(.wm-container) { max-width: 1200px; width: 100%; margin-left: auto !important; margin-right: auto !important; padding-left: 40px; padding-right: 40px; box-sizing: border-box; }
539
+ /* Nav bar and footer panels bleed full width but pad their content */
540
+ #aup-display.full-page #aup-root > .aup-view > .aup-view:first-child[data-mode="panel"] { padding-left: max(16px, calc((100% - 1200px) / 2 + 40px)); padding-right: max(16px, calc((100% - 1200px) / 2 + 40px)); }
541
+ #aup-display.full-page #aup-root > .aup-view > .aup-view[data-mode="panel"]:last-child { padding-left: max(16px, calc((100% - 1200px) / 2 + 40px)); padding-right: max(16px, calc((100% - 1200px) / 2 + 40px)); }
542
+ #aup-display.full-page .aup-deck-host { width: 100%; height: 100%; }
543
+ .aup-toolbar { padding: 6px 16px; background: var(--surface); border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; }
544
+ .aup-toolbar button { background: var(--bg); color: var(--text); border: 1px solid var(--border); padding: 4px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.85em; transition: all var(--transition); }
545
+ .aup-toolbar button:hover { border-color: var(--accent); color: var(--accent); }
546
+ #aup-root { flex: 1; max-width: 1200px; width: 100%; margin: 0 auto; }
547
+
548
+ /* ── AUP Primitives ── */
549
+ .aup-view { display: flex; flex-direction: column; gap: 12px; }
550
+ .aup-view[data-layout="row"] { flex-direction: row; }
551
+ .aup-view[data-layout="row"] > .aup-view:not([data-width]) { flex: 1; min-width: 0; }
552
+ .aup-view[data-layout="grid"] { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
553
+ .aup-view[data-layout="stack"] { display: grid; width: 100%; height: 100%; }
554
+ .aup-view[data-layout="stack"] > * { grid-area: 1 / 1; }
555
+ .aup-view[data-layout="stack"] > *:first-child { z-index: 0; }
556
+ .aup-view[data-layout="stack"] > *:nth-child(2) { z-index: 1; }
557
+ .aup-view[data-layout="stack"] > *:nth-child(n+3) { z-index: 2; }
558
+
559
+ .aup-view[data-layout="overlay-grid"] { --overlay-pad: 5vw; display: grid; grid-template-columns: auto 1fr auto; grid-template-rows: auto 1fr auto auto auto; grid-template-areas: "top-start top-center top-end" "mid-start mid-center mid-end" "lower-start lower-center lower-end" "ticker ticker ticker" "bottom-start bottom-center bottom-end"; width: 100%; height: 100%; padding: var(--overlay-pad); pointer-events: none; gap: 8px; }
560
+ .aup-view[data-layout="overlay-grid"] > * { pointer-events: auto; }
561
+ .aup-view[data-layout="overlay-grid"] > .aup-text,
562
+ .aup-view[data-layout="overlay-grid"] > .aup-action,
563
+ .aup-view[data-layout="overlay-grid"] > .aup-time { width: fit-content; height: fit-content; }
564
+ .aup-view[data-layout="overlay-grid"] > .aup-map { min-width: 240px; max-width: 320px; aspect-ratio: 1; }
565
+ .aup-view[data-layout="overlay-grid"] > .aup-table,
566
+ .aup-view[data-layout="overlay-grid"] > .aup-chart,
567
+ .aup-view[data-layout="overlay-grid"] > .aup-finance-chart,
568
+ .aup-view[data-layout="overlay-grid"] > .aup-calendar { min-width: 240px; max-width: 320px; }
569
+ .aup-view[data-layout="overlay-grid"] > .aup-media { width: fit-content; height: fit-content; }
570
+ .aup-view[data-layout="overlay-grid"] > .aup-media img { max-height: 48px; object-fit: contain; width: auto; }
571
+ .aup-view[data-layout="overlay-grid"] > [data-region="top-start"] { grid-area: top-start; align-self: start; justify-self: start; }
572
+ .aup-view[data-layout="overlay-grid"] > [data-region="top-center"] { grid-area: top-center; align-self: start; justify-self: center; }
573
+ .aup-view[data-layout="overlay-grid"] > [data-region="top-end"] { grid-area: top-end; align-self: start; justify-self: end; }
574
+ .aup-view[data-layout="overlay-grid"] > [data-region="mid-start"] { grid-area: mid-start; align-self: center; justify-self: start; }
575
+ .aup-view[data-layout="overlay-grid"] > [data-region="mid-center"] { grid-area: mid-center; align-self: center; justify-self: center; }
576
+ .aup-view[data-layout="overlay-grid"] > [data-region="mid-end"] { grid-area: mid-end; align-self: center; justify-self: end; }
577
+ .aup-view[data-layout="overlay-grid"] > [data-region="lower-start"] { grid-area: lower-start; align-self: end; justify-self: start; }
578
+ .aup-view[data-layout="overlay-grid"] > [data-region="lower-center"] { grid-area: lower-center; align-self: end; justify-self: center; }
579
+ .aup-view[data-layout="overlay-grid"] > [data-region="lower-end"] { grid-area: lower-end; align-self: end; justify-self: end; }
580
+ .aup-view[data-layout="overlay-grid"] > [data-region="ticker"] { grid-area: ticker; justify-self: stretch; margin-left: calc(-1 * var(--overlay-pad)); margin-right: calc(-1 * var(--overlay-pad)); }
581
+ .aup-view[data-layout="overlay-grid"] > [data-region="bottom-start"] { grid-area: bottom-start; align-self: end; justify-self: start; }
582
+ .aup-view[data-layout="overlay-grid"] > [data-region="bottom-center"] { grid-area: bottom-center; align-self: end; justify-self: center; }
583
+ .aup-view[data-layout="overlay-grid"] > [data-region="bottom-end"] { grid-area: bottom-end; align-self: end; justify-self: end; }
584
+ .aup-view[data-mode="card"] { background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); padding: 16px; box-shadow: var(--card-shadow); backdrop-filter: var(--card-backdrop); -webkit-backdrop-filter: var(--card-backdrop); transition: box-shadow var(--transition), transform var(--transition), background var(--transition); position: relative; overflow: hidden; }
585
+ .aup-view[data-mode="card"]::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: var(--heading-gradient, linear-gradient(90deg, var(--accent), var(--accent-secondary, var(--accent)))); opacity: 0; transition: opacity var(--transition); }
586
+ .aup-view[data-mode="card"]:hover { transform: translateY(-2px); box-shadow: var(--card-shadow-hover, var(--card-shadow)); }
587
+ .aup-view[data-mode="card"]:hover::before { opacity: 1; }
588
+ :is([data-theme="brutalist"], [data-theme="brutalist-mono"]) .aup-view[data-mode="card"]::before { display: none; }
589
+ .aup-view[data-mode="panel"] { background: var(--card-bg); border-radius: var(--radius-sm); padding: 10px 16px; backdrop-filter: var(--card-backdrop); -webkit-backdrop-filter: var(--card-backdrop); }
590
+
591
+ /* ── Header: first panel child of root is the nav bar ── */
592
+ #aup-root > .aup-view:first-child[data-mode="panel"] { position: sticky; top: 0; z-index: 20; border-radius: 0; margin: -20px -24px 20px; padding: 10px 24px; width: calc(100% + 48px); max-width: none; background: color-mix(in srgb, var(--surface) 85%, transparent); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); }
593
+ #aup-root > .aup-view:first-child[data-mode="panel"] .aup-action { flex-shrink: 0; }
594
+
595
+ /* ── Footer: last panel child of root ── */
596
+ #aup-root > .aup-view[data-mode="panel"]:last-child { border-radius: 0; margin: 20px -24px -20px; padding: 16px 24px; width: calc(100% + 48px); max-width: none; border-top: 1px solid var(--border); background: color-mix(in srgb, var(--surface) 60%, transparent); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); font-size: 0.85em; color: var(--dim); }
597
+ .aup-view[data-mode="pane"] { flex: 1; min-width: 0; overflow-y: auto; border-radius: var(--radius-md); padding: 16px; background: var(--card-bg); backdrop-filter: var(--card-backdrop); -webkit-backdrop-filter: var(--card-backdrop); }
598
+ .aup-view[data-mode="pane"] > .aup-text[data-level="2"]:first-child { background: var(--surface); margin: -16px -16px 12px; padding: 10px 16px; border-bottom: 1px solid var(--border); border-radius: var(--radius-md) var(--radius-md) 0 0; position: sticky; top: -16px; z-index: 1; }
599
+ .aup-view[data-mode="divider"] { height: 1px; background: var(--border); flex: none; padding: 0; gap: 0; border-radius: 0; }
600
+
601
+ /* ── Shell Layout: Desktop App Chrome ── */
602
+ .aup-view[data-mode="shell"] {
603
+ display: grid;
604
+ grid-template-areas:
605
+ "menubar"
606
+ "toolbar"
607
+ "body"
608
+ "statusbar"
609
+ "dock";
610
+ grid-template-rows: auto auto 1fr auto auto;
611
+ width: 100%; height: 100vh; overflow: hidden; gap: 0;
612
+ background: var(--bg);
613
+ font-family: "SF Mono", "Consolas", "JetBrains Mono", "Fira Code", monospace;
614
+ font-size: 13px;
615
+ }
616
+ .aup-view[data-mode="shell"] > [data-role="menubar"] { grid-area: menubar; display: flex; align-items: center; gap: 8px; padding: 0 12px; height: 32px; background: var(--surface); border-bottom: 1px solid var(--border); font-size: 0.8rem; flex-shrink: 0; overflow: hidden; }
617
+ .aup-view[data-mode="shell"] > [data-role="menubar"] * { margin: 0; font-size: inherit; }
618
+ .aup-view[data-mode="shell"] > [data-role="statusbar"] * { margin: 0; font-size: inherit; }
619
+ .aup-view[data-mode="shell"] > [data-role="toolbar"] { grid-area: toolbar; display: flex; align-items: center; gap: 8px; padding: 4px 12px; background: var(--surface); border-bottom: 1px solid var(--border); flex-shrink: 0; }
620
+ .aup-view[data-mode="shell"] > [data-role="body"] { grid-area: body; display: flex; overflow: hidden; min-height: 0; }
621
+ .aup-view[data-mode="shell"] > [data-role="statusbar"] { grid-area: statusbar; display: flex; align-items: center; gap: 12px; padding: 0 12px; height: 24px; background: var(--surface); border-top: 1px solid var(--border); font-size: 0.75rem; color: var(--dim); flex-shrink: 0; }
622
+ .aup-view[data-mode="shell"] > [data-role="dock"] { grid-area: dock; display: flex; align-items: center; justify-content: center; gap: 8px; padding: 4px 12px; background: var(--surface); border-top: 1px solid var(--border); flex-shrink: 0; }
623
+ /* Shell body children */
624
+ [data-role="sidebar"] { width: 220px; overflow-y: auto; flex-shrink: 0; border-right: 1px solid var(--border); background: var(--surface); padding: 8px 0; }
625
+ [data-role="sidebar"] > .aup-view > .aup-text:first-child { font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--dim); padding: 8px 12px 4px; }
626
+ [data-role="sidebar"] .aup-action { display: block; width: 100%; text-align: left; padding: 4px 12px; font-size: 0.8rem; border-radius: 0; background: none; border: none; color: var(--text); cursor: pointer; }
627
+ [data-role="sidebar"] .aup-action:hover { background: var(--hover); }
628
+ [data-role="sidebar"] .aup-action[data-variant="primary"] { background: var(--accent); color: var(--accent-fg, #fff); border-radius: var(--radius-sm); margin: 1px 8px; width: calc(100% - 16px); }
629
+ [data-role="content"] { flex: 1; overflow-y: auto; min-width: 0; padding: 16px; }
630
+ [data-role="content"] > .aup-text[data-level="2"] { font-size: 0.8rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--dim); margin-bottom: 12px; }
631
+ [data-role="content"] > .aup-view[data-layout="row"] { padding: 8px 12px; border-radius: var(--radius-sm); margin-bottom: 2px; }
632
+ [data-role="content"] > .aup-view[data-layout="row"]:hover { background: var(--hover); }
633
+ [data-role="content"] > .aup-view[data-layout="row"] > .aup-text:first-child { min-width: 120px; font-weight: 500; font-size: 0.85rem; }
634
+ [data-role="content"] > .aup-view[data-layout="row"] > .aup-text:last-child { margin-left: auto; font-weight: 600; }
635
+ [data-role="inspector"] { width: 280px; overflow-y: auto; flex-shrink: 0; border-left: 1px solid var(--border); background: var(--surface); padding: 8px; }
636
+ [data-role="inspector"] > .aup-text[data-level="3"] { font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--dim); padding: 8px 4px 4px; margin-bottom: 0; }
637
+ [data-role="inspector"] > .aup-text[data-variant="dim"] { font-size: 0.8rem; padding: 4px; }
638
+ /* Collapsible panels */
639
+ [data-collapsed="true"] > .aup-view-body { display: none; }
640
+ [data-collapsed="true"][data-role="sidebar"] { width: auto; min-width: 0; padding: 4px; }
641
+ [data-collapsed="true"][data-role="inspector"] { width: auto; min-width: 0; padding: 4px; }
642
+ .aup-collapse-toggle { background: none; border: none; cursor: pointer; padding: 4px 8px; color: var(--dim); font-size: 0.75rem; border-radius: var(--radius-sm); }
643
+ .aup-collapse-toggle:hover { background: var(--hover); color: var(--text); }
644
+ /* Shell responsive: hide sidebar/inspector/statusbar on small screens */
645
+ @media (max-width: 768px) {
646
+ .aup-view[data-mode="shell"] > [data-role="body"] > [data-role="sidebar"] { display: none; }
647
+ .aup-view[data-mode="shell"] > [data-role="body"] > [data-role="inspector"] { display: none; }
648
+ .aup-view[data-mode="shell"] > [data-role="statusbar"] { display: none; }
649
+ }
650
+
651
+ /* ── Tabs Mode ── */
652
+ .aup-view[data-mode="tabs"] { display: flex; flex-direction: column; overflow: hidden; }
653
+ .aup-view[data-mode="tabs"] > .aup-tab-bar { display: flex; gap: 0; border-bottom: 1px solid var(--border); background: var(--surface); padding: 0 8px; flex-shrink: 0; overflow-x: auto; }
654
+ .aup-view[data-mode="tabs"] > .aup-tab-bar > .aup-tab { padding: 6px 14px; font-size: 0.8rem; cursor: pointer; border: none; background: none; color: var(--dim); border-bottom: 2px solid transparent; white-space: nowrap; transition: color var(--transition), border-color var(--transition); }
655
+ .aup-view[data-mode="tabs"] > .aup-tab-bar > .aup-tab:hover { color: var(--text); background: var(--hover); }
656
+ .aup-view[data-mode="tabs"] > .aup-tab-bar > .aup-tab[data-active="true"] { color: var(--accent); border-bottom-color: var(--accent); }
657
+ .aup-view[data-mode="tabs"] > .aup-tab-panel { flex: 1; overflow-y: auto; padding: 12px 16px; }
658
+ .aup-view[data-mode="tabs"] > .aup-tab-panel[data-active="false"] { display: none; }
659
+
660
+ /* ── Spatial Intent: Layout ── */
661
+ .aup-view[data-align="start"] { justify-content: flex-start; }
662
+ .aup-view[data-align="center"] { justify-content: center; }
663
+ .aup-view[data-align="end"] { justify-content: flex-end; }
664
+ .aup-view[data-align="between"] { justify-content: space-between; }
665
+ .aup-view[data-cross-align="start"] { align-items: flex-start; }
666
+ .aup-view[data-cross-align="center"] { align-items: center; }
667
+ .aup-view[data-cross-align="end"] { align-items: flex-end; }
668
+ .aup-view[data-cross-align="stretch"] { align-items: stretch; }
669
+
670
+ /* ── Spatial Intent: Gap ── */
671
+ .aup-view[data-gap="none"] { gap: 0; }
672
+ .aup-view[data-gap="xs"] { gap: 4px; }
673
+ .aup-view[data-gap="sm"] { gap: 8px; }
674
+ .aup-view[data-gap="md"] { gap: 16px; }
675
+ .aup-view[data-gap="lg"] { gap: 24px; }
676
+ .aup-view[data-gap="xl"] { gap: 40px; }
677
+
678
+ /* ── Spatial Intent: Wrap & Overflow ── */
679
+ .aup-view[data-wrap="true"] { flex-wrap: wrap; }
680
+ .aup-view[data-wrap="true"][style*="--grid-min-width"] {
681
+ display: grid !important;
682
+ grid-template-columns: repeat(auto-fill, minmax(var(--grid-min-width), 1fr));
683
+ }
684
+ .aup-view[data-overflow="auto"] { overflow: auto; }
685
+ .aup-view[data-overflow="hidden"] { overflow: hidden; }
686
+ .aup-view[data-overflow="scroll-x"] { overflow-x: auto; overflow-y: hidden; }
687
+ .aup-view[data-overflow="scroll-y"] { overflow-x: hidden; overflow-y: auto; }
688
+
689
+ /* ── Spatial Intent: Sizing ── */
690
+ [data-width="hug"] { width: fit-content; flex: none !important; }
691
+ [data-width="fill"] { width: 100%; }
692
+ [data-max-width="xs"] { max-width: 320px; }
693
+ [data-max-width="sm"] { max-width: 480px; }
694
+ [data-max-width="md"] { max-width: 640px; }
695
+ [data-max-width="lg"] { max-width: 960px; }
696
+ [data-max-width="xl"] { max-width: 1200px; }
697
+ [data-max-width="full"] { max-width: 100%; }
698
+ [data-height="fill"] { height: 100%; }
699
+ .aup-view[data-layout="row"] > .aup-view[data-width="fill"] { flex: 1; min-width: 0; }
700
+
701
+ .aup-text { color: var(--text); font-size: 0.95rem; line-height: 1.6; }
702
+ .aup-text[data-level="1"] { font-family: var(--font-heading); font-size: 2em; font-weight: var(--heading-weight); color: var(--accent); text-shadow: var(--glow); letter-spacing: var(--heading-spacing); text-transform: var(--heading-transform); line-height: 1.15; margin-bottom: 0.3em; }
703
+ /* Gradient heading text — themes with --heading-gradient get background-clip */
704
+ :not([data-theme="brutalist"]):not([data-theme="brutalist-mono"]) .aup-text[data-level="1"] { background: var(--heading-gradient); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
705
+ .aup-text[data-scale="display"] { background: var(--heading-gradient); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; }
706
+ :is([data-theme="brutalist"], [data-theme="brutalist-mono"]) .aup-text[data-scale="display"] { background: none; -webkit-text-fill-color: unset; }
707
+ .aup-text[data-level="2"] { font-family: var(--font-heading); font-size: 1.5em; font-weight: var(--heading-weight); color: var(--text); letter-spacing: var(--heading-spacing); text-transform: var(--heading-transform); line-height: 1.25; margin-bottom: 0.25em; display: flex; align-items: center; gap: 10px; }
708
+ .aup-text[data-level="2"]::before { content: ''; width: 4px; height: 0.9em; border-radius: 2px; background: var(--heading-gradient, var(--accent)); flex-shrink: 0; }
709
+ :is([data-theme="brutalist"], [data-theme="brutalist-mono"]) .aup-text[data-level="2"]::before { border-radius: 0; background: var(--accent); }
710
+ .aup-text[data-level="3"] { font-family: var(--font-heading); font-size: 1.2em; font-weight: var(--heading-weight); color: var(--text); letter-spacing: var(--heading-spacing); margin-bottom: 0.2em; }
711
+ .aup-text[data-level="4"], .aup-text[data-level="5"], .aup-text[data-level="6"] { font-family: var(--font-heading); font-weight: var(--heading-weight); letter-spacing: var(--heading-spacing); }
712
+ .aup-text[data-format="code"] { font-family: var(--font-mono, monospace); background: var(--bg); padding: 0; border-radius: var(--radius-sm); border: 1px solid var(--border); white-space: pre-wrap; overflow: auto; }
713
+ .aup-text[data-format="code"] pre { margin: 0; padding: 12px; overflow: auto; }
714
+ .aup-text[data-format="code"] pre code { font-family: var(--font-mono, monospace); font-size: 0.85em; line-height: 1.5; }
715
+ .aup-text[data-format="code"] pre code.hljs { background: transparent; padding: 0; }
716
+ .aup-text[data-intent="info"] { color: var(--assistant-color); }
717
+ .aup-text[data-intent="success"] { color: var(--success); }
718
+ .aup-text[data-intent="warning"] { color: var(--accent); }
719
+ .aup-text[data-intent="error"] { color: var(--error); }
720
+
721
+ /* ── Spatial Intent: Typography Scale ── */
722
+ .aup-text[data-scale="display"] { font-family: var(--font-display, var(--font-heading)); font-size: 3.5em; font-weight: var(--heading-weight); letter-spacing: -0.03em; line-height: 1.05; }
723
+ .aup-text[data-scale="h1"] { font-family: var(--font-heading); font-size: 2.25em; font-weight: var(--heading-weight); letter-spacing: var(--heading-spacing); line-height: 1.15; }
724
+ .aup-text[data-scale="h2"] { font-family: var(--font-heading); font-size: 1.65em; font-weight: var(--heading-weight); letter-spacing: var(--heading-spacing); line-height: 1.25; }
725
+ .aup-text[data-scale="h3"] { font-family: var(--font-heading); font-size: 1.2em; font-weight: var(--heading-weight); letter-spacing: var(--heading-spacing); }
726
+ .aup-text[data-scale="body"] { font-size: 1em; }
727
+ .aup-text[data-scale="caption"] { font-size: 0.85em; color: var(--dim); }
728
+ .aup-text[data-scale="code"] { font-size: 0.85em; font-family: "JetBrains Mono", "Fira Code", monospace; }
729
+
730
+ /* ── Badge / Pill ── */
731
+ .aup-text[data-mode="badge"] { display: inline-block; padding: 3px 12px; border-radius: 999px; font-size: 0.78em; font-weight: 600; background: var(--surface); border: 1px solid var(--border); letter-spacing: 0.02em; }
732
+ .aup-text[data-mode="badge"][data-intent="info"] { background: color-mix(in srgb, var(--assistant-color) 20%, var(--bg)); border-color: color-mix(in srgb, var(--assistant-color) 40%, transparent); color: var(--assistant-color); box-shadow: 0 0 8px color-mix(in srgb, var(--assistant-color) 10%, transparent); }
733
+ .aup-text[data-mode="badge"][data-intent="success"] { background: color-mix(in srgb, var(--success) 22%, var(--bg)); border-color: color-mix(in srgb, var(--success) 40%, transparent); color: var(--success); box-shadow: 0 0 8px color-mix(in srgb, var(--success) 10%, transparent); }
734
+ .aup-text[data-mode="badge"][data-intent="warning"] { background: color-mix(in srgb, var(--accent) 22%, var(--bg)); border-color: color-mix(in srgb, var(--accent) 40%, transparent); color: var(--accent); box-shadow: 0 0 8px color-mix(in srgb, var(--accent) 10%, transparent); }
735
+ .aup-text[data-mode="badge"][data-intent="error"] { background: color-mix(in srgb, var(--error) 22%, var(--bg)); border-color: color-mix(in srgb, var(--error) 40%, transparent); color: var(--error); box-shadow: 0 0 8px color-mix(in srgb, var(--error) 10%, transparent); }
736
+
737
+ .aup-action { background: var(--surface); border: 1px solid var(--border); color: var(--text); padding: 8px 16px; border-radius: var(--radius-md); cursor: pointer; font-family: var(--font); font-size: 0.9rem; transition: all var(--transition) cubic-bezier(0.4, 0, 0.2, 1); white-space: nowrap; }
738
+ .aup-action:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-bg); transform: translateY(-1px); box-shadow: 0 2px 8px rgba(0,0,0,0.08); }
739
+ .aup-action:active { transform: translateY(0); }
740
+ .aup-action[data-variant="primary"] { background: var(--accent); border-color: var(--accent); color: var(--bg); font-weight: 600; box-shadow: 0 2px 8px color-mix(in srgb, var(--accent) 35%, transparent); }
741
+ .aup-action[data-variant="primary"]:hover { filter: brightness(1.15); box-shadow: 0 4px 16px color-mix(in srgb, var(--accent) 45%, transparent); transform: translateY(-1px); }
742
+ .aup-action[data-variant="primary"]:active { transform: translateY(0); filter: brightness(0.95); box-shadow: 0 1px 4px color-mix(in srgb, var(--accent) 25%, transparent); }
743
+ .aup-action[data-variant="destructive"] { background: color-mix(in srgb, var(--error) 12%, transparent); border-color: var(--error); color: var(--error); }
744
+ .aup-action[data-variant="destructive"]:hover { background: var(--error); color: var(--bg); box-shadow: 0 2px 8px color-mix(in srgb, var(--error) 35%, transparent); transform: translateY(-1px); }
745
+ .aup-action[data-variant="ghost"] { background: transparent; border-color: transparent; }
746
+ .aup-action[data-variant="ghost"]:hover { background: var(--surface); border-color: var(--border); transform: none; box-shadow: none; }
747
+ .aup-action { display: inline-flex; align-items: center; gap: 6px; }
748
+ .aup-action .aup-icon-svg { width: 1em; height: 1em; flex-shrink: 0; }
749
+ .aup-action[data-size="xs"] { padding: 3px 8px; font-size: 0.78em; }
750
+ .aup-action[data-size="sm"] { padding: 5px 12px; font-size: 0.85em; }
751
+ .aup-action[data-size="lg"] { padding: 10px 24px; font-size: 1em; }
752
+ .aup-action[data-size="xl"] { padding: 12px 32px; font-size: 1.1em; }
753
+
754
+ /* ── AUP Ticker Primitive ── */
755
+ .aup-ticker { overflow: hidden; width: 100%; white-space: nowrap; position: relative; font-family: var(--font); color: var(--text); padding: 6px 0; }
756
+ .aup-ticker-track { display: inline-flex; align-items: center; will-change: transform; }
757
+ .aup-ticker[data-mode="scroll"] .aup-ticker-track { animation: ticker-scroll var(--ticker-duration, 20s) linear infinite; }
758
+ .aup-ticker[data-mode="scroll"][data-direction="ltr"] .aup-ticker-track { animation-direction: reverse; }
759
+ .aup-ticker[data-paused="true"] .aup-ticker-track { animation-play-state: paused; }
760
+ @keyframes ticker-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
761
+ .aup-ticker[data-mode="scroll"] .aup-ticker-item,
762
+ .aup-ticker[data-mode="static"] .aup-ticker-item { display: inline-flex; align-items: center; flex-shrink: 0; }
763
+ .aup-ticker-separator { display: inline-flex; align-items: center; flex-shrink: 0; padding: 0 8px; opacity: 0.5; }
764
+ .aup-ticker[data-mode="flip"] .aup-ticker-track { position: relative; width: 100%; min-height: 1.5em; }
765
+ .aup-ticker[data-mode="flip"] .aup-ticker-item { position: absolute; inset: 0; display: flex; align-items: center; opacity: 0; pointer-events: none; transition: opacity 0.4s ease, transform 0.4s ease; }
766
+ .aup-ticker[data-mode="flip"][data-flip-transition="slide-up"] .aup-ticker-item { transform: translateY(100%); }
767
+ .aup-ticker[data-mode="flip"][data-flip-transition="slide-up"] .aup-ticker-item.active { transform: translateY(0); }
768
+ .aup-ticker[data-mode="flip"][data-flip-transition="slide-left"] .aup-ticker-item { transform: translateX(100%); }
769
+ .aup-ticker[data-mode="flip"][data-flip-transition="slide-left"] .aup-ticker-item.active { transform: translateX(0); }
770
+ .aup-ticker[data-mode="flip"] .aup-ticker-item.active { opacity: 1; pointer-events: auto; }
771
+ .aup-ticker[data-intent="breaking"] { background: rgba(220,38,38,0.85); color: #fff; padding: 6px 12px; }
772
+ .aup-ticker[data-intent="warning"] { background: rgba(245,158,11,0.85); color: #000; padding: 6px 12px; }
773
+ .aup-ticker[data-intent="success"] { background: rgba(22,163,74,0.85); color: #fff; padding: 6px 12px; }
774
+ .aup-ticker[data-intent="info"] { background: rgba(37,99,235,0.85); color: #fff; padding: 6px 12px; }
775
+ .aup-view[data-layout="overlay-grid"] > .aup-ticker { width: 100%; }
776
+
777
+ /* ── Role base — structural defaults (no colors, themes provide visual treatment) ── */
778
+ [data-role="live-badge"] { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; font-size: 0.8rem; }
779
+ [data-role="speaker-bar"] { display: flex; flex-direction: column; gap: 2px; }
780
+ [data-role="lower-third"] { display: flex; flex-direction: column; gap: 2px; }
781
+ [data-role="alert"] { font-weight: 600; }
782
+ [data-role="clock"] { font-variant-numeric: tabular-nums; }
783
+ [data-role="score-bug"] { display: inline-flex; align-items: center; font-variant-numeric: tabular-nums; }
784
+ [data-role="data-widget"] { display: block; }
785
+ [data-role="featured-comment"] { display: block; max-width: 400px; }
786
+
787
+ .aup-unknown { border: 1px dashed var(--dim); padding: 8px; border-radius: var(--radius-sm); color: var(--dim); font-size: 0.8em; }
788
+
789
+ /* ── AUP Time Primitive ── */
790
+ .aup-time { font-family: var(--font); color: var(--text); font-variant-numeric: tabular-nums; }
791
+ .aup-time-display { font-size: 1em; }
792
+ .aup-time-clock { font-size: 2em; font-weight: 600; letter-spacing: 0.02em; }
793
+ .aup-time-timer, .aup-time-countdown { font-size: 1.5em; font-weight: 500; font-family: "Share Tech Mono", "JetBrains Mono", monospace; }
794
+ .aup-time-picker input { background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 6px 10px; border-radius: var(--radius-sm); font-family: var(--font); outline: none; }
795
+ .aup-time-picker input:focus { border-color: var(--accent); }
796
+
797
+ /* ── AUP Chart Primitive ── */
798
+ .aup-chart { position: relative; min-height: 200px; background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); padding: 16px; }
799
+ .aup-chart canvas { width: 100% !important; height: 100% !important; }
800
+ .aup-chart-loading { color: var(--dim); text-align: center; padding: 40px; font-size: 0.9em; }
801
+
802
+ /* ── AUP Finance Chart (TradingView Lightweight Charts) ── */
803
+ .aup-finance-chart { position: relative; min-height: 200px; background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); overflow: hidden; }
804
+ .aup-finance-chart-loading { color: var(--dim); text-align: center; padding: 40px; font-size: 0.9em; }
805
+
806
+ /* ── AUP Map Primitive ── */
807
+ .aup-map { min-height: 300px; border: var(--card-border); border-radius: var(--radius-lg); overflow: hidden; position: relative; }
808
+ .aup-map-loading { color: var(--dim); text-align: center; padding: 40px; font-size: 0.9em; }
809
+ .aup-map .leaflet-popup-content-wrapper { background: var(--card-bg); color: var(--text); border-radius: 8px; box-shadow: 0 4px 20px rgba(0,0,0,0.15); border: 1px solid var(--border); font-family: var(--font-body); }
810
+ .aup-map .leaflet-popup-tip { background: var(--card-bg); }
811
+ .aup-map .leaflet-popup-content { margin: 8px 12px; font-size: 0.85em; line-height: 1.5; }
812
+ .aup-map .leaflet-control-attribution { font-size: 10px; opacity: 0.6; }
813
+ .aup-map .leaflet-control-zoom a { background: var(--card-bg); color: var(--text); border-color: var(--border); }
814
+ .aup-map .leaflet-control-zoom a:hover { background: var(--hover-bg); }
815
+
816
+ /* ── AUP Calendar Primitive ── */
817
+ .aup-calendar { background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); padding: 16px; }
818
+ .aup-calendar-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
819
+ .aup-calendar-header button { background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 4px 10px; border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition); }
820
+ .aup-calendar-header button:hover { border-color: var(--accent); color: var(--accent); }
821
+ .aup-calendar-header .aup-calendar-title { font-weight: 600; font-size: 1.05em; }
822
+ .aup-calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
823
+ .aup-calendar-day-header { text-align: center; font-size: 0.75em; font-weight: 600; color: var(--dim); padding: 4px; text-transform: uppercase; }
824
+ .aup-calendar-day { text-align: center; padding: 6px 4px; border-radius: var(--radius-sm); font-size: 0.85em; cursor: default; position: relative; min-height: 32px; }
825
+ .aup-calendar-day.today { background: var(--accent-bg); color: var(--accent); font-weight: 700; }
826
+ .aup-calendar-day.other-month { color: var(--dim); opacity: 0.4; }
827
+ .aup-calendar-day .aup-calendar-event { display: block; font-size: 0.65em; margin-top: 2px; padding: 1px 3px; border-radius: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
828
+ .aup-calendar-event[data-intent="info"] { background: rgba(96,165,250,0.2); color: #60a5fa; }
829
+ .aup-calendar-event[data-intent="success"] { background: rgba(74,222,128,0.2); color: #4ade80; }
830
+ .aup-calendar-event[data-intent="warning"] { background: rgba(251,191,36,0.2); color: #fbbf24; }
831
+ .aup-calendar-event[data-intent="error"] { background: rgba(248,113,113,0.2); color: #f87171; }
832
+
833
+ /* ── AUP Moon Phase ── */
834
+ .aup-moonphase { display: flex; flex-direction: column; align-items: center; gap: 12px; background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); padding: 24px; }
835
+ .aup-moonphase-visual { font-size: 4rem; line-height: 1; filter: drop-shadow(0 0 12px rgba(200,200,255,0.3)); }
836
+ .aup-moonphase-name { font-size: 1.1em; font-weight: 600; text-transform: capitalize; }
837
+ .aup-moonphase-details { display: flex; gap: 20px; font-size: 0.85em; color: var(--dim); }
838
+ .aup-moonphase-details span { display: flex; align-items: center; gap: 4px; }
839
+ .aup-moonphase-month { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; width: 100%; margin-top: 8px; }
840
+ .aup-moonphase-month-day { display: flex; flex-direction: column; align-items: center; gap: 2px; font-size: 0.72em; color: var(--dim); padding: 4px 2px; border-radius: var(--radius-sm); }
841
+ .aup-moonphase-month-day.today { background: rgba(99,102,241,0.15); color: var(--accent); }
842
+ .aup-moonphase-month-day .moon-emoji { font-size: 1.3em; }
843
+
844
+ /* ── AUP Natal Chart ── */
845
+ .aup-natal-chart { position: relative; min-height: 200px; background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); overflow: hidden; padding: 16px; }
846
+ .aup-natal-chart-loading { color: var(--dim); text-align: center; padding: 40px; font-size: 0.9em; }
847
+ .aup-natal-chart svg { display: block; margin: 0 auto; }
848
+ .aup-natal-aspects { margin-top: 16px; }
849
+ .aup-natal-aspects table { width: 100%; border-collapse: collapse; font-size: 0.82em; }
850
+ .aup-natal-aspects th { text-align: left; padding: 6px 8px; border-bottom: 2px solid var(--border); color: var(--dim); font-weight: 600; }
851
+ .aup-natal-aspects td { padding: 5px 8px; border-bottom: 1px solid var(--border); }
852
+ .aup-natal-aspects tr:hover { background: rgba(99,102,241,0.06); }
853
+ .aup-natal-planets { margin-top: 12px; }
854
+ .aup-natal-planets table { width: 100%; border-collapse: collapse; font-size: 0.82em; }
855
+ .aup-natal-planets th { text-align: left; padding: 6px 8px; border-bottom: 2px solid var(--border); color: var(--dim); font-weight: 600; }
856
+ .aup-natal-planets td { padding: 5px 8px; border-bottom: 1px solid var(--border); }
857
+
858
+ /* ── AUP Input ── */
859
+ .aup-input { display: flex; flex-direction: column; gap: 4px; width: 100%; }
860
+ .aup-input label { color: var(--dim); font-size: 0.85em; }
861
+ .aup-input input, .aup-input select, .aup-input textarea { background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 8px 12px; border-radius: var(--radius-md); font-family: var(--font); font-size: 0.9rem; outline: none; transition: border-color var(--transition); width: 100%; }
862
+ .aup-input input:focus, .aup-input select:focus, .aup-input textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent); }
863
+ .aup-input .aup-toggle { display: flex; align-items: center; gap: 8px; cursor: pointer; }
864
+ .aup-input .aup-toggle-track { width: 40px; height: 22px; border-radius: 11px; background: var(--border); position: relative; transition: background var(--transition), box-shadow var(--transition); cursor: pointer; }
865
+ .aup-input .aup-toggle-track.on { background: var(--accent); box-shadow: 0 0 8px color-mix(in srgb, var(--accent) 30%, transparent); }
866
+ .aup-input .aup-toggle-thumb { width: 18px; height: 18px; border-radius: 50%; background: white; position: absolute; top: 2px; left: 2px; transition: left var(--transition) cubic-bezier(0.4, 0, 0.2, 1), box-shadow var(--transition); box-shadow: 0 1px 3px rgba(0,0,0,0.2); }
867
+ .aup-input .aup-toggle-track.on .aup-toggle-thumb { left: 20px; }
868
+ .aup-input input[type="range"] { accent-color: var(--accent); }
869
+ .aup-input input[type="checkbox"] { accent-color: var(--accent); width: 16px; height: 16px; }
870
+ .aup-input .aup-checkbox-row { display: flex; align-items: center; gap: 8px; cursor: pointer; }
871
+ .aup-progress { width: 100%; height: 8px; background: var(--border); border-radius: 4px; overflow: hidden; }
872
+ .aup-progress-fill { height: 100%; background: var(--accent); border-radius: 4px; transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1); background-image: linear-gradient(90deg, transparent 0%, color-mix(in srgb, white 15%, transparent) 50%, transparent 100%); background-size: 200% 100%; }
873
+ .aup-progress-fill[data-intent="success"] { background: var(--success); }
874
+ .aup-progress-fill[data-intent="error"] { background: var(--error); }
875
+ .aup-progress-fill[data-intent="info"] { background: var(--assistant-color); }
876
+ .aup-progress-row { display: flex; align-items: center; gap: 8px; }
877
+ .aup-progress-label { font-size: 0.85em; color: var(--dim); white-space: nowrap; }
878
+
879
+ /* ── AUP Media ── */
880
+ .aup-media { display: inline-block; }
881
+ .aup-media img { max-width: 100%; height: auto; border-radius: var(--radius-md); object-fit: contain; }
882
+ .aup-media .aup-icon { font-size: 1.5em; display: inline-flex; align-items: center; justify-content: center; width: 2em; height: 2em; border-radius: 50%; background: var(--surface); }
883
+ .aup-media .aup-icon-svg { width: 1.25em; height: 1.25em; flex-shrink: 0; }
884
+ .aup-media video { max-width: 100%; border-radius: var(--radius-sm); }
885
+ .aup-media .aup-placeholder { width: 100px; height: 100px; background: var(--surface); border: 1px dashed var(--border); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; color: var(--dim); font-size: 0.8em; }
886
+ .aup-avatar { display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; overflow: hidden; background: var(--accent-bg); color: var(--accent); font-weight: 600; flex-shrink: 0; }
887
+ .aup-avatar img { width: 100%; height: 100%; object-fit: cover; }
888
+ .aup-avatar[data-size="xs"] { width: 24px; height: 24px; font-size: 0.65em; }
889
+ .aup-avatar[data-size="sm"] { width: 32px; height: 32px; font-size: 0.75em; }
890
+ .aup-avatar[data-size="md"], .aup-avatar:not([data-size]) { width: 40px; height: 40px; font-size: 0.9em; }
891
+ .aup-avatar[data-size="lg"] { width: 56px; height: 56px; font-size: 1.1em; }
892
+ .aup-avatar[data-size="xl"] { width: 80px; height: 80px; font-size: 1.4em; }
893
+
894
+ /* ── AUP Overlay ── */
895
+ .aup-overlay { display: none; }
896
+ .aup-overlay.open { display: contents; }
897
+ .aup-overlay-backdrop { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 1000; animation: aup-backdrop-in 0.25s ease both; }
898
+ .aup-overlay-dialog { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 24px; z-index: 1001; min-width: 320px; max-width: 80vw; max-height: 80vh; overflow-y: auto; box-shadow: 0 24px 48px rgba(0,0,0,0.2), 0 8px 16px rgba(0,0,0,0.1); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); animation: aup-dialog-in 0.2s cubic-bezier(0.4, 0, 0.2, 1) both; }
899
+ .aup-overlay-dialog-title { font-family: var(--font-heading); font-weight: var(--heading-weight); color: var(--text); margin-bottom: 16px; font-size: 1.2em; letter-spacing: var(--heading-spacing); }
900
+ .aup-overlay-popover { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 8px 0; z-index: 9999; min-width: 160px; max-width: 320px; max-height: 400px; overflow-y: auto; box-shadow: 0 8px 24px rgba(0,0,0,0.15), 0 2px 8px rgba(0,0,0,0.1); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); animation: aup-dialog-in 0.15s cubic-bezier(0.4, 0, 0.2, 1) both; }
901
+ .aup-overlay:not(.open) > .aup-overlay-popover { display: none; }
902
+ .aup-overlay-popover .aup-action { display: block; width: 100%; text-align: left; padding: 6px 16px; border-radius: 0; border: none; background: none; }
903
+ .aup-overlay-popover .aup-action:hover { background: var(--hover); }
904
+ .aup-overlay-drawer { position: fixed; top: 0; bottom: 0; background: var(--surface); border-left: 1px solid var(--border); z-index: 1001; width: 320px; padding: 16px; overflow-y: auto; box-shadow: -8px 0 24px rgba(0,0,0,0.15); }
905
+ .aup-overlay-drawer.right { right: 0; animation: aup-drawer-right 0.3s cubic-bezier(0.4, 0, 0.2, 1) both; }
906
+ .aup-overlay-drawer.left { left: 0; border-left: none; border-right: 1px solid var(--border); animation: aup-drawer-left 0.3s cubic-bezier(0.4, 0, 0.2, 1) both; box-shadow: 8px 0 24px rgba(0,0,0,0.15); }
907
+ .aup-overlay-toast { position: fixed; z-index: 2100; max-width: 400px; min-width: 280px; animation: aup-toast-in 0.35s cubic-bezier(0.4, 0, 0.2, 1) both; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 0; box-shadow: 0 8px 24px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.1); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); overflow: hidden; display: flex; flex-direction: column; }
908
+ .aup-overlay-toast.exiting { animation: aup-toast-out 0.25s ease forwards; }
909
+ /* Position variants */
910
+ .aup-overlay-toast[data-position="bottom-right"], .aup-overlay-toast:not([data-position]) { bottom: 80px; right: 20px; }
911
+ .aup-overlay-toast[data-position="bottom-left"] { bottom: 80px; left: 20px; }
912
+ .aup-overlay-toast[data-position="bottom-center"] { bottom: 80px; left: 50%; transform: translateX(-50%); }
913
+ .aup-overlay-toast[data-position="top-right"] { top: 20px; right: 20px; }
914
+ .aup-overlay-toast[data-position="top-left"] { top: 20px; left: 20px; }
915
+ .aup-overlay-toast[data-position="top-center"] { top: 20px; left: 50%; transform: translateX(-50%); }
916
+ /* Intent accent — left border stripe */
917
+ .aup-overlay-toast[data-intent="success"] { border-left: 3px solid var(--success); }
918
+ .aup-overlay-toast[data-intent="error"] { border-left: 3px solid var(--error); }
919
+ .aup-overlay-toast[data-intent="warning"] { border-left: 3px solid var(--accent); }
920
+ .aup-overlay-toast[data-intent="info"] { border-left: 3px solid color-mix(in srgb, var(--accent) 60%, var(--text)); }
921
+ /* Body layout */
922
+ .aup-toast-body { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; }
923
+ .aup-toast-icon { flex-shrink: 0; font-size: 1.3em; line-height: 1; margin-top: 1px; }
924
+ .aup-toast-icon img { width: 22px; height: 22px; border-radius: 4px; object-fit: cover; }
925
+ .aup-toast-content { flex: 1; min-width: 0; }
926
+ .aup-toast-title { font-weight: 600; font-size: 0.9em; color: var(--text); margin-bottom: 2px; }
927
+ .aup-toast-message { font-size: 0.84em; color: var(--dim); line-height: 1.4; }
928
+ .aup-toast-close { flex-shrink: 0; background: none; border: none; color: var(--dim); cursor: pointer; font-size: 1.1em; padding: 0 2px; line-height: 1; opacity: 0.6; transition: opacity var(--transition); }
929
+ .aup-toast-close:hover { opacity: 1; }
930
+ /* Timer bar */
931
+ .aup-toast-timer { height: 3px; background: color-mix(in srgb, var(--accent) 20%, transparent); }
932
+ .aup-toast-timer-bar { height: 100%; background: var(--accent); transition: width linear; }
933
+ .aup-overlay-toast[data-intent="success"] .aup-toast-timer-bar { background: var(--success); }
934
+ .aup-overlay-toast[data-intent="error"] .aup-toast-timer-bar { background: var(--error); }
935
+ .aup-overlay-toast[data-intent="warning"] .aup-toast-timer-bar { background: var(--accent); }
936
+ /* ── Alert / Confirm ── */
937
+ .aup-overlay-alert { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 28px 32px; z-index: 1001; min-width: 340px; max-width: 480px; text-align: center; box-shadow: 0 24px 48px rgba(0,0,0,0.25); animation: aup-dialog-in 0.2s cubic-bezier(0.4, 0, 0.2, 1) both; }
938
+ .aup-alert-icon { font-size: 2.4em; margin-bottom: 12px; line-height: 1; }
939
+ .aup-alert-icon[data-intent="info"] { color: var(--accent); }
940
+ .aup-alert-icon[data-intent="success"] { color: var(--success); }
941
+ .aup-alert-icon[data-intent="error"] { color: var(--error); }
942
+ .aup-alert-icon[data-intent="warning"] { color: #f0a030; }
943
+ .aup-alert-title { font-family: var(--font-heading); font-weight: var(--heading-weight); color: var(--text); font-size: 1.25em; margin-bottom: 8px; letter-spacing: var(--heading-spacing); }
944
+ .aup-alert-message { color: var(--dim); font-size: 0.92em; line-height: 1.5; margin-bottom: 20px; }
945
+ .aup-alert-actions { display: flex; gap: 8px; justify-content: center; }
946
+ .aup-alert-btn { padding: 8px 24px; border-radius: var(--radius-md); font-family: var(--font); font-size: 0.9em; font-weight: 600; cursor: pointer; transition: all var(--transition); border: 1px solid var(--border); }
947
+ .aup-alert-btn.primary { background: var(--accent); border-color: var(--accent); color: var(--bg); }
948
+ .aup-alert-btn.primary:hover { filter: brightness(1.15); transform: translateY(-1px); }
949
+ .aup-alert-btn.secondary { background: transparent; color: var(--text); }
950
+ .aup-alert-btn.secondary:hover { background: var(--accent-bg); border-color: var(--accent); }
951
+ .aup-alert-btn.danger { background: var(--error); border-color: var(--error); color: #fff; }
952
+ .aup-alert-btn.danger:hover { filter: brightness(1.1); }
953
+
954
+ /* ── HUD (fullscreen status) ── */
955
+ .aup-overlay-hud { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1001; display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 32px 48px; background: color-mix(in srgb, var(--surface) 90%, transparent); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: 0 16px 48px rgba(0,0,0,0.25); animation: aup-dialog-in 0.25s cubic-bezier(0.4, 0, 0.2, 1) both; }
956
+ .aup-hud-spinner { width: 36px; height: 36px; border: 3px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: aup-spin 0.8s linear infinite; }
957
+ .aup-hud-icon { font-size: 2em; }
958
+ .aup-hud-message { color: var(--text); font-size: 0.95em; font-weight: 500; }
959
+ .aup-hud-sub { color: var(--dim); font-size: 0.82em; }
960
+ .aup-hud-progress { width: 160px; height: 4px; background: var(--border); border-radius: 2px; overflow: hidden; }
961
+ .aup-hud-progress-bar { height: 100%; background: var(--accent); border-radius: 2px; transition: width 0.3s ease; }
962
+ @keyframes aup-spin { to { transform: rotate(360deg); } }
963
+
964
+ /* ── Choice / AskUser (Claude Code style) ── */
965
+ .aup-overlay-choice { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 0; z-index: 1001; min-width: 420px; max-width: 560px; max-height: 80vh; overflow: hidden; box-shadow: 0 24px 48px rgba(0,0,0,0.25); animation: aup-dialog-in 0.2s cubic-bezier(0.4, 0, 0.2, 1) both; display: flex; flex-direction: column; }
966
+ .aup-choice-header { padding: 20px 24px 0; }
967
+ .aup-choice-tag { display: inline-block; font-size: 0.7em; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent); background: var(--accent-bg); padding: 3px 10px; border-radius: 999px; margin-bottom: 10px; }
968
+ .aup-choice-question { font-family: var(--font-heading); font-weight: var(--heading-weight); color: var(--text); font-size: 1.15em; line-height: 1.4; letter-spacing: var(--heading-spacing); margin-bottom: 4px; }
969
+ .aup-choice-hint { color: var(--dim); font-size: 0.82em; margin-bottom: 0; }
970
+ .aup-choice-options { padding: 12px 12px 16px; overflow-y: auto; display: flex; flex-direction: column; gap: 6px; }
971
+ .aup-choice-option { display: flex; align-items: flex-start; gap: 12px; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius-md); cursor: pointer; transition: all var(--transition); background: transparent; text-align: left; font-family: var(--font); }
972
+ .aup-choice-option:hover { border-color: var(--accent); background: var(--accent-bg); }
973
+ .aup-choice-option.selected { border-color: var(--accent); background: var(--accent-bg); box-shadow: 0 0 0 1px var(--accent); }
974
+ .aup-choice-radio { flex-shrink: 0; width: 18px; height: 18px; border: 2px solid var(--border); border-radius: 50%; margin-top: 1px; display: flex; align-items: center; justify-content: center; transition: all var(--transition); }
975
+ .aup-choice-check { flex-shrink: 0; width: 18px; height: 18px; border: 2px solid var(--border); border-radius: 4px; margin-top: 1px; display: flex; align-items: center; justify-content: center; transition: all var(--transition); }
976
+ .aup-choice-option.selected .aup-choice-radio { border-color: var(--accent); }
977
+ .aup-choice-option.selected .aup-choice-radio::after { content: ""; width: 8px; height: 8px; background: var(--accent); border-radius: 50%; }
978
+ .aup-choice-option.selected .aup-choice-check { border-color: var(--accent); background: var(--accent); }
979
+ .aup-choice-option.selected .aup-choice-check::after { content: ""; width: 10px; height: 7px; border-left: 2px solid var(--bg); border-bottom: 2px solid var(--bg); transform: rotate(-45deg) translate(1px, -1px); }
980
+ .aup-choice-label { font-weight: 500; color: var(--text); font-size: 0.92em; }
981
+ .aup-choice-desc { color: var(--dim); font-size: 0.82em; line-height: 1.4; margin-top: 2px; }
982
+ .aup-choice-other { display: flex; gap: 8px; padding: 0 12px 16px; }
983
+ .aup-choice-other input { flex: 1; background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 8px 12px; border-radius: var(--radius-md); font-family: var(--font); font-size: 0.9em; outline: none; transition: border-color var(--transition); }
984
+ .aup-choice-other input:focus { border-color: var(--accent); }
985
+ .aup-choice-other input::placeholder { color: var(--dim); }
986
+ .aup-choice-footer { padding: 12px 16px; border-top: 1px solid var(--border); display: flex; justify-content: flex-end; gap: 8px; background: color-mix(in srgb, var(--bg) 50%, var(--surface)); }
987
+ .aup-choice-stepper { display: flex; align-items: center; justify-content: center; gap: 6px; padding: 12px 24px 4px; }
988
+ .aup-choice-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--border); transition: all var(--transition); }
989
+ .aup-choice-dot.active { background: var(--accent); transform: scale(1.3); }
990
+ .aup-choice-dot.done { background: var(--accent); opacity: 0.5; }
991
+ .aup-choice-step-label { font-size: 0.72em; color: var(--dim); margin-left: 8px; }
992
+ .aup-choice-step-body { animation: aup-step-in 0.2s ease; }
993
+ @keyframes aup-step-in { from { opacity: 0; transform: translateX(12px); } to { opacity: 1; transform: translateX(0); } }
994
+ .aup-choice-footer { align-items: center; }
995
+ .aup-choice-footer .spacer { flex: 1; }
996
+
997
+ @keyframes aup-toast-in { from { opacity: 0; transform: translateY(10px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } }
998
+ @keyframes aup-toast-out { from { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 0; transform: translateY(-8px) scale(0.97); } }
999
+ @keyframes aup-page-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
1000
+ @keyframes aup-backdrop-in { from { opacity: 0; } to { opacity: 1; } }
1001
+ @keyframes aup-dialog-in { from { opacity: 0; transform: translate(-50%, -50%) scale(0.95); } to { opacity: 1; transform: translate(-50%, -50%) scale(1); } }
1002
+ @keyframes aup-drawer-right { from { transform: translateX(100%); } to { transform: translateX(0); } }
1003
+ @keyframes aup-drawer-left { from { transform: translateX(-100%); } to { transform: translateX(0); } }
1004
+ @keyframes aup-msg-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
1005
+ #aup-root.aup-animating { animation: aup-page-in 0.25s ease-out; }
1006
+ .msg { animation: aup-msg-in 0.2s ease-out; }
1007
+
1008
+ /* ── AUP Table ── */
1009
+ .aup-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--msg-font-size); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
1010
+ .aup-table th { text-align: left; padding: 10px 14px; border-bottom: 2px solid var(--border); color: var(--dim); font-weight: 600; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.06em; background: var(--surface); cursor: pointer; user-select: none; transition: color var(--transition), background var(--transition); }
1011
+ .aup-table th:hover { color: var(--accent); background: var(--accent-bg); }
1012
+ .aup-table th[data-align="right"] { text-align: right; }
1013
+ .aup-table th[data-align="center"] { text-align: center; }
1014
+ .aup-table td { padding: 10px 14px; border-bottom: 1px solid var(--border); color: var(--text); transition: background var(--transition); }
1015
+ .aup-table td[data-align="right"] { text-align: right; }
1016
+ .aup-table td[data-align="center"] { text-align: center; }
1017
+ .aup-table tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--surface) 50%, transparent); }
1018
+ .aup-table tr:hover td { background: var(--accent-bg); }
1019
+ .aup-table tbody tr:last-child td { border-bottom: none; }
1020
+ .aup-table .aup-table-empty { text-align: center; color: var(--dim); padding: 20px; }
1021
+
1022
+ /* ── AUP Terminal Subsystem ── */
1023
+ .aup-terminal { background: #0c0c0c; border: 1px solid var(--border); border-radius: var(--radius-lg); min-height: 200px; padding: 8px; font-family: var(--font); font-size: 13px; color: #cccccc; overflow: auto; white-space: pre-wrap; }
1024
+ .aup-terminal-placeholder { color: var(--dim); text-align: center; padding: 40px; font-size: 0.9em; }
1025
+
1026
+ /* ── AUP Editor Subsystem ── */
1027
+ .aup-editor { display: flex; flex-direction: column; background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); overflow: hidden; }
1028
+ .aup-editor-toolbar { display: flex; gap: 4px; padding: 6px 10px; border-bottom: 1px solid var(--border); background: var(--surface); flex-wrap: wrap; }
1029
+ .aup-editor-toolbar button { background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 3px 8px; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.78em; transition: all var(--transition); }
1030
+ .aup-editor-toolbar button:hover { border-color: var(--accent); color: var(--accent); }
1031
+ .aup-editor-toolbar .active { background: var(--accent-bg); border-color: var(--accent); color: var(--accent); }
1032
+ .aup-editor-area { flex: 1; min-height: 200px; position: relative; }
1033
+ .aup-editor-area textarea { width: 100%; height: 100%; min-height: 200px; background: transparent; color: transparent; caret-color: var(--text); border: none; padding: 12px; font-family: "JetBrains Mono", "Fira Code", monospace; font-size: 13px; line-height: 1.6; resize: vertical; outline: none; tab-size: 2; position: relative; z-index: 1; }
1034
+ .aup-editor-highlight { position: absolute; top: 0; left: 0; right: 0; bottom: 0; padding: 12px; font-family: "JetBrains Mono", "Fira Code", monospace; font-size: 13px; line-height: 1.6; tab-size: 2; white-space: pre-wrap; word-wrap: break-word; overflow: hidden; pointer-events: none; background: var(--bg); color: var(--text); }
1035
+ .aup-editor-highlight code { background: transparent !important; padding: 0 !important; font-size: inherit; line-height: inherit; }
1036
+ .aup-editor-statusbar { display: flex; justify-content: space-between; padding: 4px 10px; font-size: 0.75em; color: var(--dim); border-top: 1px solid var(--border); background: var(--surface); }
1037
+ .aup-editor-gutter { position: absolute; left: 0; top: 0; bottom: 0; width: 40px; padding: 12px 4px; text-align: right; font-family: "JetBrains Mono", monospace; font-size: 13px; line-height: 1.6; color: var(--dim); background: var(--surface); border-right: 1px solid var(--border); user-select: none; overflow: hidden; white-space: pre; }
1038
+ .aup-editor-area.has-gutter textarea { padding-left: 48px; }
1039
+ .aup-editor-area.has-gutter .aup-editor-highlight { padding-left: 48px; }
1040
+
1041
+ /* ── AUP Frame (sandboxed iframe page isolation) ── */
1042
+ .aup-frame { position: relative; width: 100%; min-height: 200px; flex: 1; border-radius: var(--radius-lg); overflow: hidden; background: var(--card-bg); border: var(--card-border); display: flex; flex-direction: column; }
1043
+ .aup-frame iframe { width: 100%; flex: 1; min-height: 200px; border: none; display: block; }
1044
+ .aup-frame[data-size-width] iframe { width: auto; }
1045
+ .aup-frame[data-size-height] iframe { min-height: 0; }
1046
+ .aup-frame-loading { position: absolute; inset: 0; z-index: 1; display: flex; align-items: center; justify-content: center; background: var(--surface); }
1047
+ .aup-frame-loading-bar { width: 120px; height: 4px; background: var(--border); border-radius: 2px; overflow: hidden; position: relative; }
1048
+ .aup-frame-loading-bar::after { content: ''; position: absolute; left: -40%; width: 40%; height: 100%; background: var(--accent); border-radius: 2px; animation: aup-frame-shimmer 1.2s ease-in-out infinite; }
1049
+ @keyframes aup-frame-shimmer { 0% { left: -40%; } 100% { left: 100%; } }
1050
+ .aup-frame-error { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; min-height: 200px; color: var(--dim); padding: 24px; text-align: center; }
1051
+ .aup-frame-error-icon { font-size: 2em; }
1052
+ .aup-frame-error-msg { font-size: 0.9em; }
1053
+ .aup-frame-retry { background: var(--accent); color: var(--bg); border: none; padding: 6px 16px; border-radius: var(--radius-md); cursor: pointer; font-family: var(--font); font-size: 0.85em; font-weight: 500; transition: all var(--transition); }
1054
+ .aup-frame-retry:hover { filter: brightness(1.15); }
1055
+
1056
+ /* ── AUP Device (nested AUP rendering surface) ── */
1057
+ .aup-device { position: relative; border: 1px solid var(--border); border-radius: var(--radius-md); min-height: 60px; }
1058
+ .aup-device[data-aup-device-sizing="fixed"] { overflow: hidden; }
1059
+ .aup-device[data-aup-device-sizing="fixed"] .aup-device-content { width: 100%; height: 100%; overflow: auto; }
1060
+ .aup-device[data-aup-device-sizing="fit"] .aup-device-content { width: 100%; }
1061
+ .aup-device-status { position: absolute; top: 6px; right: 6px; width: 8px; height: 8px; border-radius: 50%; background: var(--muted); z-index: 1; transition: background 0.3s; }
1062
+ .aup-device-status.connected { background: var(--success, #22c55e); }
1063
+ .aup-device-status.error { background: var(--error, #ef4444); }
1064
+ .aup-device-fallback { padding: 12px; background: var(--surface); border: 1px dashed var(--border); border-radius: var(--radius-sm); color: var(--muted); text-align: center; font-size: 0.85em; }
1065
+ .aup-device-breadcrumb { display: flex; align-items: center; gap: 2px; padding: 6px 12px; font-size: 12px; color: var(--dim); border-bottom: 1px solid var(--border); background: var(--surface); overflow-x: auto; white-space: nowrap; }
1066
+ .aup-device-breadcrumb-sep { opacity: 0.4; margin: 0 2px; }
1067
+ .aup-device-breadcrumb-seg { cursor: pointer; color: var(--accent); transition: opacity var(--transition); }
1068
+ .aup-device-breadcrumb-seg:hover { opacity: 0.8; text-decoration: underline; }
1069
+ .aup-device-breadcrumb-cur { color: var(--text); font-weight: 500; }
1070
+
1071
+ /* ── AUP Device view selector (tabs / dropdown) ── */
1072
+ .aup-device-view-selector { display: flex; align-items: center; gap: 0; padding: 0 8px; border-bottom: 1px solid var(--border); background: var(--surface); font-size: 13px; overflow-x: auto; white-space: nowrap; }
1073
+ .aup-device-view-tab { padding: 6px 12px; cursor: pointer; color: var(--dim); border-bottom: 2px solid transparent; transition: color 0.2s, border-color 0.2s; user-select: none; }
1074
+ .aup-device-view-tab:hover { color: var(--text); }
1075
+ .aup-device-view-tab.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 500; }
1076
+ .aup-device-view-dropdown { padding: 4px 8px; margin: 4px 8px; font-size: 13px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); color: var(--text); cursor: pointer; }
1077
+ .aup-device-view-dropdown:focus { outline: 2px solid var(--accent); outline-offset: -1px; }
1078
+
1079
+ /* ── AUP src binding: loading skeleton & error banner ── */
1080
+ .aup-src-loading { display: flex; align-items: center; justify-content: center; padding: 16px; }
1081
+ .aup-src-loading-bar { width: 120px; height: 4px; background: var(--border); border-radius: 2px; overflow: hidden; position: relative; }
1082
+ .aup-src-loading-bar::after { content: ''; position: absolute; left: -40%; width: 40%; height: 100%; background: var(--accent); border-radius: 2px; animation: aup-frame-shimmer 1.2s ease-in-out infinite; }
1083
+ .aup-src-error { padding: 8px 12px; background: var(--error-bg, rgba(220,38,38,0.1)); color: var(--error, #ef4444); font-size: 0.85em; border-radius: var(--radius-sm); margin: 4px 0; }
1084
+
1085
+ /* ── AUP Canvas Subsystem ── */
1086
+ .aup-canvas { background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); overflow: hidden; display: flex; flex-direction: column; }
1087
+ .aup-canvas-toolbar { display: flex; gap: 4px; padding: 6px 10px; border-bottom: 1px solid var(--border); background: var(--surface); align-items: center; }
1088
+ .aup-canvas-toolbar button { background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 4px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.8em; transition: all var(--transition); }
1089
+ .aup-canvas-toolbar button:hover { border-color: var(--accent); color: var(--accent); }
1090
+ .aup-canvas-toolbar button.active { background: var(--accent-bg); border-color: var(--accent); color: var(--accent); }
1091
+ .aup-canvas-toolbar .separator { width: 1px; height: 18px; background: var(--border); }
1092
+ .aup-canvas-toolbar input[type="color"] { width: 28px; height: 28px; border: 1px solid var(--border); border-radius: var(--radius-sm); cursor: pointer; background: none; padding: 2px; }
1093
+ .aup-canvas-toolbar input[type="range"] { width: 60px; accent-color: var(--accent); }
1094
+ .aup-canvas-area { flex: 1; position: relative; }
1095
+ .aup-canvas-area canvas { display: block; cursor: crosshair; }
1096
+
1097
+ /* ── Entrance Animations ── */
1098
+ [data-animate] { opacity: 0; }
1099
+ [data-animate].aup-animated { animation-fill-mode: both; animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); }
1100
+ [data-animate="fade-in"].aup-animated { animation-name: aup-fade-in; animation-duration: 600ms; }
1101
+ [data-animate="slide-up"].aup-animated { animation-name: aup-slide-up; animation-duration: 700ms; }
1102
+ [data-animate="slide-down"].aup-animated { animation-name: aup-slide-down; animation-duration: 700ms; }
1103
+ [data-animate="slide-left"].aup-animated { animation-name: aup-slide-left; animation-duration: 700ms; }
1104
+ [data-animate="zoom-in"].aup-animated { animation-name: aup-zoom-in; animation-duration: 600ms; }
1105
+ [data-animate="blur-in"].aup-animated { animation-name: aup-blur-in; animation-duration: 800ms; }
1106
+ [data-animate="scale-card"].aup-animated { animation-name: aup-scale-card; animation-duration: 500ms; }
1107
+ [data-animate="count-up"].aup-animated { animation-name: aup-fade-in; animation-duration: 600ms; }
1108
+
1109
+ @keyframes aup-fade-in { from { opacity: 0; } to { opacity: 1; } }
1110
+ @keyframes aup-slide-up { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
1111
+ @keyframes aup-slide-down { from { opacity: 0; transform: translateY(-24px); } to { opacity: 1; transform: translateY(0); } }
1112
+ @keyframes aup-slide-left { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: translateX(0); } }
1113
+ @keyframes aup-zoom-in { from { opacity: 0; transform: scale(0.85); } to { opacity: 1; transform: scale(1); } }
1114
+ @keyframes aup-blur-in { from { opacity: 0; filter: blur(8px); transform: scale(0.97); } to { opacity: 1; filter: blur(0); transform: scale(1); } }
1115
+ @keyframes aup-scale-card { from { opacity: 0; transform: scale(0.92) translateY(8px); } to { opacity: 1; transform: scale(1) translateY(0); } }
1116
+
1117
+ /* ── Background video ── */
1118
+ .aup-bg-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; pointer-events: none; }
1119
+ .aup-view:has(.aup-bg-video) > *:not(.aup-bg-video) { position: relative; z-index: 1; }
1120
+
1121
+ /* ── Audio ── */
1122
+ .aup-media audio { width: 100%; max-width: 400px; }
1123
+
1124
+ /* ── Chrome toolbar (floating bottom-right: locale + theme) ── */
1125
+ #chrome-toolbar { position: fixed; bottom: 20px; right: 20px; z-index: 2000; display: none; align-items: stretch; gap: 12px; padding: 12px 18px; background: color-mix(in srgb, var(--surface) 96%, transparent); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: 0 4px 24px rgba(0,0,0,0.25), 0 0 0 1px rgba(255,255,255,0.05); }
1126
+ #chrome-toolbar.visible { display: flex; }
1127
+ #chrome-toolbar .toolbar-group { display: flex; flex-direction: column; gap: 2px; }
1128
+ #chrome-toolbar .toolbar-label { font-size: 9px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--dim); font-family: var(--font); }
1129
+ #chrome-toolbar select { background: var(--bg); border: 1px solid var(--border); color: var(--text); font-family: var(--font); font-size: 14px; padding: 6px 12px; border-radius: var(--radius-md); cursor: pointer; outline: none; transition: all var(--transition); min-width: 90px; }
1130
+ #chrome-toolbar select:hover { border-color: var(--accent); color: var(--accent); }
1131
+ a.aup-action { text-decoration: none; display: inline-block; }
1132
+ a.aup-action[data-variant="active"] { background: var(--accent); border-color: var(--accent); color: var(--bg); }
1133
+ /* ── Focus ring ── */
1134
+ .aup-action:focus-visible, .aup-input input:focus-visible, .aup-input select:focus-visible, .aup-input textarea:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 15%, transparent); }
1135
+
1136
+ /* ══════════════════════════════════════════════════
1137
+ AFS List Primitive
1138
+ Two dimensions: layout (spatial) × itemStyle (per-item)
1139
+ ══════════════════════════════════════════════════ */
1140
+ .aup-list { display: flex; flex-direction: column; height: 100%; overflow: hidden; font-family: var(--font); color: var(--text); }
1141
+
1142
+ .aup-list-loading { padding: 16px; color: var(--dim); font-size: 13px; text-align: center; }
1143
+ .aup-list-empty { padding: 24px 16px; color: var(--dim); font-size: 13px; text-align: center; }
1144
+ .aup-list-load-more { padding: 12px 16px; text-align: center; color: var(--accent); cursor: pointer; font-size: 12px; border-top: 1px solid var(--border); }
1145
+ .aup-list-load-more:hover { background: color-mix(in srgb, var(--accent) 8%, transparent); }
1146
+ .aup-list-virtual-spacer { flex-shrink: 0; }
1147
+ .aup-list-virtual-content { flex-shrink: 0; }
1148
+ .aup-list-template-item { cursor: pointer; }
1149
+ .aup-list-template-header { flex-shrink: 0; }
1150
+
1151
+ /* ── Search ── */
1152
+ .aup-list-search { padding: 6px 8px; border-bottom: 1px solid var(--border); flex-shrink: 0; }
1153
+ .aup-list-search-input { width: 100%; padding: 5px 10px; font-size: 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--bg) 80%, var(--surface)); color: var(--text); outline: none; font-family: var(--font); }
1154
+ .aup-list-search-input:focus { border-color: var(--accent); }
1155
+ .aup-list-search-input::placeholder { color: var(--dim); }
1156
+
1157
+ /* ── Breadcrumb ── */
1158
+ .aup-list-breadcrumb { display: flex; align-items: center; gap: 2px; padding: 8px 12px; font-size: 12px; color: var(--dim); border-bottom: 1px solid var(--border); flex-shrink: 0; overflow-x: auto; white-space: nowrap; }
1159
+ .aup-list-breadcrumb-sep { opacity: 0.4; margin: 0 2px; }
1160
+ .aup-list-breadcrumb-seg { cursor: pointer; color: var(--accent); transition: opacity var(--transition); }
1161
+ .aup-list-breadcrumb-seg:hover { opacity: 0.8; text-decoration: underline; }
1162
+ .aup-list-breadcrumb-cur { color: var(--text); font-weight: 500; }
1163
+
1164
+ /* ── Body — layout dimension ── */
1165
+ .aup-list-body { display: flex; flex-direction: column; overflow-y: auto; flex: 1; min-height: 0; }
1166
+
1167
+ /* Layout: list (default) */
1168
+ .aup-list[data-layout="list"] .aup-list-body { gap: 1px; }
1169
+
1170
+ /* Layout: grid */
1171
+ .aup-list[data-layout="grid"] .aup-list-body {
1172
+ display: grid;
1173
+ grid-template-columns: repeat(var(--list-cols, 3), 1fr);
1174
+ gap: 12px; padding: 12px;
1175
+ }
1176
+ .aup-list[data-layout="grid"][data-auto-fill] .aup-list-body {
1177
+ grid-template-columns: repeat(auto-fill, minmax(var(--list-min-width, 200px), 1fr));
1178
+ }
1179
+ @media (max-width: 600px) {
1180
+ .aup-list[data-layout="grid"]:not([data-auto-fill]) .aup-list-body { grid-template-columns: repeat(2, 1fr); gap: 8px; padding: 8px; }
1181
+ }
1182
+
1183
+ /* Layout: masonry — CSS columns */
1184
+ .aup-list[data-layout="masonry"] .aup-list-body {
1185
+ display: block; column-count: var(--list-cols, 3); column-gap: 12px; padding: 12px;
1186
+ }
1187
+ .aup-list[data-layout="masonry"] .aup-list-body > * { break-inside: avoid; margin-bottom: 12px; }
1188
+ .aup-list[data-layout="masonry"] .aup-list-media { aspect-ratio: auto; }
1189
+ .aup-list[data-layout="masonry"] .aup-list-media-img { width: 100%; height: auto; object-fit: contain; }
1190
+ @media (max-width: 600px) {
1191
+ .aup-list[data-layout="masonry"] .aup-list-body { column-count: 2; }
1192
+ }
1193
+
1194
+ /* Layout: slideshow */
1195
+ .aup-list[data-layout="slideshow"] .aup-list-body { position: relative; overflow: hidden; }
1196
+ .aup-list-slideshow-nav { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 8px; border-top: 1px solid var(--border); flex-shrink: 0; }
1197
+ .aup-list-slide-btn { background: none; border: 1px solid var(--border); color: var(--text); width: 32px; height: 32px; border-radius: var(--radius-sm); cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; transition: background var(--transition); }
1198
+ .aup-list-slide-btn:hover { background: color-mix(in srgb, var(--accent) 10%, transparent); }
1199
+ .aup-list-slide-counter { font-size: 12px; color: var(--dim); min-width: 48px; text-align: center; }
1200
+
1201
+ /* ── Item Style: row (default) ── */
1202
+ .aup-list-row { display: flex; align-items: center; gap: 8px; padding: 6px 12px; cursor: pointer; transition: background var(--transition); border-radius: var(--radius-sm); margin: 0 4px; }
1203
+ .aup-list-row:hover { background: color-mix(in srgb, var(--accent) 8%, transparent); }
1204
+ .aup-list-row[data-selected="true"] { background: color-mix(in srgb, var(--accent) 15%, transparent); }
1205
+ .aup-list-row[data-selected="true"] .aup-list-label { color: var(--accent); }
1206
+
1207
+ /* ── Item Style: card ── */
1208
+ .aup-list-card { display: flex; flex-direction: column; border: var(--card-border); border-radius: var(--radius-md); background: var(--card-bg); box-shadow: var(--card-shadow); overflow: hidden; cursor: pointer; transition: box-shadow var(--transition), transform var(--transition); }
1209
+ .aup-list-card:hover { box-shadow: var(--card-shadow-hover); transform: translateY(-2px); }
1210
+ .aup-list-card[data-selected="true"] { outline: 2px solid var(--accent); outline-offset: -2px; }
1211
+ .aup-list-card-image { height: 140px; background-size: cover; background-position: center; background-repeat: no-repeat; background-color: color-mix(in srgb, var(--surface) 80%, var(--border)); }
1212
+ .aup-list-card-avatar-area { display: flex; align-items: center; justify-content: center; padding: 20px 0 8px; background: color-mix(in srgb, var(--surface) 80%, var(--border)); }
1213
+ .aup-list-card-avatar { width: 80px; height: 80px; border-radius: 50%; background-size: cover; background-position: center; background-repeat: no-repeat; box-shadow: 0 2px 8px rgba(0,0,0,0.12); }
1214
+ .aup-list-card-icon-area { height: 80px; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--surface) 80%, var(--border)); color: var(--dim); }
1215
+ .aup-list-card-icon-area .aup-icon-svg { width: 32px; height: 32px; }
1216
+ .aup-list-card-body { padding: 10px 12px; display: flex; flex-direction: column; gap: 4px; }
1217
+ .aup-list-card-title { font-size: 13px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1218
+ .aup-list-card-desc { font-size: 11px; color: var(--dim); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1219
+
1220
+ /* ── Item Style: compact ── */
1221
+ .aup-list-compact { display: flex; align-items: center; gap: 6px; padding: 3px 8px; cursor: pointer; font-size: 12px; transition: background var(--transition); border-radius: var(--radius-sm); }
1222
+ .aup-list-compact:hover { background: color-mix(in srgb, var(--accent) 8%, transparent); }
1223
+ .aup-list-compact[data-selected="true"] { background: color-mix(in srgb, var(--accent) 15%, transparent); }
1224
+ .aup-list-compact .aup-list-icon { width: 14px; height: 14px; }
1225
+ .aup-list-compact .aup-icon-svg { width: 12px; height: 12px; }
1226
+
1227
+ /* ── Item Style: media ── */
1228
+ .aup-list-media { position: relative; border-radius: var(--radius-md); overflow: hidden; cursor: pointer; aspect-ratio: 4/3; }
1229
+ .aup-list-media:hover .aup-list-media-overlay { opacity: 1; }
1230
+ .aup-list-media[data-selected="true"] { outline: 2px solid var(--accent); outline-offset: -2px; }
1231
+ .aup-list-media-img { width: 100%; height: 100%; object-fit: cover; display: block; }
1232
+ .aup-list-media-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--surface) 70%, var(--border)); color: var(--dim); }
1233
+ .aup-list-media-placeholder .aup-icon-svg { width: 40px; height: 40px; }
1234
+ .aup-list-media-overlay { position: absolute; bottom: 0; left: 0; right: 0; padding: 8px 10px; background: linear-gradient(transparent, rgba(0,0,0,0.7)); opacity: 0; transition: opacity var(--transition); }
1235
+ .aup-list-media-title { font-size: 12px; font-weight: 600; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,0.5); }
1236
+ .aup-list-media-subtitle { font-size: 11px; color: rgba(255,255,255,0.75); margin-top: 2px; }
1237
+ .aup-list-media-footer { font-size: 10px; color: rgba(255,255,255,0.6); margin-top: 4px; }
1238
+
1239
+ /* ── Item Style: hero ── */
1240
+ .aup-list-hero { position: relative; min-height: 200px; border-radius: var(--radius-lg); overflow: hidden; cursor: pointer; background-size: cover; background-position: center; background-color: color-mix(in srgb, var(--surface) 70%, var(--border)); display: flex; align-items: flex-end; }
1241
+ .aup-list-hero:hover { opacity: 0.95; }
1242
+ .aup-list-hero[data-selected="true"] { outline: 3px solid var(--accent); outline-offset: -3px; }
1243
+ .aup-list-hero-content { width: 100%; padding: 20px 24px; background: linear-gradient(transparent 0%, rgba(0,0,0,0.6) 60%, rgba(0,0,0,0.85)); }
1244
+ .aup-list-hero-title { font-size: 18px; font-weight: 700; color: #fff; text-shadow: 0 1px 3px rgba(0,0,0,0.5); }
1245
+ .aup-list-hero-desc { font-size: 13px; color: rgba(255,255,255,0.8); margin-top: 4px; }
1246
+ .aup-list-hero-footer { font-size: 11px; color: rgba(255,255,255,0.6); margin-top: 6px; }
1247
+
1248
+ /* ── Item Style: card footer ── */
1249
+ .aup-list-card-footer { font-size: 11px; color: var(--dim); margin-top: 6px; padding-top: 6px; border-top: 1px solid color-mix(in srgb, var(--border) 40%, transparent); }
1250
+
1251
+ /* ── Shared sub-elements ── */
1252
+ .aup-list-icon { flex-shrink: 0; width: 18px; height: 18px; display: flex; align-items: center; justify-content: center; color: var(--dim); }
1253
+ .aup-list-icon .aup-icon-svg { width: 16px; height: 16px; }
1254
+ .aup-list-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
1255
+ .aup-list-label { font-size: 13px; font-weight: 500; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1256
+ .aup-list-desc { font-size: 11px; color: var(--dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1257
+ .aup-list-badge { flex-shrink: 0; font-size: 11px; padding: 1px 6px; border-radius: var(--radius-sm); background: color-mix(in srgb, var(--dim) 15%, transparent); color: var(--dim); font-weight: 500; }
1258
+ .aup-list-chevron { flex-shrink: 0; width: 14px; font-size: 10px; color: var(--dim); user-select: none; }
1259
+
1260
+ /* ── Grouped children ── */
1261
+ .aup-list-children { padding-left: 16px; display: none; border-left: 1px solid color-mix(in srgb, var(--border) 50%, transparent); margin-left: 6px; }
1262
+ .aup-list-children[data-expanded="true"] { display: block; }
1263
+
1264
+ /* ── Table layout ── */
1265
+ .aup-list-table { width: 100%; border-collapse: collapse; font-size: 13px; }
1266
+ .aup-list-table th { text-align: left; padding: 6px 12px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--dim); border-bottom: 1px solid var(--border); position: sticky; top: 0; background: var(--bg); }
1267
+ .aup-list-table td { padding: 5px 12px; border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent); color: var(--text); }
1268
+ .aup-list-table-row { cursor: pointer; transition: background var(--transition); }
1269
+ .aup-list-table-row:hover { background: color-mix(in srgb, var(--accent) 8%, transparent); }
1270
+ .aup-list-table-row[data-selected="true"] { background: color-mix(in srgb, var(--accent) 15%, transparent); }
1271
+ .aup-list-table-expand { cursor: pointer; user-select: none; }
1272
+
1273
+ /* ── Kind-specific ── */
1274
+ .aup-list-dir .aup-list-icon { color: var(--accent); }
1275
+ .aup-list-file .aup-list-icon { color: var(--dim); }
1276
+ .aup-list-group { font-weight: 600; }
1277
+ .aup-list-group .aup-list-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--dim); }
1278
+ .aup-list-group .aup-list-badge { background: color-mix(in srgb, var(--accent) 15%, transparent); color: var(--accent); }
1279
+
1280
+ /* Task status */
1281
+ .aup-list-task--ready .aup-list-badge { background: color-mix(in srgb, var(--success, #4ec9b0) 15%, transparent); color: var(--success, #4ec9b0); }
1282
+ .aup-list-task--in_progress .aup-list-badge { background: color-mix(in srgb, var(--accent) 15%, transparent); color: var(--accent); }
1283
+ .aup-list-task--review .aup-list-badge { background: color-mix(in srgb, var(--assistant-color, #59c2ff) 15%, transparent); color: var(--assistant-color, #59c2ff); }
1284
+ .aup-list-task--blocked .aup-list-badge { background: color-mix(in srgb, var(--error, #ff6b6b) 15%, transparent); color: var(--error, #ff6b6b); }
1285
+ .aup-list-task--done .aup-list-badge { background: color-mix(in srgb, var(--dim) 10%, transparent); color: var(--dim); }
1286
+ .aup-list-task--done .aup-list-label { opacity: 0.6; }
1287
+ .aup-list-task--draft .aup-list-badge { background: color-mix(in srgb, var(--dim) 15%, transparent); color: var(--dim); }
1288
+ .aup-list-queue .aup-list-icon { color: var(--assistant-color, #59c2ff); }
1289
+ .aup-list-daemon .aup-list-icon { color: var(--success, #4ec9b0); }
1290
+
1291
+ /* ════════════════════════════════════════════════════════
1292
+ WM — Window Manager (compositor layer)
1293
+ ════════════════════════════════════════════════════════ */
1294
+
1295
+ /* ── WM Container ── */
1296
+ .wm-container {
1297
+ position: relative;
1298
+ width: 100%;
1299
+ height: 100%;
1300
+ min-height: 100vh;
1301
+ overflow: hidden;
1302
+ }
1303
+
1304
+ /* ── WM Empty placeholder ── */
1305
+ .wm-empty {
1306
+ display: flex;
1307
+ align-items: center;
1308
+ justify-content: center;
1309
+ width: 100%;
1310
+ height: 100%;
1311
+ min-height: 200px;
1312
+ color: var(--dim);
1313
+ font-size: 0.9rem;
1314
+ }
1315
+
1316
+ /* ── WM Surface ── */
1317
+ .wm-surface {
1318
+ background: var(--surface);
1319
+ border: var(--card-border);
1320
+ border-radius: var(--radius-md);
1321
+ overflow: hidden;
1322
+ display: flex;
1323
+ flex-direction: column;
1324
+ }
1325
+ .wm-surface[data-active="true"] {
1326
+ box-shadow: 0 0 0 2px var(--accent);
1327
+ }
1328
+
1329
+ .wm-surface-content {
1330
+ flex: 1;
1331
+ overflow: auto;
1332
+ position: relative;
1333
+ }
1334
+
1335
+ /* ── Default Decorator: Title Bar ── */
1336
+ .wm-titlebar {
1337
+ display: flex;
1338
+ align-items: center;
1339
+ justify-content: space-between;
1340
+ height: 32px;
1341
+ padding: 0 8px;
1342
+ background: color-mix(in srgb, var(--bg) 90%, var(--accent) 10%);
1343
+ border-bottom: 1px solid var(--border);
1344
+ cursor: grab;
1345
+ user-select: none;
1346
+ -webkit-user-select: none;
1347
+ flex-shrink: 0;
1348
+ }
1349
+ .wm-titlebar:active { cursor: grabbing; }
1350
+
1351
+ .wm-title-text {
1352
+ font-size: 0.75rem;
1353
+ font-weight: 600;
1354
+ color: var(--text);
1355
+ overflow: hidden;
1356
+ text-overflow: ellipsis;
1357
+ white-space: nowrap;
1358
+ }
1359
+
1360
+ .wm-close-btn {
1361
+ background: none;
1362
+ border: none;
1363
+ color: var(--dim);
1364
+ cursor: pointer;
1365
+ font-size: 0.8rem;
1366
+ padding: 2px 6px;
1367
+ border-radius: var(--radius-sm);
1368
+ line-height: 1;
1369
+ }
1370
+ .wm-close-btn:hover {
1371
+ background: var(--error);
1372
+ color: #fff;
1373
+ }
1374
+
1375
+ /* ── Default Decorator: Resize Handle ── */
1376
+ .wm-resize-handle {
1377
+ position: absolute;
1378
+ bottom: 0;
1379
+ right: 0;
1380
+ width: 16px;
1381
+ height: 16px;
1382
+ cursor: se-resize;
1383
+ }
1384
+ .wm-resize-handle::after {
1385
+ content: "";
1386
+ position: absolute;
1387
+ bottom: 3px;
1388
+ right: 3px;
1389
+ width: 8px;
1390
+ height: 8px;
1391
+ border-right: 2px solid var(--dim);
1392
+ border-bottom: 2px solid var(--dim);
1393
+ opacity: 0.4;
1394
+ }
1395
+ .wm-surface:hover .wm-resize-handle::after {
1396
+ opacity: 0.8;
1397
+ }
1398
+
1399
+ /* ── Dock ── */
1400
+ .wm-dock {
1401
+ position: absolute;
1402
+ bottom: 0;
1403
+ left: 0;
1404
+ right: 0;
1405
+ display: flex;
1406
+ gap: 4px;
1407
+ padding: 4px 8px;
1408
+ background: color-mix(in srgb, var(--bg) 95%, transparent);
1409
+ border-top: 1px solid var(--border);
1410
+ overflow-x: auto;
1411
+ z-index: 9999;
1412
+ }
1413
+
1414
+ .wm-dock-item {
1415
+ padding: 4px 12px;
1416
+ background: var(--surface);
1417
+ border: 1px solid var(--border);
1418
+ border-radius: var(--radius-sm);
1419
+ font-size: 0.7rem;
1420
+ color: var(--text);
1421
+ cursor: pointer;
1422
+ white-space: nowrap;
1423
+ user-select: none;
1424
+ -webkit-user-select: none;
1425
+ }
1426
+ .wm-dock-item:hover {
1427
+ background: var(--accent-bg);
1428
+ border-color: var(--accent);
1429
+ }
1430
+
1431
+ /* ── Panels Strategy ── */
1432
+ .wm-panels {
1433
+ display: grid;
1434
+ width: 100%;
1435
+ height: 100%;
1436
+ /* grid-template-columns set dynamically by JS */
1437
+ /* grid-template-rows set dynamically by JS */
1438
+ gap: 0;
1439
+ background: var(--border);
1440
+ }
1441
+
1442
+ .wm-panel {
1443
+ background: var(--bg);
1444
+ overflow: hidden;
1445
+ display: flex;
1446
+ flex-direction: column;
1447
+ min-width: 0;
1448
+ min-height: 0;
1449
+ }
1450
+
1451
+ /* Full-width rows: header, footer, statusbar, dock */
1452
+ .wm-panel[data-wm-position="header"],
1453
+ .wm-panel[data-wm-position="footer"],
1454
+ .wm-panel[data-wm-position="statusbar"],
1455
+ .wm-panel[data-wm-position="dock"] {
1456
+ grid-column: 1 / -1;
1457
+ }
1458
+
1459
+ .wm-panel[data-wm-position="header"] {
1460
+ border-bottom: 1px solid var(--border);
1461
+ padding: 6px 12px;
1462
+ }
1463
+ .wm-panel[data-wm-position="footer"],
1464
+ .wm-panel[data-wm-position="statusbar"] {
1465
+ border-top: 1px solid var(--border);
1466
+ padding: 4px 12px;
1467
+ font-size: 0.75rem;
1468
+ color: var(--dim);
1469
+ }
1470
+ .wm-panel[data-wm-position="dock"] {
1471
+ border-top: 1px solid var(--border);
1472
+ padding: 4px 8px;
1473
+ flex-direction: row;
1474
+ gap: 4px;
1475
+ align-items: center;
1476
+ }
1477
+
1478
+ /* ── Panels Divider (draggable resize handle) ── */
1479
+ .wm-divider {
1480
+ width: 4px;
1481
+ cursor: col-resize;
1482
+ background: var(--border);
1483
+ transition: background 0.15s;
1484
+ flex-shrink: 0;
1485
+ position: relative;
1486
+ }
1487
+ .wm-divider:hover,
1488
+ .wm-divider.wm-divider-active {
1489
+ background: var(--accent);
1490
+ }
1491
+ .wm-divider::after {
1492
+ content: "";
1493
+ position: absolute;
1494
+ top: 0; bottom: 0;
1495
+ left: -4px; right: -4px;
1496
+ }
1497
+
1498
+ /* ── Responsive: narrow viewport collapses to single-column ── */
1499
+ .wm-responsive-tabs {
1500
+ display: none;
1501
+ grid-column: 1 / -1;
1502
+ gap: 0;
1503
+ background: var(--surface);
1504
+ border-bottom: 1px solid var(--border);
1505
+ overflow-x: auto;
1506
+ flex-shrink: 0;
1507
+ }
1508
+ .wm-responsive-tab {
1509
+ padding: 6px 14px;
1510
+ font-size: 0.75rem;
1511
+ color: var(--dim);
1512
+ cursor: pointer;
1513
+ border-bottom: 2px solid transparent;
1514
+ white-space: nowrap;
1515
+ user-select: none;
1516
+ -webkit-user-select: none;
1517
+ }
1518
+ .wm-responsive-tab:hover { color: var(--text); }
1519
+ .wm-responsive-tab[data-active="true"] {
1520
+ color: var(--accent);
1521
+ border-bottom-color: var(--accent);
1522
+ }
1523
+
1524
+ @media (max-width: 768px) {
1525
+ .wm-panels {
1526
+ grid-template-columns: 1fr !important;
1527
+ }
1528
+ .wm-panels > .wm-divider { display: none; }
1529
+ .wm-panel[data-wm-responsive-hidden="true"] { display: none !important; }
1530
+ .wm-responsive-tabs { display: flex; }
1531
+ }
1532
+
1533
+ /* ── Tabs (Phase 3) ── */
1534
+ .wm-tabs {
1535
+ display: flex;
1536
+ gap: 0;
1537
+ background: var(--bg);
1538
+ border-bottom: 1px solid var(--border);
1539
+ overflow-x: auto;
1540
+ flex-shrink: 0;
1541
+ }
1542
+
1543
+ .wm-tab {
1544
+ padding: 4px 12px;
1545
+ font-size: 0.7rem;
1546
+ color: var(--dim);
1547
+ cursor: pointer;
1548
+ border-bottom: 2px solid transparent;
1549
+ white-space: nowrap;
1550
+ user-select: none;
1551
+ -webkit-user-select: none;
1552
+ }
1553
+ .wm-tab:hover { color: var(--text); }
1554
+ .wm-tab[data-active="true"],
1555
+ .wm-tab.wm-tab-active {
1556
+ color: var(--accent);
1557
+ border-bottom-color: var(--accent);
1558
+ }
1559
+ .wm-tab {
1560
+ display: flex;
1561
+ align-items: center;
1562
+ gap: 4px;
1563
+ }
1564
+ .wm-tab-label {
1565
+ pointer-events: none;
1566
+ }
1567
+ .wm-tab-close {
1568
+ background: none;
1569
+ border: none;
1570
+ color: var(--dim);
1571
+ cursor: pointer;
1572
+ font-size: 0.6rem;
1573
+ padding: 0 2px;
1574
+ line-height: 1;
1575
+ opacity: 0;
1576
+ transition: opacity 0.15s;
1577
+ }
1578
+ .wm-tab:hover .wm-tab-close { opacity: 1; }
1579
+ .wm-tab-close:hover { color: var(--accent); }
1580
+
1581
+ /* ── Overlay Layer (Phase 4) ── */
1582
+ .wm-overlay {
1583
+ position: absolute;
1584
+ top: 0;
1585
+ left: 0;
1586
+ right: 0;
1587
+ bottom: 0;
1588
+ pointer-events: none;
1589
+ z-index: 100;
1590
+ }
1591
+ .wm-overlay > * {
1592
+ pointer-events: auto;
1593
+ }
1594
+ `;
1595
+ /**
1596
+ * Deck-specific CSS injected into Shadow DOM root.
1597
+ * Isolated from the main page — design tokens don't leak out.
1598
+ */
1599
+ const DECK_SHADOW_CSS = `
1600
+ /* ── Deck Layout ── */
1601
+ .aup-deck { position: relative; width: 100%; overflow: hidden; background: var(--deck-bg, var(--bg)); border-radius: var(--radius-lg, 12px); outline: none; color: var(--deck-text, var(--text, #fff)); font-family: var(--deck-font-body, var(--font, system-ui)); isolation: isolate; }
1602
+ .aup-deck[data-aspect="16-9"] { aspect-ratio: 16/9; }
1603
+ .aup-deck[data-aspect="4-3"] { aspect-ratio: 4/3; }
1604
+ .aup-deck:fullscreen { border-radius: 0; }
1605
+ .aup-deck[data-presentation="true"] { height: 100%; border-radius: 0; }
1606
+ .aup-deck[data-presentation="true"] .aup-deck-viewport { height: 100%; min-height: 100vh; }
1607
+ .aup-deck[data-presentation="true"] .aup-deck-slide > * { height: 100%; display: flex; flex-direction: column; justify-content: center; }
1608
+ .aup-deck[data-presentation="true"] .aup-deck-slide .aup-frame { flex: 1; }
1609
+ .aup-deck[data-presentation="true"] .aup-deck-slide { padding: 0; }
1610
+ .aup-deck[data-presentation="true"] .aup-deck-slide .aup-frame iframe { width: 100%; height: 100%; }
1611
+ .aup-deck-viewport { position: relative; width: 100%; height: 100%; min-height: 300px; }
1612
+ .aup-deck[data-aspect="16-9"] .aup-deck-viewport,
1613
+ .aup-deck[data-aspect="4-3"] .aup-deck-viewport { min-height: 0; height: 100%; }
1614
+ .aup-deck-slide { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: var(--deck-slide-padding, 40px); opacity: 0; pointer-events: none; transition: opacity var(--deck-transition-duration, 600ms) ease, transform var(--deck-transition-duration, 600ms) ease; }
1615
+ .aup-deck-slide > * { width: 100%; max-width: 100%; }
1616
+ .aup-deck-slide.active { opacity: 1; pointer-events: auto; z-index: 1; transform: none; }
1617
+
1618
+ /* Slide background — keep absolute positioning, just add isolation for ::before/::after */
1619
+ .aup-deck[data-slide-bg="gradient"] .aup-deck-slide { background: var(--deck-gradient, linear-gradient(135deg, var(--deck-bg), var(--deck-surface))); }
1620
+ .aup-deck[data-slide-bg="dots"] .aup-deck-slide::before { content: ''; position: absolute; inset: 0; background-image: radial-gradient(circle, color-mix(in srgb, var(--deck-text, #fff) 8%, transparent) 1px, transparent 1px); background-size: 24px 24px; pointer-events: none; }
1621
+ .aup-deck[data-slide-bg="grid"] .aup-deck-slide::before { content: ''; position: absolute; inset: 0; background-image: linear-gradient(color-mix(in srgb, var(--deck-text, #fff) 5%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--deck-text, #fff) 5%, transparent) 1px, transparent 1px); background-size: 40px 40px; pointer-events: none; }
1622
+ .aup-deck[data-slide-bg="noise"] .aup-deck-slide::after { content: ''; position: absolute; inset: 0; opacity: 0.03; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); pointer-events: none; }
1623
+ .aup-deck[data-slide-bg="aurora"] .aup-deck-slide::before { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse 60% 40% at 20% 30%, color-mix(in srgb, var(--deck-accent, #6366f1) 15%, transparent), transparent), radial-gradient(ellipse 50% 50% at 80% 60%, color-mix(in srgb, var(--deck-accent, #6366f1) 10%, transparent), transparent); animation: deck-aurora 8s ease-in-out infinite alternate; pointer-events: none; }
1624
+ @keyframes deck-aurora { from { opacity: 0.5; transform: scale(1) rotate(0deg); } to { opacity: 1; transform: scale(1.1) rotate(2deg); } }
1625
+
1626
+ /* Fade transition (default) */
1627
+ .aup-deck[data-transition="fade"] .aup-deck-slide.prev { opacity: 0; }
1628
+ /* Slide transition */
1629
+ .aup-deck[data-transition="slide"] .aup-deck-slide { transform: translateX(100%); }
1630
+ .aup-deck[data-transition="slide"] .aup-deck-slide.active { transform: translateX(0); }
1631
+ .aup-deck[data-transition="slide"] .aup-deck-slide.prev { transform: translateX(-100%); opacity: 1; }
1632
+ /* Zoom transition */
1633
+ .aup-deck[data-transition="zoom"] .aup-deck-slide { transform: scale(0.8); }
1634
+ .aup-deck[data-transition="zoom"] .aup-deck-slide.active { transform: scale(1); }
1635
+ .aup-deck[data-transition="zoom"] .aup-deck-slide.prev { transform: scale(1.2); opacity: 0; }
1636
+ /* None transition */
1637
+ .aup-deck[data-transition="none"] .aup-deck-slide { transition: none; }
1638
+
1639
+ /* Deck controls */
1640
+ .aup-deck-controls { position: absolute; inset: 0; z-index: 2; pointer-events: none; display: flex; align-items: center; justify-content: space-between; padding: 0 12px; }
1641
+ .aup-deck-prev, .aup-deck-next { pointer-events: auto; width: 40px; height: 40px; border-radius: 50%; border: none; background: color-mix(in srgb, var(--deck-bg, var(--bg)) 60%, transparent); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); color: var(--deck-text, var(--text)); cursor: pointer; display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.2s, background 0.2s; }
1642
+ .aup-deck-prev svg, .aup-deck-next svg { width: 20px; height: 20px; }
1643
+ .aup-deck:hover .aup-deck-prev, .aup-deck:hover .aup-deck-next { opacity: 0.7; }
1644
+ .aup-deck-prev:hover, .aup-deck-next:hover { opacity: 1 !important; background: color-mix(in srgb, var(--deck-bg, var(--bg)) 80%, transparent); }
1645
+
1646
+ /* Deck dots */
1647
+ .aup-deck-dots { position: absolute; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 2; display: flex; gap: 10px; }
1648
+ .aup-deck-dot { width: 12px; height: 12px; border-radius: 50%; border: none; background: color-mix(in srgb, var(--deck-text, var(--text)) 30%, transparent); cursor: pointer; padding: 0; transition: all 0.2s; }
1649
+ .aup-deck-dot.active { background: var(--deck-accent, var(--accent)); transform: scale(1.4); box-shadow: 0 0 8px var(--deck-accent-glow, var(--deck-accent, var(--accent))); }
1650
+ .aup-deck-dot:hover { background: color-mix(in srgb, var(--deck-text, var(--text)) 60%, transparent); }
1651
+
1652
+ /* Deck progress bar */
1653
+ .aup-deck-progress { position: absolute; bottom: 0; left: 0; right: 0; height: 3px; background: color-mix(in srgb, var(--deck-text, var(--text)) 10%, transparent); z-index: 2; }
1654
+ .aup-deck-progress-fill { height: 100%; background: var(--deck-accent, var(--accent)); transition: width 0.3s ease; }
1655
+
1656
+ /* Heading styles */
1657
+ .deck-heading-gradient h1, .deck-heading-gradient h2 { background: linear-gradient(135deg, var(--deck-text, #fff), var(--deck-accent, #6366f1)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
1658
+ .deck-heading-glow h1, .deck-heading-glow h2 { text-shadow: 0 0 40px var(--deck-accent-glow, rgba(99,102,241,0.4)), 0 0 80px var(--deck-accent-glow, rgba(99,102,241,0.4)); }
1659
+
1660
+ /* Card styles */
1661
+ .deck-card-glass .aup-view[data-mode="card"] { background: color-mix(in srgb, var(--deck-surface, #141414) 60%, transparent); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid color-mix(in srgb, var(--deck-text, #fff) 10%, transparent); border-radius: 16px; }
1662
+ .deck-card-neon .aup-view[data-mode="card"] { background: transparent; border: 1px solid var(--deck-accent, #6366f1); border-radius: 12px; box-shadow: 0 0 15px var(--deck-accent-glow, rgba(99,102,241,0.4)), inset 0 0 15px var(--deck-accent-glow, rgba(99,102,241,0.4)); }
1663
+ .deck-card-bordered .aup-view[data-mode="card"] { background: transparent; border: 1px solid var(--deck-accent, #6366f1); border-radius: 12px; }
1664
+
1665
+ /* Typography overrides */
1666
+ h1, h2, h3 { font-family: var(--deck-font-heading, var(--deck-font-body, inherit)); }
1667
+ h1 { font-size: var(--deck-heading-size, 3rem); }
1668
+ code, pre { font-family: var(--deck-font-mono, monospace); }
1669
+
1670
+ /* Entrance animations (duplicated from main CSS for shadow isolation) */
1671
+ [data-animate] { opacity: 0; }
1672
+ [data-animate].aup-animated { animation-fill-mode: both; animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); }
1673
+ [data-animate="fade-in"].aup-animated { animation-name: aup-fade-in; animation-duration: 600ms; }
1674
+ [data-animate="slide-up"].aup-animated { animation-name: aup-slide-up; animation-duration: 700ms; }
1675
+ [data-animate="slide-down"].aup-animated { animation-name: aup-slide-down; animation-duration: 700ms; }
1676
+ [data-animate="slide-left"].aup-animated { animation-name: aup-slide-left; animation-duration: 700ms; }
1677
+ [data-animate="zoom-in"].aup-animated { animation-name: aup-zoom-in; animation-duration: 600ms; }
1678
+ [data-animate="blur-in"].aup-animated { animation-name: aup-blur-in; animation-duration: 800ms; }
1679
+ [data-animate="scale-card"].aup-animated { animation-name: aup-scale-card; animation-duration: 500ms; }
1680
+ [data-animate="count-up"].aup-animated { animation-name: aup-fade-in; animation-duration: 600ms; }
1681
+ @keyframes aup-fade-in { from { opacity: 0; } to { opacity: 1; } }
1682
+ @keyframes aup-slide-up { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
1683
+ @keyframes aup-slide-down { from { opacity: 0; transform: translateY(-24px); } to { opacity: 1; transform: translateY(0); } }
1684
+ @keyframes aup-slide-left { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: translateX(0); } }
1685
+ @keyframes aup-zoom-in { from { opacity: 0; transform: scale(0.85); } to { opacity: 1; transform: scale(1); } }
1686
+ @keyframes aup-blur-in { from { opacity: 0; filter: blur(8px); transform: scale(0.97); } to { opacity: 1; filter: blur(0); transform: scale(1); } }
1687
+ @keyframes aup-scale-card { from { opacity: 0; transform: scale(0.92) translateY(8px); } to { opacity: 1; transform: scale(1) translateY(0); } }
1688
+
1689
+ /* ── AUP Scene Buffers (Stage-to-Live dual buffer) ── */
1690
+ .aup-buffer { position: absolute; inset: 0; width: 100%; height: 100%; overflow: auto; }
1691
+ .aup-buffer.staged { visibility: hidden; pointer-events: none; }
1692
+ .aup-buffer.active { visibility: visible; }
1693
+ .aup-buffer-hidden { display: none; }
1694
+ @keyframes aup-scene-fade-in { from { opacity: 0; } to { opacity: 1; } }
1695
+ `;
1696
+
1697
+ //#endregion
1698
+ exports.CSS = CSS;
1699
+ exports.DECK_SHADOW_CSS = DECK_SHADOW_CSS;