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