@rigel-cms/rigel 0.0.0-stage → 0.1.0-beta.1

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 (117) hide show
  1. package/LICENSE +203 -0
  2. package/README.md +8 -2
  3. package/package.json +78 -4
  4. package/src/article-body.ts +60 -0
  5. package/src/article-render.ts +87 -0
  6. package/src/config.ts +97 -0
  7. package/src/content.ts +5 -0
  8. package/src/editor/App.svelte +972 -0
  9. package/src/editor/assets/rigelcms-icon.png +0 -0
  10. package/src/editor/assets/sidebar/LICENSE +21 -0
  11. package/src/editor/assets/sidebar/book-open.svg +1 -0
  12. package/src/editor/assets/sidebar/calendar.svg +1 -0
  13. package/src/editor/assets/sidebar/chart-bar.svg +1 -0
  14. package/src/editor/assets/sidebar/file-text.svg +1 -0
  15. package/src/editor/assets/sidebar/files.svg +1 -0
  16. package/src/editor/assets/sidebar/folder.svg +1 -0
  17. package/src/editor/assets/sidebar/folders.svg +1 -0
  18. package/src/editor/assets/sidebar/gear.svg +1 -0
  19. package/src/editor/assets/sidebar/globe.svg +1 -0
  20. package/src/editor/assets/sidebar/heart.svg +1 -0
  21. package/src/editor/assets/sidebar/house.svg +1 -0
  22. package/src/editor/assets/sidebar/images.svg +1 -0
  23. package/src/editor/assets/sidebar/layout.svg +1 -0
  24. package/src/editor/assets/sidebar/list.svg +1 -0
  25. package/src/editor/assets/sidebar/magnifying-glass.svg +1 -0
  26. package/src/editor/assets/sidebar/megaphone.svg +1 -0
  27. package/src/editor/assets/sidebar/newspaper.svg +1 -0
  28. package/src/editor/assets/sidebar/pencil-simple.svg +1 -0
  29. package/src/editor/assets/sidebar/shopping-bag.svg +1 -0
  30. package/src/editor/assets/sidebar/sidebar-simple.svg +1 -0
  31. package/src/editor/assets/sidebar/square-half.svg +1 -0
  32. package/src/editor/assets/sidebar/squares-four.svg +1 -0
  33. package/src/editor/assets/sidebar/tag.svg +1 -0
  34. package/src/editor/assets/sidebar/user.svg +1 -0
  35. package/src/editor/assets/sidebar/users.svg +1 -0
  36. package/src/editor/blocks/bulleted-list.ts +2 -0
  37. package/src/editor/blocks/code.ts +1 -0
  38. package/src/editor/blocks/divider.ts +14 -0
  39. package/src/editor/blocks/h1.ts +2 -0
  40. package/src/editor/blocks/h2.ts +2 -0
  41. package/src/editor/blocks/h3.ts +2 -0
  42. package/src/editor/blocks/h4.ts +2 -0
  43. package/src/editor/blocks/h5.ts +2 -0
  44. package/src/editor/blocks/h6.ts +2 -0
  45. package/src/editor/blocks/image.ts +34 -0
  46. package/src/editor/blocks/index.ts +40 -0
  47. package/src/editor/blocks/numbered-list.ts +2 -0
  48. package/src/editor/blocks/paragraph.ts +1 -0
  49. package/src/editor/blocks/quote.ts +1 -0
  50. package/src/editor/blocks/table.ts +5 -0
  51. package/src/editor/lib/ActionDialog.svelte +51 -0
  52. package/src/editor/lib/BlockEditor.svelte +614 -0
  53. package/src/editor/lib/CollectionPanel.svelte +103 -0
  54. package/src/editor/lib/DatePicker.svelte +106 -0
  55. package/src/editor/lib/Field.svelte +80 -0
  56. package/src/editor/lib/Icon.svelte +34 -0
  57. package/src/editor/lib/ImagePicker.svelte +264 -0
  58. package/src/editor/lib/MarkdownEditor.svelte +206 -0
  59. package/src/editor/lib/MenuEditor.svelte +209 -0
  60. package/src/editor/lib/PropertiesTabs.svelte +15 -0
  61. package/src/editor/lib/ReferenceSelect.svelte +17 -0
  62. package/src/editor/lib/SchemaField.svelte +156 -0
  63. package/src/editor/lib/SchemaPanel.svelte +189 -0
  64. package/src/editor/lib/Select.svelte +138 -0
  65. package/src/editor/lib/SeoGuidance.svelte +21 -0
  66. package/src/editor/lib/Settings.svelte +183 -0
  67. package/src/editor/lib/Shortcuts.svelte +29 -0
  68. package/src/editor/lib/SidebarIcon.svelte +8 -0
  69. package/src/editor/lib/SitePreview.svelte +50 -0
  70. package/src/editor/lib/TopBar.svelte +165 -0
  71. package/src/editor/lib/UnsavedChanges.svelte +38 -0
  72. package/src/editor/lib/VisualEditor.svelte +494 -0
  73. package/src/editor/lib/calendar.ts +55 -0
  74. package/src/editor/lib/github-auth.ts +117 -0
  75. package/src/editor/lib/github-backend.ts +263 -0
  76. package/src/editor/lib/icons.ts +111 -0
  77. package/src/editor/lib/images.ts +195 -0
  78. package/src/editor/lib/markdown.ts +71 -0
  79. package/src/editor/lib/media-library.ts +39 -0
  80. package/src/editor/lib/menu-tree.ts +37 -0
  81. package/src/editor/lib/rich-markdown.ts +30 -0
  82. package/src/editor/lib/schema-edit.ts +110 -0
  83. package/src/editor/lib/settings.ts +103 -0
  84. package/src/editor/lib/slugify.ts +10 -0
  85. package/src/editor/lib/storage.ts +17 -0
  86. package/src/editor/lib/store.svelte.ts +33 -0
  87. package/src/editor/main.ts +9 -0
  88. package/src/editor/styles.css +1280 -0
  89. package/src/env.d.ts +22 -0
  90. package/src/index.ts +128 -0
  91. package/src/manifest/frontmatter.ts +56 -0
  92. package/src/manifest/loader.ts +14 -0
  93. package/src/manifest/menu.ts +46 -0
  94. package/src/manifest/navigation.ts +94 -0
  95. package/src/manifest/references.ts +39 -0
  96. package/src/manifest/seo.ts +15 -0
  97. package/src/manifest/types.ts +75 -0
  98. package/src/media-types.ts +21 -0
  99. package/src/preview-urls.ts +3 -0
  100. package/src/preview.ts +167 -0
  101. package/src/routes/local-api.ts +42 -0
  102. package/src/routes/local-documents.ts +83 -0
  103. package/src/routes/local-media.ts +124 -0
  104. package/src/routes/local-menu.ts +81 -0
  105. package/src/routes/local-post.ts +80 -0
  106. package/src/routes/manifest.json.ts +15 -0
  107. package/src/routes/media-files.ts +126 -0
  108. package/src/routes/media-validation.ts +37 -0
  109. package/src/routes/media.json.ts +12 -0
  110. package/src/routes/rigel-page.astro +25 -0
  111. package/src/routes/serialize.ts +139 -0
  112. package/src/schema/docs.ts +33 -0
  113. package/src/schema/paths.ts +136 -0
  114. package/src/schema/store.ts +141 -0
  115. package/src/schema/types.ts +81 -0
  116. package/src/schema/validate.ts +327 -0
  117. package/src/vite/manifest-plugin.ts +180 -0
@@ -0,0 +1,1280 @@
1
+ .rigel, .rigel *, .rigel *::before, .rigel *::after { box-sizing: border-box; }
2
+ .rigel {
3
+ --rigel-50: #EFFBFF;
4
+ --rigel-100: #D9F4FF;
5
+ --rigel-200: #ADE8FF;
6
+ --rigel-300: #72D8FF;
7
+ --rigel-400: #36BFFF;
8
+ --rigel-500: #079AF2;
9
+ --rigel-600: #0075CC;
10
+ --rigel-700: #005AA3;
11
+ --rigel-800: #084B85;
12
+ --rigel-900: #0C3E6B;
13
+ --rigel-950: #062644;
14
+ --space-50: #F8FAFC;
15
+ --space-100: #F1F5F9;
16
+ --space-200: #E2E8F0;
17
+ --space-300: #CBD5E1;
18
+ --space-400: #94A3B8;
19
+ --space-500: #64748B;
20
+ --space-600: #475569;
21
+ --space-700: #334155;
22
+ --space-800: #1E293B;
23
+ --space-900: #111C2E;
24
+ --space-950: #080F1C;
25
+ }
26
+
27
+ .rigel.connection-shell { align-items: center; justify-content: center; padding: 1.5rem; min-height: 100dvh; }
28
+ .rigel .connection-card { flex: none; width: 100%; max-width: 560px; margin: 0; padding: 2rem; background: var(--panel); border: 1px solid var(--border); overflow-wrap: anywhere; }
29
+ .rigel .connection-card h1 { margin: 1rem 0; font-size: 1.75rem; line-height: 1.2; }
30
+ .rigel .connection-card p { margin: 1rem 0; }
31
+ .rigel .connection-card :is(button, a.primary) { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0.625rem 1rem; font: inherit; text-decoration: none; text-align: center; }
32
+ .rigel .connection-actions { display: flex; flex-wrap: wrap; gap: 0.75rem; }
33
+ .rigel .connection-note { color: var(--text-muted); font-size: 0.8125rem; }
34
+ .rigel .connection-error { color: var(--danger); }
35
+ .rigel .github-session { margin-bottom: 1rem; padding: 1rem; border: 1px solid var(--border-control); background: var(--surface-raised); }
36
+ .rigel .github-session p { margin: 0 0 0.75rem; }
37
+ .rigel .github-reconnect { min-height: 44px; }
38
+ @media (max-width: 480px) { .rigel.connection-shell { padding: 1rem; } .rigel .connection-card { padding: 1.25rem; } }
39
+
40
+ /* Shell layout — applied only to the editor shell, not modal backdrops */
41
+ .rigel:not(.rigel-modal-backdrop) {
42
+ display: flex;
43
+ min-height: 100vh;
44
+ background: var(--background);
45
+ }
46
+
47
+ /* Tokens — both shell AND modal backdrops */
48
+ .rigel {
49
+ color-scheme: light;
50
+ --background: var(--space-50);
51
+ --surface: #FFFFFF;
52
+ --surface-raised: var(--space-100);
53
+ --text: var(--space-950);
54
+ --text-muted: var(--space-600);
55
+ --border-subtle: var(--space-300);
56
+ --border-control: var(--space-500);
57
+ --accent: var(--rigel-700);
58
+ --accent-hover: var(--rigel-800);
59
+ --accent-active: var(--rigel-900);
60
+ --on-accent: #FFFFFF;
61
+ --link: var(--rigel-800);
62
+ --accent-soft: var(--rigel-100);
63
+ --on-accent-soft: var(--rigel-900);
64
+ --focus-ring: var(--rigel-700);
65
+ --success: #166534;
66
+ --success-soft: #DCFCE7;
67
+ --warning: #92400E;
68
+ --warning-soft: #FEF3C7;
69
+ --danger: #991B1B;
70
+ --danger-soft: #FEE2E2;
71
+ --bg: var(--background);
72
+ --panel: var(--surface);
73
+ --border: var(--border-subtle);
74
+ --text-2: var(--text-muted);
75
+ --text-3: var(--text-muted);
76
+
77
+ --radius: 0;
78
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
79
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.08);
80
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.16);
81
+ --sidebar-w: 256px;
82
+
83
+ font: 14px/1.5 -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, sans-serif;
84
+ color: var(--text);
85
+ }
86
+
87
+ /* ── Sidebar rail ──────────────────────── */
88
+ .rigel > aside {
89
+ width: var(--sidebar-w);
90
+ flex-shrink: 0;
91
+ background: var(--panel);
92
+ border-right: 1px solid var(--border);
93
+ padding: 0;
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 0;
97
+ height: 100vh;
98
+ height: 100dvh;
99
+ box-sizing: border-box;
100
+ overflow: hidden;
101
+ position: sticky;
102
+ top: 0;
103
+ }
104
+ .rigel .rail-scroll {
105
+ flex: 1;
106
+ min-height: 0;
107
+ overflow-y: auto;
108
+ display: flex;
109
+ flex-direction: column;
110
+ border-top: 1px solid var(--border);
111
+ padding-block: 0.75rem;
112
+ }
113
+ .rigel .brand {
114
+ display: flex;
115
+ align-items: center;
116
+ gap: 0.5rem;
117
+ font-weight: 700;
118
+ font-size: 0.9375rem;
119
+ letter-spacing: -0.01em;
120
+ padding: 1rem 0.75rem;
121
+ color: var(--text);
122
+ text-decoration: none;
123
+ border-radius: 0;
124
+ cursor: pointer;
125
+ }
126
+ .rigel .brand:focus-visible {
127
+ outline: 3px solid var(--focus-ring);
128
+ outline-offset: 3px;
129
+ }
130
+ .rigel aside > button {
131
+ display: flex;
132
+ align-items: center;
133
+ width: 100%;
134
+ text-align: left;
135
+ padding: 0.4375rem 0.625rem;
136
+ border: none;
137
+ background: none;
138
+ border-radius: 0;
139
+ cursor: pointer;
140
+ font-size: 0.875rem;
141
+ color: var(--text-2);
142
+ transition: background 0.1s;
143
+ font-weight: 500;
144
+ flex-shrink: 0;
145
+ }
146
+ .rigel aside > button:hover { background: var(--surface-raised); color: var(--text); }
147
+ .rigel aside > button.active {
148
+ background: var(--accent-soft);
149
+ color: var(--on-accent-soft);
150
+ font-weight: 600;
151
+ }
152
+ .rigel .rail-scroll > button {
153
+ display: flex;
154
+ align-items: center;
155
+ width: calc(100% - 1.25rem);
156
+ text-align: left;
157
+ padding: 0.625rem 0.625rem;
158
+ margin: 0.25rem 0.625rem;
159
+ border: none;
160
+ background: none;
161
+ border-radius: 0;
162
+ cursor: pointer;
163
+ font-size: 0.875rem;
164
+ color: var(--text-2);
165
+ transition: background 0.1s;
166
+ font-weight: 500;
167
+ flex-shrink: 0;
168
+ }
169
+ .rigel .rail-scroll > button:hover { background: var(--surface-raised); color: var(--text); }
170
+ .rigel .sidebar-asset-icon { display: inline-block; width: 18px; height: 18px; flex-shrink: 0; background-color: currentColor; mask-image: var(--sidebar-icon); mask-position: center; mask-size: contain; mask-repeat: no-repeat; }
171
+ .rigel .rail-scroll > button { gap: 0.625rem; }
172
+ .rigel aside > button.sidebar-toggle { gap: 0.625rem; width: calc(100% - 1.5rem); margin: 0 0.75rem 0.5rem; padding: 0.625rem; font-size: 0.75rem; }
173
+ @media (min-width: 768px) {
174
+ .rigel.sidebar-collapsed { --sidebar-w: 64px; }
175
+ .rigel.sidebar-collapsed .brand { justify-content: center; padding-inline: 0.5rem; }
176
+ .rigel.sidebar-collapsed .brand > span,
177
+ .rigel.sidebar-collapsed .sidebar-label,
178
+ .rigel.sidebar-collapsed .search-trigger kbd,
179
+ .rigel.sidebar-collapsed .user-btn > .user-details,
180
+ .rigel.sidebar-collapsed .user-btn > .user-menu-icon { display: none; }
181
+ .rigel.sidebar-collapsed .rail-scroll > button,
182
+ .rigel.sidebar-collapsed .search-trigger,
183
+ .rigel.sidebar-collapsed .sidebar-toggle { justify-content: center; }
184
+ .rigel.sidebar-collapsed .sidebar-heading { height: 1px; font-size: 0; padding: 0; margin: 0.75rem 0.625rem; border-top: 1px solid var(--border-subtle); }
185
+ .rigel.sidebar-collapsed .aside-foot { padding: 0.75rem 0.5rem; }
186
+ .rigel.sidebar-collapsed .user-btn { padding: 0.25rem; justify-content: center; }
187
+ }
188
+ @media (max-width: 767px) {
189
+ .rigel aside > button.sidebar-toggle { display: none; }
190
+ }
191
+ @media (forced-colors: active) {
192
+ .rigel .sidebar-asset-icon { forced-color-adjust: none; background-color: CanvasText; }
193
+ }
194
+ .rigel .sidebar-heading { margin: 1.5rem 0 0.375rem; padding: 0 0.75rem; color: var(--text-3); font-size: 0.6875rem; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; flex-shrink: 0; }
195
+ .rigel .sidebar-separator { width: 100%; margin: 0.75rem 0; border: 0; border-top: 1px solid var(--border-subtle); flex-shrink: 0; }
196
+ .rigel .rail-scroll > button.active {
197
+ background: var(--accent-soft);
198
+ color: var(--on-accent-soft);
199
+ font-weight: 600;
200
+ }
201
+ .rigel .search-trigger {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 0.5rem;
205
+ width: calc(100% - 1.5rem);
206
+ padding: 0.4375rem 0.625rem;
207
+ margin: 0.25rem 0.75rem 1.5rem;
208
+ background: var(--bg);
209
+ border: 1px solid var(--border-control);
210
+ border-radius: 0;
211
+ color: var(--text-3);
212
+ font-size: 0.8125rem;
213
+ font-weight: 400;
214
+ cursor: pointer;
215
+ font-family: inherit;
216
+ }
217
+ .rigel .search-trigger:hover { border-color: var(--text-3); }
218
+ .rigel .search-trigger kbd {
219
+ margin-left: auto;
220
+ font: 600 0.6875rem ui-monospace, monospace;
221
+ background: var(--panel);
222
+ border: 1px solid var(--border);
223
+ border-radius: 0;
224
+ padding: 0.0625rem 0.3125rem;
225
+ color: var(--text-2);
226
+ }
227
+ .rigel .magnifier { font-size: 0.9375rem; }
228
+
229
+ .rigel .aside-foot {
230
+ margin-top: auto;
231
+ padding: 1rem 0.75rem;
232
+ border-top: 1px solid var(--border);
233
+ }
234
+ .rigel .user-menu-wrap { position: relative; }
235
+ .rigel .user-btn {
236
+ display: flex;
237
+ align-items: center;
238
+ gap: 0.5rem;
239
+ width: 100%;
240
+ padding: 0.4375rem 0.5rem;
241
+ border: none;
242
+ background: none;
243
+ border-radius: 0;
244
+ cursor: pointer;
245
+ font-size: 0.875rem;
246
+ font-weight: 500;
247
+ color: var(--text);
248
+ text-align: left;
249
+ }
250
+ .rigel .user-btn:hover { background: var(--surface-raised); }
251
+ .rigel .avatar {
252
+ width: 36px;
253
+ height: 36px;
254
+ border-radius: 50%;
255
+ border: 1px solid var(--border-control);
256
+ overflow: hidden;
257
+ background: var(--accent);
258
+ color: var(--on-accent);
259
+ font-size: 0.6875rem;
260
+ font-weight: 700;
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: center;
264
+ flex-shrink: 0;
265
+ }
266
+ .rigel .uname { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
267
+ .rigel .user-details { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 0.125rem; }
268
+ .rigel .user-details small { color: var(--text-muted); font-size: 0.75rem; font-weight: 400; }
269
+ .rigel .user-details strong, .rigel .user-details small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
270
+ .rigel .user-menu-icon { display: flex; align-items: center; color: var(--text-muted); }
271
+ .rigel aside:has(.user-menu) { overflow: visible; z-index: 30; }
272
+ .rigel .user-menu {
273
+ position: absolute;
274
+ bottom: 0;
275
+ left: calc(100% + 1rem);
276
+ width: 256px;
277
+ background: var(--panel);
278
+ border: 1px solid var(--border);
279
+ border-radius: 0;
280
+ box-shadow: var(--shadow-md);
281
+ padding: 0.25rem;
282
+ z-index: 10;
283
+ }
284
+ .rigel .user-menu button {
285
+ display: flex;
286
+ justify-content: flex-start;
287
+ align-items: center;
288
+ width: 100%;
289
+ padding: 0.4375rem 0.625rem;
290
+ border: none;
291
+ background: none;
292
+ border-radius: 0;
293
+ cursor: pointer;
294
+ font-size: 0.8125rem;
295
+ color: var(--text);
296
+ text-align: left;
297
+ font-weight: 500;
298
+ }
299
+ .rigel .user-menu button:hover:not(:disabled) { background: var(--surface-raised); }
300
+ .rigel .user-menu button.muted { color: var(--text-3); cursor: default; }
301
+ .rigel .user-menu .soon {
302
+ margin-left: auto;
303
+ font-size: 0.625rem;
304
+ background: var(--bg);
305
+ padding: 0.125rem 0.375rem;
306
+ border-radius: 0;
307
+ letter-spacing: 0.02em;
308
+ }
309
+ .rigel .user-menu-head {
310
+ display: flex; align-items: center; gap: 0.75rem;
311
+ padding: 0.4375rem 0.625rem;
312
+ font-size: 0.8125rem;
313
+ color: var(--text-2);
314
+ }
315
+ .rigel .user-menu-head strong { color: var(--text); }
316
+ .rigel .user-menu .divider {
317
+ height: 1px;
318
+ background: var(--border);
319
+ margin: 0.25rem 0;
320
+ }
321
+ .rigel .user-menu a {
322
+ display: flex;
323
+ align-items: center;
324
+ width: 100%;
325
+ padding: 0.4375rem 0.625rem;
326
+ font-size: 0.8125rem;
327
+ color: var(--text);
328
+ text-decoration: none;
329
+ border-radius: 0;
330
+ font-weight: 500;
331
+ box-sizing: border-box;
332
+ }
333
+ .rigel .user-menu a:hover { background: var(--surface-raised); }
334
+ @media (max-width: 600px) {
335
+ .rigel .user-menu { left: 0; bottom: calc(100% + 0.5rem); width: min(256px, calc(100vw - 2rem)); }
336
+ }
337
+ .rigel .rigel-modal table.keys { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
338
+ .rigel .rigel-modal table.keys td { padding: 0.5rem 0; border-bottom: 1px solid var(--border); }
339
+ .rigel .rigel-modal table.keys tr:last-child td { border-bottom: none; }
340
+ .rigel .rigel-modal table.keys kbd {
341
+ font: 600 0.75rem ui-monospace, monospace;
342
+ background: var(--bg);
343
+ border: 1px solid var(--border);
344
+ border-radius: 0;
345
+ padding: 0.1875rem 0.5rem;
346
+ }
347
+
348
+ /* ── Content column ────────────────────── */
349
+ .rigel .content.with-preview { display: grid; grid-template-columns: minmax(0, var(--editor-split)) 10px minmax(0, var(--preview-split)); align-items: start; }
350
+ .rigel .preview-divider { position: sticky; top: 0; height: 100dvh; cursor: col-resize; touch-action: none; background: var(--panel); border-inline: 1px solid var(--border); }
351
+ .rigel .preview-divider:hover, .rigel .preview-divider:focus-visible, .rigel .resizing-preview .preview-divider { background: var(--border-control); }
352
+ .rigel .preview-divider:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
353
+ .rigel .resizing-preview { cursor: col-resize; user-select: none; }
354
+ .rigel .resizing-preview iframe { pointer-events: none; }
355
+ .rigel .site-preview { position: sticky; top: 0; min-width: 0; height: 100dvh; display: flex; flex-direction: column; padding: 1.5rem 1rem; border-left: 1px solid var(--border); background: var(--panel); }
356
+ .rigel .preview-heading { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; margin-bottom: 1rem; }
357
+
358
+ .rigel .preview-heading span, .rigel .site-preview small { color: var(--text-muted); font-size: 0.75rem; }
359
+ .rigel .site-preview p { overflow-wrap: anywhere; font-size: 0.8125rem; }
360
+ .rigel .site-preview .preview-error { color: var(--danger); }
361
+ .rigel .site-preview iframe { flex: 1; width: 100%; min-height: 300px; border: 1px solid var(--border); background: white; }
362
+ .rigel .site-preview small { padding-top: 0.75rem; }
363
+ .rigel .preview-retry { align-self: start; }
364
+ @media (max-width: 1050px) {
365
+ .rigel .preview-divider { display: none; }
366
+ .rigel .content.with-preview { grid-template-columns: minmax(0, 1fr); }
367
+ .rigel .site-preview { position: static; height: 70dvh; border-left: 0; border-top: 1px solid var(--border); }
368
+ }
369
+ @media (max-width: 600px) {
370
+ .rigel:not(.rigel-modal-backdrop) { flex-direction: column; }
371
+ .rigel > aside { position: static; width: 100%; height: auto; }
372
+ .rigel .rail-scroll { flex-direction: row; flex-wrap: wrap; }
373
+ .rigel .sidebar-heading { flex-basis: 100%; margin-top: 0.75rem; }
374
+ .rigel .rail-scroll > button { width: auto; gap: 0.5rem; }
375
+ .rigel .aside-foot { padding: 0.5rem 0.75rem; }
376
+ .rigel main { padding: 1rem; width: 100%; }
377
+ .rigel section, .rigel .list-item { padding-inline: 0.75rem; min-width: 0; }
378
+ .rigel .markdown-editor button { max-width: 100%; overflow-wrap: anywhere; }
379
+ .rigel .image-field { flex-wrap: wrap; }
380
+ }
381
+ .rigel .content {
382
+ flex: 1;
383
+ min-width: 0;
384
+ display: flex;
385
+ flex-direction: column;
386
+ }
387
+ .rigel .titlebar { display: flex; align-items: center; flex-wrap: wrap; gap: 0.75rem 1.5rem; }
388
+ .rigel .titlebar h2 { min-width: 0; overflow-wrap: anywhere; }
389
+ .rigel .titlebar > button { flex-shrink: 0; }
390
+ .rigel .editor-actions { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; }
391
+ .rigel .editor-actions .back { display: flex; min-width: 0; margin: 0; }
392
+ .rigel .editor-actions .back button, .rigel .editor-actions .save-button { height: 2.25rem; padding: 0.5rem 0.75rem; border-width: 1px; border-style: solid; font-family: inherit; font-size: 0.8125rem; font-weight: 500; line-height: 1.25; }
393
+ .rigel .editor-actions .back button { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
394
+ .rigel .editor-actions .save-button { border-color: transparent; }
395
+ .rigel .editor-actions .save-actions { display: flex; align-items: center; gap: 0.75rem; margin-left: auto; flex-shrink: 0; }
396
+ .rigel .save-status {
397
+ font-size: 0.75rem;
398
+ color: var(--text-3);
399
+ min-width: 62px;
400
+ text-align: right;
401
+ }
402
+ .rigel .save-status.saving { color: var(--accent); }
403
+ .rigel .save-status.saved { color: var(--success); }
404
+ .rigel .save-status.dirty { color: var(--warning); }
405
+ .rigel .save-status.error { color: var(--danger); }
406
+ .rigel .save-toast { position: fixed; top: 1rem; left: 50%; transform: translateX(-50%); z-index: 150; display: flex; align-items: flex-start; gap: 0.75rem; width: min(42rem, calc(100% - 2rem)); padding: 1rem; border: 1px solid var(--danger); background: var(--panel); color: var(--text); box-shadow: var(--shadow-lg); }
407
+ .rigel .save-toast-content { flex: 1; min-width: 0; overflow-wrap: anywhere; }
408
+ .rigel .save-toast strong { color: var(--danger); font-size: 0.875rem; }
409
+ .rigel .save-toast p { margin: 0.375rem 0 0.75rem; font-size: 0.8125rem; }
410
+ .rigel .save-toast > .icon-btn { flex-shrink: 0; }
411
+ .rigel .icon-btn {
412
+ display: flex;
413
+ align-items: center;
414
+ justify-content: center;
415
+ width: 26px;
416
+ height: 26px;
417
+ border: 1px solid var(--border-control);
418
+ background: var(--panel);
419
+ border-radius: 0;
420
+ color: var(--text-2);
421
+ cursor: pointer;
422
+ }
423
+ .rigel .icon-btn:hover { color: var(--danger); border-color: var(--danger); background: var(--danger-soft); }
424
+
425
+ .rigel .user-menu button svg, .rigel .user-menu a svg { flex-shrink: 0; opacity: 0.65; }
426
+ .rigel .rigel-icon { display: block; flex-shrink: 0; }
427
+ .rigel .pico { display: flex; align-items: center; justify-content: center; }
428
+
429
+ .rigel .user-menu a, .rigel .user-menu button { gap: 0.5rem; }
430
+ .rigel main {
431
+ flex: 1;
432
+ padding: 1.5rem 1.75rem 4rem;
433
+ min-width: 0;
434
+ }
435
+ .rigel main.wide { max-width: 100%; }
436
+ .rigel .menu-details { max-width: 720px; }
437
+ .rigel main:not(.wide) { max-width: 720px; }
438
+
439
+ /* ── Buttons ───────────────────────────── */
440
+ .rigel .primary {
441
+ padding: 0.4375rem 1rem;
442
+ border: none;
443
+ border-radius: 0;
444
+ background: var(--accent);
445
+ color: var(--on-accent);
446
+ font-weight: 600;
447
+ font-size: 0.8125rem;
448
+ cursor: pointer;
449
+ box-shadow: var(--shadow-sm);
450
+ transition: background 0.1s, transform 0.05s;
451
+ }
452
+ .rigel .primary:hover:not(:disabled) { background: var(--accent-hover); }
453
+ .rigel .primary:active:not(:disabled) { background: var(--accent-active); transform: scale(0.98); }
454
+ .rigel .primary:disabled {
455
+ background: var(--surface-raised);
456
+ color: var(--text-3);
457
+ cursor: default;
458
+ box-shadow: none;
459
+ }
460
+ .rigel .danger-btn {
461
+ padding: 0.4375rem 0.875rem;
462
+ border: 1px solid var(--danger);
463
+ background: var(--panel);
464
+ color: var(--danger);
465
+ border-radius: 0;
466
+ font-weight: 600;
467
+ font-size: 0.8125rem;
468
+ cursor: pointer;
469
+ }
470
+ .rigel .danger-btn:hover { background: var(--danger-soft); }
471
+
472
+ /* ── Palette ───────────────────────────── */
473
+ .rigel aside:has(.palette-backdrop) { z-index: 100; }
474
+ .rigel .palette-backdrop {
475
+ position: fixed;
476
+ inset: 0;
477
+ background: color-mix(in srgb, var(--space-950) 30%, transparent);
478
+ backdrop-filter: blur(2px);
479
+ z-index: 100;
480
+ display: flex;
481
+ justify-content: center;
482
+ padding-top: 10dvh;
483
+ }
484
+ .rigel .palette {
485
+ background: var(--panel);
486
+ border: 1px solid var(--border-subtle);
487
+ border-radius: 0;
488
+ box-shadow: var(--shadow-lg);
489
+ width: min(640px, 92vw);
490
+ height: fit-content;
491
+ max-height: 75dvh;
492
+ display: flex;
493
+ flex-direction: column;
494
+ }
495
+ .rigel .palette-search {
496
+ display: flex;
497
+ align-items: center;
498
+ gap: 0.75rem;
499
+ padding: 1rem 1.25rem;
500
+ border-bottom: 1px solid var(--border-subtle);
501
+ color: var(--text-muted);
502
+ flex-shrink: 0;
503
+ }
504
+ .rigel .palette input[type="search"] {
505
+ flex: 1;
506
+ min-width: 0;
507
+ border: none;
508
+ border-radius: 0;
509
+ padding: 0.25rem 0;
510
+ font: inherit;
511
+ font-size: 1rem;
512
+ background: transparent;
513
+ color: var(--text);
514
+ }
515
+ .rigel .palette kbd {
516
+ font: 0.6875rem ui-monospace, monospace;
517
+ padding: 0.125rem 0.375rem;
518
+ border: 1px solid var(--border-subtle);
519
+ border-radius: 0;
520
+ background: var(--surface-raised);
521
+ color: var(--text-muted);
522
+ }
523
+ .rigel .palette ul { list-style: none; margin: 0; padding: 0.5rem; overflow-y: auto; min-height: 0; }
524
+ .rigel .palette li button {
525
+ display: flex;
526
+ flex-direction: column;
527
+ align-items: flex-start;
528
+ gap: 0.125rem;
529
+ width: 100%;
530
+ padding: 0.625rem 0.75rem;
531
+ border: none;
532
+ background: none;
533
+ border-radius: 0;
534
+ cursor: pointer;
535
+ font: inherit;
536
+ font-size: 0.9375rem;
537
+ font-weight: 500;
538
+ color: var(--text);
539
+ text-align: left;
540
+ overflow-wrap: anywhere;
541
+ transition: background 0.1s;
542
+ }
543
+ .rigel .palette input:focus-visible { outline: none; box-shadow: none; }
544
+ .rigel .palette-search:focus-within { border-bottom-color: var(--focus-ring); }
545
+ .rigel .palette li button[aria-selected="true"],
546
+ .rigel .palette li button:hover,
547
+ .rigel .palette li button:focus-visible { background: var(--accent-soft); color: var(--on-accent-soft); }
548
+ .rigel .palette .hint { color: var(--text-muted); font-size: 0.75rem; font-weight: 400; }
549
+ .rigel .palette li button[aria-selected="true"] .hint,
550
+ .rigel .palette li button:hover .hint,
551
+ .rigel .palette li button:focus-visible .hint { color: var(--on-accent-soft); }
552
+ .rigel .palette .empty { padding: 2rem 1rem; color: var(--text-muted); text-align: center; font-size: 0.875rem; }
553
+ .rigel .palette-footer {
554
+ display: flex;
555
+ flex-wrap: wrap;
556
+ gap: 1rem;
557
+ padding: 0.625rem 1rem;
558
+ border-top: 1px solid var(--border-subtle);
559
+ border-radius: 0;
560
+ background: var(--bg);
561
+ color: var(--text-muted);
562
+ font-size: 0.6875rem;
563
+ flex-shrink: 0;
564
+ }
565
+ .rigel .palette-footer span { display: inline-flex; align-items: center; gap: 0.375rem; }
566
+
567
+ /* ── Section cards / fields ────────────── */
568
+ .rigel section {
569
+ background: var(--panel);
570
+ border: 1px solid var(--border);
571
+ border-radius: 0;
572
+ padding: 1rem 1.25rem 1.25rem;
573
+ margin-top: 1rem;
574
+ box-shadow: var(--shadow-sm);
575
+ }
576
+ .rigel h2 { font-size: 1.25rem; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
577
+ .rigel h3 {
578
+ font-size: 0.6875rem;
579
+ font-weight: 700;
580
+ text-transform: uppercase;
581
+ letter-spacing: 0.07em;
582
+ color: var(--text-3);
583
+ margin: 0 0 0.25rem;
584
+ }
585
+ .rigel label { display: block; margin-top: 1rem; }
586
+ .rigel label > span {
587
+ display: block;
588
+ font-size: 0.75rem;
589
+ font-weight: 600;
590
+ color: var(--text-2);
591
+ margin-bottom: 0.375rem;
592
+ }
593
+ .rigel input[type="text"],
594
+ .rigel input[type="number"],
595
+ .rigel input[type="date"],
596
+ .rigel input[type="url"],
597
+ .rigel input[type="search"],
598
+ .rigel input[type="password"],
599
+
600
+ .rigel textarea {
601
+ width: 100%;
602
+ padding: 0.5rem 0.75rem;
603
+ border: 1px solid var(--border-control);
604
+ border-radius: 0;
605
+ font: inherit;
606
+ box-sizing: border-box;
607
+ background: var(--panel);
608
+ color: var(--text);
609
+ transition: border-color 0.1s, box-shadow 0.1s;
610
+ }
611
+ .rigel textarea { resize: vertical; }
612
+ .rigel input[type="number"] { appearance: textfield; }
613
+ .rigel input[type="number"]::-webkit-inner-spin-button,
614
+ .rigel input[type="number"]::-webkit-outer-spin-button { appearance: none; margin: 0; }
615
+ .rigel input:focus,
616
+ .rigel textarea:focus {
617
+ border-color: var(--accent);
618
+ }
619
+ .rigel input::placeholder, .rigel textarea::placeholder { color: var(--text-muted); opacity: 1; }
620
+ .rigel textarea.mono {
621
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
622
+ font-size: 0.8125rem;
623
+ line-height: 1.6;
624
+ }
625
+ .rigel label.inline { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; }
626
+ .rigel label.inline span { margin: 0; font-size: 0.875rem; }
627
+ .rigel label.inline input { width: 1rem; height: 1rem; margin: 0; flex-shrink: 0; accent-color: var(--accent); }
628
+
629
+ /* ── Lists ─────────────────────────────── */
630
+ .rigel .field-label { font-size: 0.75rem; font-weight: 600; color: var(--text-2); margin: 1rem 0 0.5rem; }
631
+ .rigel .list-item {
632
+ border: 1px solid var(--border);
633
+ border-radius: 0;
634
+ padding: 0.875rem 1rem 0.25rem;
635
+ margin-bottom: 0.5rem;
636
+ background: var(--bg);
637
+ }
638
+ .rigel .add, .rigel .remove {
639
+ border: none;
640
+ border-radius: 0;
641
+ padding: 0.375rem 0.75rem;
642
+ font-size: 0.8125rem;
643
+ font-weight: 500;
644
+ cursor: pointer;
645
+ margin-top: 0.25rem;
646
+ }
647
+ .rigel .add { background: var(--panel); border: 1px dashed var(--border-control); color: var(--text-2); }
648
+ .rigel .add:hover { border-color: var(--accent); color: var(--accent); }
649
+ .rigel .remove { background: none; color: var(--danger); padding-left: 0; opacity: 0.75; }
650
+ .rigel .remove:hover { opacity: 1; }
651
+
652
+ /* ── Table card ────────────────────────── */
653
+ .rigel .table-card {
654
+ background: var(--panel);
655
+ border: 1px solid var(--border);
656
+ border-radius: 0;
657
+ box-shadow: var(--shadow-sm);
658
+ overflow: hidden;
659
+ margin-top: 1.25rem;
660
+ }
661
+ .rigel table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 0.875rem; }
662
+ .rigel .thumbnail-column { width: 1%; }
663
+ .rigel .table-thumbnail { width: 32px; height: 32px; object-fit: cover; vertical-align: middle; }
664
+ .rigel .table-avatar-placeholder { display: inline-flex; align-items: center; justify-content: center; background: var(--surface-raised); color: var(--text-3); border: 1px solid var(--border-subtle); }
665
+ .rigel .table-sort, .rigel .table-link { background: none; border: none; padding: 0; color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; cursor: pointer; }
666
+
667
+ .rigel thead th {
668
+ background: var(--bg);
669
+ color: var(--text-3);
670
+ font-size: 0.6875rem;
671
+ font-weight: 700;
672
+ text-transform: uppercase;
673
+ letter-spacing: 0.06em;
674
+ text-align: left;
675
+ padding: 0.625rem 1rem;
676
+ border-bottom: 1px solid var(--border);
677
+ cursor: pointer;
678
+ user-select: none;
679
+ white-space: nowrap;
680
+ }
681
+ .rigel th:hover { color: var(--text-2); }
682
+ .rigel th .arrow { color: var(--accent); }
683
+ .rigel td { padding: 0.75rem 1rem; border-bottom: 1px solid var(--border-subtle); color: var(--text); }
684
+
685
+ .rigel tbody tr { cursor: pointer; transition: background 0.06s; }
686
+ .rigel tbody tr:last-child td { border-bottom: none; }
687
+ .rigel tbody tr:hover { background: var(--accent-soft); }
688
+
689
+ .rigel tbody tr:hover td { color: var(--on-accent-soft); }
690
+
691
+ /* ── Badges / misc — editor ────────────── */
692
+ .rigel .badge {
693
+ background: var(--warning-soft);
694
+ color: var(--warning);
695
+ font-size: 0.625rem;
696
+ font-weight: 700;
697
+ text-transform: uppercase;
698
+ letter-spacing: 0.04em;
699
+ padding: 0.1875rem 0.4375rem;
700
+ border-radius: 0;
701
+ }
702
+ .rigel .back { margin: 0 0 1rem; }
703
+ .rigel .back button {
704
+ background: transparent; border: 1px solid var(--border-control); padding: 0.5rem 0.75rem;
705
+ border-radius: 0; color: var(--text); font: inherit; font-size: 0.8125rem; font-weight: 500; cursor: pointer;
706
+ }
707
+ .rigel .back button:hover { background: var(--surface-raised); }
708
+
709
+ /* ── Image field ───────────────────────── */
710
+ .rigel .image-field { display: flex; align-items: center; gap: 0.75rem; }
711
+ .rigel .image-field .preview {
712
+ width: 132px; height: 76px; object-fit: cover;
713
+ border-radius: 0; border: 1px solid var(--border); box-shadow: var(--shadow-sm);
714
+ }
715
+ .rigel .image-field .preview.empty {
716
+ display: flex; align-items: center; justify-content: center;
717
+ color: var(--text-3); font-size: 0.75rem; background: var(--bg); box-shadow: none;
718
+ }
719
+ .rigel .image-field button {
720
+ padding: 0.4375rem 0.875rem; border: 1px solid var(--border-control); background: var(--panel);
721
+ border-radius: 0; cursor: pointer; font-size: 0.8125rem; font-weight: 500; color: var(--text);
722
+ box-shadow: var(--shadow-sm);
723
+ }
724
+
725
+ .rigel .seo-length { margin: 0.375rem 0 0.75rem; }
726
+ .rigel .seo-length-summary { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.25rem 0.75rem; margin: 0.375rem 0 0; font-size: 0.75rem; color: var(--text-muted); }
727
+ .rigel .seo-length-count { font-variant-numeric: tabular-nums; white-space: nowrap; }
728
+ .rigel .seo-length-track { height: 4px; overflow: hidden; background: var(--border-subtle); }
729
+ .rigel .seo-length-fill { display: block; height: 100%; background: var(--text-muted); }
730
+ .rigel .seo-length[data-tone="danger"] .seo-length-fill { background: var(--danger); }
731
+ .rigel .seo-length[data-tone="warning"] .seo-length-fill { background: var(--warning); }
732
+ .rigel .seo-length[data-tone="success"] .seo-length-fill { background: var(--success); }
733
+ .rigel .seo-fields .image-field { display: grid; grid-template-columns: max-content 1fr; width: 100%; max-width: 400px; }
734
+ .rigel .seo-fields .image-field .preview { grid-column: 1 / -1; width: 100%; height: auto; aspect-ratio: 1200 / 628; object-fit: cover; object-position: center; }
735
+ .rigel .seo-fields .image-field button { justify-self: start; }
736
+
737
+ /* ── Body editor ───────────────────────── */
738
+ .rigel .body-editor { border: 1px solid var(--border-control); border-radius: 0; margin-top: 0.5rem; }
739
+ .rigel .body-toolbar {
740
+ display: flex; gap: 0.25rem; padding: 0.375rem;
741
+ background: var(--bg); border-bottom: 1px solid var(--border);
742
+ }
743
+ .rigel:not(.rigel-inline) .block-editor > .body-toolbar:not(.image-toolbar) { position: sticky; top: 0; z-index: 2; }
744
+ .rigel :is(.body-toolbar, .format-group) > button {
745
+ padding: 0.3125rem 0.75rem; border: none; background: none; border-radius: 0;
746
+ font-size: 0.8125rem; font-weight: 500; color: var(--text-2); cursor: pointer;
747
+ }
748
+ .rigel :is(.body-toolbar, .format-group) > button.active { background: var(--panel); color: var(--text); box-shadow: var(--shadow-sm); }
749
+ .rigel .body-editor textarea { border: none; border-radius: 0; }
750
+ .rigel .body-editor textarea:focus { box-shadow: none; }
751
+ .rigel .markdown-heading { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem; padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--border-subtle); }
752
+ .rigel .markdown-heading .field-label { margin: 0; }
753
+ .rigel .markdown-modes { display: flex; gap: 2px; }
754
+ .rigel .markdown-modes button { border: 0; background: transparent; color: var(--text-2); padding: 0.25rem 0.5rem; font: inherit; font-size: 0.75rem; cursor: pointer; }
755
+ .rigel .markdown-modes button[aria-pressed=true] { background: var(--surface-raised); color: var(--text); }
756
+ .rigel .markdown-editor .formatting-toolbar { flex-wrap: wrap; align-items: center; gap: 0.25rem; padding: 0.375rem 0.5rem; background: var(--panel); }
757
+ .rigel .formatting-toolbar .format-group { display: flex; gap: 2px; border-left: 1px solid var(--border-subtle); padding-left: 0.25rem; }
758
+ .rigel :is(.formatting-toolbar, .format-group) > button { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; flex-shrink: 0; }
759
+ .rigel .formatting-toolbar .select-trigger { height: 32px; padding: 0.25rem 0.5rem; border: 0; }
760
+ .rigel :is(.formatting-toolbar, .format-group, .block-float) > button:hover:not(:disabled), .rigel .markdown-modes button:hover { background: var(--surface-raised); }
761
+ .rigel :is(.formatting-toolbar, .format-group) > button[aria-pressed=true] { background: var(--accent-soft); color: var(--on-accent-soft); }
762
+ .rigel :is(.formatting-toolbar, .format-group) > button:disabled { opacity: 0.35; cursor: default; }
763
+ .rigel .markdown-visual { position: relative; }
764
+ .rigel .markdown-link { position: absolute; left: 0.5rem; right: 0.5rem; z-index: 5; padding: 0.75rem; background: var(--panel); color: var(--text); border: 1px solid var(--border-control); border-radius: 0; box-shadow: var(--shadow-sm); }
765
+ .rigel .markdown-link > label { display: block; margin: 0 0 0.5rem; font-size: 0.75rem; font-weight: 500; line-height: 1.5; color: var(--text-2); }
766
+ .rigel .markdown-link-controls { display: flex; align-items: center; gap: 0.5rem; }
767
+ .rigel .markdown-link-controls input { flex: 1 1 0; min-width: 0; height: 32px; border-radius: 0; }
768
+ .rigel .markdown-link-controls button { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 32px; width: 32px; height: 32px; padding: 0; border: 1px solid var(--border-control); border-radius: 0; background: var(--panel); color: var(--text); cursor: pointer; }
769
+ .rigel .markdown-link-controls button:hover:not(:disabled) { background: var(--surface-raised); }
770
+ .rigel .markdown-link-controls button:disabled { opacity: 0.35; cursor: default; }
771
+ @media (pointer: coarse) { .rigel :is(.formatting-toolbar, .format-group) > button { width: 40px; height: 40px; } }
772
+ .rigel .markdown-warning { padding: 0 1rem; color: var(--text-2); }
773
+ .rigel .rich-text { padding: 0; }
774
+ .rigel .rich-text .ProseMirror { padding: 0.875rem 1rem; min-height: 220px; white-space: pre-wrap; overflow-wrap: anywhere; position: relative; }
775
+ .rigel .rich-text .ProseMirror:focus-visible { outline: 3px solid var(--accent); outline-offset: 3px; }
776
+ .rigel .rich-text .ProseMirror-selectednode { outline: 3px solid var(--accent); }
777
+ .rigel .rich-text .ProseMirror li { position: relative; }
778
+ .rigel .rich-text blockquote { margin-inline: 0; padding-left: 1rem; border-left: 3px solid var(--border-control); }
779
+
780
+ .rigel .md-preview { padding: 0.875rem 1rem; min-height: 220px; font-size: 0.9375rem; line-height: 1.65; }
781
+ .rigel .md-preview h1 { font-size: 1.5rem; margin: 0.75rem 0 0.375rem; }
782
+ .rigel .md-preview h2 { font-size: 1.25rem; margin: 0.75rem 0 0.375rem; }
783
+ .rigel .md-preview h3 { font-size: 1.0625rem; text-transform: none; letter-spacing: 0; color: var(--text); margin: 0.75rem 0 0.25rem; }
784
+ .rigel .md-preview p { margin: 0.5rem 0; }
785
+ .rigel .md-preview code { background: var(--bg); padding: 0.125rem 0.3125rem; border-radius: 0; font-size: 0.8125rem; }
786
+ .rigel .md-preview pre { background: var(--surface-raised); color: var(--text); padding: 0.875rem 1rem; border-radius: 0; overflow-x: auto; }
787
+ .rigel .md-preview pre code { background: none; padding: 0; color: inherit; }
788
+ .rigel .md-preview img { max-width: 100%; border-radius: 0; }
789
+ .rigel .md-preview a { color: var(--link); }
790
+
791
+ /* ── Modals (escape .rigel grid) ───────── */
792
+ .rigel-modal-backdrop.rigel {
793
+ position: fixed; inset: 0; background: color-mix(in srgb, var(--space-950) 45%, transparent);
794
+ backdrop-filter: blur(2px);
795
+ display: flex; align-items: center; justify-content: center; z-index: 200;
796
+ font: 14px/1.5 -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, sans-serif;
797
+ color: var(--text);
798
+ }
799
+ .rigel-modal-backdrop + .rigel-modal-backdrop { z-index: 201; }
800
+
801
+ .rigel-modal-backdrop.rigel:is(.action-dialog, .unsaved-dialog) {
802
+ align-items: flex-start;
803
+ padding-top: 10dvh;
804
+ }
805
+ .rigel-modal-backdrop:is(.action-dialog, .unsaved-dialog) .rigel-modal {
806
+ max-height: calc(90dvh - 1rem);
807
+ }
808
+
809
+ .rigel .rigel-modal, .rigel-modal {
810
+ background: var(--panel); border-radius: 0; padding: 1.25rem;
811
+ width: min(520px, 92vw); max-height: 92vh; overflow-y: auto; box-shadow: var(--shadow-lg);
812
+ }
813
+ .rigel .rigel-modal h2 { margin: 0 0 0.375rem; font-size: 1.0625rem; }
814
+ .rigel .media-library { width: 100%; min-width: 0; }
815
+ .rigel .outlined, .rigel .image-picker input::file-selector-button {
816
+ padding: 0.4375rem 0.875rem; border: 1px solid var(--border-control); border-radius: 0;
817
+ background: var(--panel); color: var(--text); font: inherit; font-size: 0.8125rem; cursor: pointer;
818
+ }
819
+ .rigel .outlined:hover:not(:disabled), .rigel .image-picker input::file-selector-button:hover { background: var(--surface-raised); }
820
+ .rigel .outlined:disabled, .rigel .image-picker .tabs button:disabled, .rigel .image-picker .thumb:disabled { opacity: 0.5; cursor: default; }
821
+ .rigel .image-picker input::file-selector-button { margin-right: 0.75rem; }
822
+ .rigel.image-dialog { width: 100%; height: 100%; max-width: none; max-height: none; margin: 0; padding: 1rem; border: none; }
823
+ .rigel.image-dialog:not([open]) { display: none; }
824
+ .rigel.image-dialog::backdrop { background: transparent; }
825
+ .rigel .image-picker { width: min(760px, 100%); }
826
+ .rigel .media-head, .rigel .media-tools, .rigel .media-actions { display: flex; align-items: center; gap: 0.75rem; }
827
+ .rigel .media-head { justify-content: space-between; margin: calc(1rem * -1) calc(1.25rem * -1) 0; padding: 1rem 1.25rem; border-bottom: 1px solid var(--border); }
828
+ .rigel .media-head h2 { margin: 0; font-size: 1rem; }
829
+ .rigel .media-tools { align-items: center; flex-wrap: wrap; gap: 0.5rem; padding: 0.75rem; border: 1px solid var(--border-control); background: var(--panel); }
830
+ .rigel .media-views { display: flex; flex-shrink: 0; margin-inline-end: 1rem; }
831
+ .rigel .media-views button { display: inline-flex; align-items: center; justify-content: center; padding-inline: 0.5rem; }
832
+ .rigel .media-views button + button { border-left: 0; }
833
+ .rigel .media-views button[aria-pressed=true] { background: var(--accent-soft); color: var(--on-accent-soft); }
834
+ .rigel .media-tools .media-select { position: relative; max-width: 100%; min-width: 0; }
835
+
836
+ .rigel .media-tools .media-search { width: 13rem; max-width: 100%; min-width: 0; margin: 0 0 0 auto; flex: 0 1 13rem; }
837
+ .rigel .media-table table { table-layout: fixed; }
838
+ .rigel .media-table th { cursor: default; white-space: normal; }
839
+ .rigel .media-table :is(th, td) { padding: 0.625rem; overflow-wrap: anywhere; }
840
+ .rigel .media-table th:first-child { width: 48%; }
841
+ .rigel .media-file { display: flex; align-items: center; gap: 0.625rem; text-align: left; width: 100%; }
842
+ .rigel .media-file img { width: 48px; height: 40px; object-fit: cover; flex-shrink: 0; }
843
+ .rigel .media-file-icon { display: flex; min-height: 120px; flex-direction: column; align-items: center; justify-content: center; gap: 0.75rem; padding: 1rem; color: var(--text-muted); overflow-wrap: anywhere; }
844
+ .rigel .media-file span { min-width: 0; overflow-wrap: anywhere; }
845
+ .rigel .media-file[aria-pressed=true] { color: var(--on-accent-soft); background: var(--accent-soft); }
846
+ .rigel :is(.image-picker, .media-library) .thumb[aria-pressed=true] { border-color: var(--accent); }
847
+ @media (max-width: 600px) {
848
+ .rigel .media-tools .media-search { flex: 1 1 100%; width: 100%; }
849
+ .rigel .media-table :is(th, td) { padding: 0.375rem; font-size: 0.75rem; }
850
+ .rigel .media-table th:first-child { width: 40%; }
851
+ .rigel .media-file { flex-direction: column; align-items: flex-start; }
852
+ }
853
+ .rigel .media-actions {
854
+ justify-content: flex-end; gap: 0.75rem;
855
+ margin-top: 1rem; padding-top: 0.75rem; border-top: 1px solid var(--border);
856
+ }
857
+ .rigel .media-selection { margin-top: 1rem; }
858
+ .rigel .media-preview > img { display: block; max-width: 100%; max-height: 300px; margin: 0 auto 1rem; }
859
+ .rigel .media-button-actions { display: flex; align-items: center; gap: 0.75rem; margin-left: auto; flex-shrink: 0; }
860
+ .rigel .media-actions.with-media-path { flex-wrap: wrap; }
861
+ .rigel .media-download { flex-shrink: 0; white-space: nowrap; text-decoration: none; }
862
+ .rigel .media-path { flex: 1; min-width: 0; margin: 0; padding: 0.5rem 0; overflow-x: auto; white-space: pre; font: 0.75rem/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; }
863
+ .rigel .media-path code { font: inherit; }
864
+ .rigel .media-path:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; }
865
+ .rigel .media-meta { border-top: 1px solid var(--border-subtle); padding-top: 0.5rem; }
866
+ .rigel .media-meta label { margin-top: 0.75rem; }
867
+ .rigel .media-details { min-width: 0; }
868
+ .rigel .image-picker:has(.media-editing) { width: min(1040px, 100%); }
869
+ .rigel .media-selection.media-editing { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); gap: 1.5rem; }
870
+ .rigel .media-editing .media-preview { min-width: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
871
+ .rigel .media-editing .media-preview > img { max-height: 60dvh; }
872
+ .rigel .media-editing .media-meta { border-top: 0; padding-top: 0; }
873
+ .rigel .media-editing .media-meta label:first-child { margin-top: 0; }
874
+ .rigel .media-editing > .media-actions { grid-column: 1 / -1; margin-top: 0; }
875
+ @media (max-width: 700px) {
876
+ .rigel .media-selection.media-editing { grid-template-columns: minmax(0, 1fr); }
877
+ .rigel .media-editing .media-preview > img { max-height: 35dvh; }
878
+ .rigel .with-media-path .media-button-actions { flex-basis: 100%; justify-content: flex-end; }
879
+ }
880
+ .rigel .image-picker input[type=file] { width: 100%; color: var(--text); }
881
+ .rigel .rigel-modal .tabs {
882
+ display: flex; flex-wrap: wrap; gap: 0.375rem; margin: 0.75rem 0 1rem;
883
+ padding: 0.25rem; background: var(--bg); border-radius: 0;
884
+ }
885
+ .rigel .rigel-modal .tabs button {
886
+ flex: 1; padding: 0.4375rem 0.875rem; border: none; background: transparent;
887
+ border-radius: 0; cursor: pointer; font-size: 0.8125rem; font-weight: 500;
888
+ color: var(--text-2); text-transform: capitalize;
889
+ }
890
+ .rigel .rigel-modal .tabs button:hover { color: var(--text); }
891
+ .rigel .rigel-modal .tabs button.active { background: var(--panel); color: var(--text); box-shadow: var(--shadow-sm); }
892
+ .rigel .rigel-modal .search-row { display: flex; gap: 0.5rem; }
893
+ .rigel .rigel-modal .search-row input { flex: 1; }
894
+ .rigel .rigel-modal .search-row button,
895
+ .rigel .rigel-modal button.primary {
896
+ padding: 0.4375rem 1rem; border: none; border-radius: 0;
897
+ background: var(--accent); color: var(--on-accent); font-weight: 600; font-size: 0.8125rem; cursor: pointer;
898
+ }
899
+ .rigel .rigel-modal .search-row button:hover:not(:disabled),
900
+ .rigel .rigel-modal button.primary:hover:not(:disabled) { background: var(--accent-hover); }
901
+ .rigel .rigel-modal .search-row button:active:not(:disabled),
902
+ .rigel .rigel-modal button.primary:active:not(:disabled) { background: var(--accent-active); }
903
+ .rigel .rigel-modal .search-row button:disabled,
904
+ .rigel .rigel-modal button.primary:disabled { background: var(--surface-raised); color: var(--text-muted); cursor: default; }
905
+ .rigel :is(.image-picker, .media-library) .grid {
906
+ display: grid; grid-template-columns: repeat(auto-fill, minmax(min(160px, 100%), 1fr)); gap: 1rem; margin-top: 1rem;
907
+ }
908
+ .rigel :is(.image-picker, .media-library) .thumb {
909
+ border: 2px solid transparent; border-radius: 0; overflow: hidden;
910
+ padding: 0; cursor: pointer; background: none; aspect-ratio: 3 / 2;
911
+ transition: border-color 0.1s, transform 0.1s;
912
+ }
913
+ .rigel :is(.image-picker, .media-library) .thumb:hover { border-color: var(--accent); transform: translateY(-1px); }
914
+ .rigel :is(.image-picker, .media-library) .thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
915
+ .rigel :is(.image-picker, .media-library) .grid figure { margin: 0; min-width: 0; }
916
+ .rigel :is(.image-picker, .media-library) .grid .thumb { width: 100%; }
917
+ .rigel :is(.image-picker, .media-library) .grid figcaption { font-size: 0.75rem; color: var(--text-2); overflow-wrap: anywhere; }
918
+ .rigel :is(.image-picker, .media-library) .grid figcaption a { color: var(--link); }
919
+ .rigel .rigel-modal .hint { color: var(--text-2); font-size: 0.8125rem; }
920
+ .rigel .rigel-modal .error { color: var(--danger); font-size: 0.8125rem; }
921
+
922
+ /* ── Settings modal ────────────────────── */
923
+ .rigel .settings-modal { padding: 0; width: min(720px, 94vw); }
924
+ .rigel .settings-head {
925
+ display: flex;
926
+ align-items: center;
927
+ justify-content: space-between;
928
+ padding: 1rem 1.25rem;
929
+ border-bottom: 1px solid var(--border);
930
+ }
931
+ .rigel .settings-head h2 { margin: 0; font-size: 1rem; }
932
+ .rigel .settings-head .close,
933
+ .rigel .media-head .close {
934
+ border: none; background: none; cursor: pointer;
935
+ color: var(--text-3); font-size: 0.875rem; padding: 0.25rem 0.375rem;
936
+ border-radius: 0;
937
+ }
938
+ .rigel .settings-head .close:hover, .rigel .media-head .close:hover { background: var(--surface-raised); color: var(--text); }
939
+ .rigel .settings-body { display: grid; grid-template-columns: 208px 1fr; min-height: 380px; }
940
+ .rigel .settings-nav {
941
+ border-right: 1px solid var(--border);
942
+ padding: 1rem 0.75rem;
943
+ display: flex;
944
+ flex-direction: column;
945
+ gap: 0.5rem;
946
+ }
947
+ .rigel .settings-nav button {
948
+ display: flex; align-items: center; gap: 0.75rem;
949
+ width: 100%; padding: 0.75rem; border: none; background: none;
950
+ border-radius: 0; cursor: pointer; font-size: 0.875rem; font-weight: 500;
951
+ color: var(--text-2); text-align: left;
952
+ }
953
+ .rigel .settings-nav button:hover { background: var(--surface-raised); color: var(--text); }
954
+ .rigel .settings-nav button.active { background: var(--accent-soft); color: var(--on-accent-soft); font-weight: 600; }
955
+ .rigel .settings-nav .pico { width: 24px; flex-shrink: 0; }
956
+ .rigel .settings-pane { padding: 1.25rem 1.5rem 1.25rem; }
957
+ .rigel .settings-pane h3 {
958
+ font-size: 0.875rem; font-weight: 600; text-transform: none;
959
+ letter-spacing: 0; color: var(--text); margin: 0 0 0.75rem;
960
+ }
961
+ .rigel .settings-pane fieldset { border: none; padding: 0; margin: 0 0 1rem; }
962
+ .rigel .settings-pane fieldset.accessibility-options { margin-top: 1.5rem; }
963
+ .rigel .accessibility-options label.inline { margin-top: 0; }
964
+ .rigel .theme-options {
965
+ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.25rem;
966
+ padding: 0.25rem; border: 1px solid var(--border-control); border-radius: 0;
967
+ background: var(--surface-raised);
968
+ }
969
+ .rigel .theme-option { position: relative; margin: 0; cursor: pointer; }
970
+ .rigel .theme-option input {
971
+ position: absolute; inset: 0; width: 100%; height: 100%; margin: 0;
972
+ opacity: 0; cursor: pointer; accent-color: var(--accent);
973
+ }
974
+ .rigel .theme-option span {
975
+ display: block; padding: 0.5rem; margin: 0; text-align: center;
976
+ border: 1px solid transparent; border-radius: 0; font-size: 0.875rem; color: var(--text-muted);
977
+ }
978
+ .rigel .theme-option input:checked + span {
979
+ background: var(--accent-soft); color: var(--on-accent-soft); border-color: var(--accent);
980
+ }
981
+ .rigel .theme-option input:focus-visible + span { outline: 3px solid var(--focus-ring); outline-offset: 3px; }
982
+ .rigel label.inline input.switch {
983
+ appearance: none; position: relative; width: 2.25rem; height: 1.25rem;
984
+ border: 1px solid var(--border-control); border-radius: 0;
985
+ background: var(--border-control); cursor: pointer;
986
+ }
987
+ .rigel label.inline input.switch::before {
988
+ content: ""; position: absolute; top: 1px; left: 1px;
989
+ width: 1rem; height: 1rem; border-radius: 0; background: var(--surface);
990
+ box-shadow: var(--shadow-sm); transition: transform 0.15s ease;
991
+ }
992
+ .rigel label.inline input.switch:checked { background: var(--accent); border-color: var(--accent); }
993
+ .rigel label.inline input.switch:checked::before { transform: translateX(1rem); }
994
+ @media (prefers-reduced-motion: reduce) {
995
+ .rigel label.inline input.switch::before { transition: none; }
996
+
997
+ }
998
+ @media (forced-colors: active) {
999
+ .rigel label.inline input.switch { appearance: auto; }
1000
+ .rigel label.inline input.switch::before { display: none; }
1001
+ }
1002
+ .rigel .settings-pane .clear-data { margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid var(--border); }
1003
+ .rigel .settings-pane .clear-data button:disabled { opacity: 0.5; cursor: not-allowed; }
1004
+ .rigel .settings-pane legend {
1005
+ font-size: 0.75rem; font-weight: 600; color: var(--text-2);
1006
+ margin-bottom: 0.5rem; padding: 0;
1007
+ }
1008
+ .rigel .settings-pane label.radio { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.375rem; }
1009
+ .rigel .settings-pane label.radio input { width: 0.875rem; height: 0.875rem; margin: 0; flex-shrink: 0; accent-color: var(--accent); }
1010
+ .rigel .settings-pane label.radio span { margin: 0; font-size: 0.875rem; color: var(--text); }
1011
+
1012
+ .rigel .settings-pane .media-settings-section {
1013
+ margin: 0; padding: 0; background: none; border: none; border-radius: 0; box-shadow: none;
1014
+ }
1015
+
1016
+ .rigel .stock-key { margin-top: 1rem; }
1017
+ .rigel .stock-key-head { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; margin-bottom: 0.375rem; }
1018
+ .rigel .stock-key-head h4 { margin: 0; font-size: 0.8125rem; }
1019
+ .rigel .stock-key-head label { margin: 0; }
1020
+ .rigel .stock-key-head a { color: var(--link); font-size: 0.75rem; }
1021
+ .rigel .secret-input { position: relative; }
1022
+ .rigel .schema-color { display: flex; align-items: center; gap: 0.5rem; }
1023
+ .rigel .schema-color input[type="color"] { width: 2.5rem; height: 2.5rem; padding: 0.25rem; border: 1px solid var(--border-control); background: var(--panel); cursor: pointer; }
1024
+ .rigel .schema-color input[type="text"] { width: 8rem; min-width: 0; }
1025
+ .rigel textarea.schema-code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
1026
+ .rigel .secret-input input {
1027
+ min-width: 0; height: 2.5rem; padding-inline-end: 2.75rem;
1028
+ font-family: ui-monospace, monospace; box-shadow: var(--shadow-sm);
1029
+ }
1030
+ .rigel .secret-input input::placeholder { color: var(--text-2); opacity: 1; }
1031
+
1032
+ .rigel .secret-input button {
1033
+ position: absolute; inset-inline-end: 0.25rem; top: 50%; transform: translateY(-50%);
1034
+ display: grid; place-items: center; width: 2rem; height: 2rem; padding: 0;
1035
+ border: none; border-radius: 0; background: transparent; color: var(--text-2); cursor: pointer;
1036
+ }
1037
+ .rigel .secret-input button:hover { color: var(--text); background: var(--bg); }
1038
+ .rigel :focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; }
1039
+ .rigel .secret-input input[aria-invalid="true"] { border-color: var(--danger); }
1040
+
1041
+
1042
+ /* ── Dark theme (opt-in via Settings → Appearance) ─ */
1043
+ .rigel .welcome {
1044
+ display: flex;
1045
+ flex-direction: column;
1046
+ align-items: center;
1047
+ justify-content: center;
1048
+ text-align: center;
1049
+ gap: 0.75rem;
1050
+ padding: 4rem 1.5rem;
1051
+ color: var(--text-2);
1052
+ }
1053
+ .rigel .welcome img { margin-bottom: 0.5rem; opacity: 0.9; }
1054
+ .rigel .welcome h2 { font-size: 1.75rem; font-weight: 700; letter-spacing: -0.02em; color: var(--text); margin: 0; }
1055
+ .rigel .welcome p { margin: 0; font-size: 1rem; }
1056
+ .rigel .welcome .welcome-hint { margin-top: 1.5rem; font-size: 0.875rem; color: var(--text-3); }
1057
+
1058
+ [data-theme="dark"] .rigel {
1059
+ color-scheme: dark;
1060
+ --background: var(--space-950);
1061
+ --surface: var(--space-900);
1062
+ --surface-raised: var(--space-800);
1063
+ --text: var(--space-50);
1064
+ --text-muted: #B6C5D8;
1065
+ --border-subtle: var(--space-700);
1066
+ --border-control: #71839C;
1067
+ --accent: var(--rigel-300);
1068
+ --accent-hover: var(--rigel-200);
1069
+ --accent-active: var(--rigel-400);
1070
+ --on-accent: var(--space-950);
1071
+ --link: var(--rigel-300);
1072
+ --accent-soft: var(--rigel-950);
1073
+ --on-accent-soft: var(--rigel-200);
1074
+ --focus-ring: var(--rigel-300);
1075
+ --success: #86EFAC;
1076
+ --success-soft: #052E16;
1077
+ --warning: #FCD34D;
1078
+ --warning-soft: #451A03;
1079
+ --danger: #FCA5A5;
1080
+ --danger-soft: #450A0A;
1081
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
1082
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4);
1083
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.55);
1084
+ }
1085
+
1086
+ [data-contrast="high"] .rigel {
1087
+ --background: #FFFFFF;
1088
+ --surface: #FFFFFF;
1089
+ --text: #000000;
1090
+ --text-muted: var(--space-800);
1091
+ --border-subtle: var(--space-600);
1092
+ --border-control: var(--space-800);
1093
+ }
1094
+ [data-theme="dark"][data-contrast="high"] .rigel {
1095
+ --background: #000000;
1096
+ --surface: #000000;
1097
+ --text: #FFFFFF;
1098
+ --text-muted: var(--space-200);
1099
+ --border-subtle: var(--space-300);
1100
+ --border-control: var(--space-50);
1101
+ }
1102
+
1103
+ /* ── Schema document editor ───────────────────────────── */
1104
+ .rigel .content.visual { height: 100dvh; overflow: hidden; }
1105
+ .rigel main.visual-pane { display: flex; flex-direction: column; min-height: 0; padding: 1rem 1.5rem 1.25rem; max-width: 100%; }
1106
+ .rigel .visual-editor { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); border: 1px solid var(--border); background: var(--panel); }
1107
+ .rigel .visual-editor.with-panel { grid-template-columns: minmax(0, 1fr) 8px var(--properties-width, 340px); }
1108
+ .rigel .properties-divider { cursor: col-resize; touch-action: none; background: var(--panel); border-inline: 1px solid var(--border); }
1109
+ .rigel .properties-divider:hover, .rigel .properties-divider:focus-visible, .rigel .resizing-properties .properties-divider { background: var(--accent); }
1110
+ .rigel .resizing-properties { user-select: none; cursor: col-resize; }
1111
+ .rigel .resizing-properties iframe { pointer-events: none; }
1112
+ .rigel .visual-canvas { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
1113
+ .rigel .visual-toolbar { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--border); }
1114
+ .rigel .visual-hint { flex: 1; min-width: 12rem; color: var(--text-3); font-size: 0.75rem; }
1115
+ .rigel .visual-actions { display: flex; align-items: center; gap: 0.75rem; }
1116
+ .rigel a.visual-live:any-link { display: inline-flex; align-items: center; white-space: nowrap; text-decoration: none; }
1117
+ .rigel .mode-toggle { display: inline-flex; border: 1px solid var(--border-control); }
1118
+ .rigel .mode-toggle button { border: 0; border-radius: 0; background: transparent; color: var(--text-2); padding: 0.25rem 0.625rem; font-size: 0.75rem; cursor: pointer; }
1119
+ .rigel .mode-toggle button[aria-pressed="true"] { background: var(--accent); color: var(--on-accent); }
1120
+ .rigel .canvas-stage { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; background: #fff; }
1121
+ .rigel .canvas-stage iframe { display: block; flex: 1; min-height: 0; width: 100%; height: 100%; border: 0; background: #fff; }
1122
+ .rigel .inline-editor { position: absolute; z-index: 5; border: 2px solid var(--accent); border-radius: 0; background: #fff; color: #080f1c; padding: 0 0.25rem; font-family: inherit; box-shadow: 0 4px 16px rgb(8 15 28 / 18%); }
1123
+ .rigel .visual-error { margin: 1.5rem; font-size: 0.875rem; color: var(--text-2); max-width: 44ch; }
1124
+ .rigel .schema-panel { border-left: 1px solid var(--border); overflow-y: auto; min-height: 0; padding: 1rem; background: var(--panel); }
1125
+ .rigel .schema-panel section { border: 0; padding: 0 0 1rem; }
1126
+ .rigel .custom-select { min-width: 0; max-width: 100%; }
1127
+ .rigel .block-editor { position: relative; margin-top: 1rem; border: 1px solid var(--border-control); }
1128
+ .rigel .block-editor [hidden] { display: none !important; }
1129
+ .rigel.rigel-inline { display: block; position: fixed; top: 0; left: 0; width: 100%; min-height: 0; height: 0; padding: 0; background: transparent; pointer-events: none; z-index: 120; }
1130
+ .rigel.rigel-inline .block-editor { margin: 0; border: 0; }
1131
+ .rigel.rigel-inline .block-editor > [role="alert"] { position: fixed; inset: 8px 8px auto; padding: 0.75rem; background: var(--danger-soft); color: var(--danger); pointer-events: auto; }
1132
+ .rigel.rigel-inline :is(.body-toolbar, .block-handle, .block-insert, .block-menu, .block-slash, .markdown-link, .block-markdown-view) { pointer-events: auto; }
1133
+ .rigel.rigel-inline .block-editor .body-toolbar, .rigel .block-editor .body-toolbar.image-toolbar { position: fixed; inset: auto; width: max-content; max-width: calc(100vw - 16px); margin: 0; padding: 0.25rem; gap: 0.25rem; border: 1px solid var(--border-control); box-shadow: var(--shadow-lg); z-index: 120; }
1134
+ .rigel.rigel-inline :where(.block-editor .body-toolbar) > button { width: 32px; height: 32px; padding: 0; background: transparent; color: var(--text); border: 0; }
1135
+ .rigel.rigel-inline .block-handle { position: fixed; width: 24px; height: 28px; }
1136
+ .rigel.rigel-inline .markdown-link, .rigel .block-editor .markdown-link { position: fixed; inset: auto; width: 340px; max-width: calc(100vw - 16px); z-index: 121; }
1137
+ .rigel.rigel-inline .block-markdown-view { position: fixed; inset: 12px; max-height: calc(100vh - 24px); overflow: auto; padding: 0.5rem; border: 1px solid var(--border-control); background: var(--panel); }
1138
+ .rigel-article-content:focus { outline: 0; }
1139
+ :is(.rigel .block-content, .rigel-article-content)::highlight(rigel-link-selection), :is(.rigel .block-content, .rigel-article-content) ::highlight(rigel-link-selection) { background-color: Highlight; color: HighlightText; }
1140
+ .rigel-article-content:focus-visible > [data-rigel-active-block] { outline: 3px solid Highlight; outline-offset: 3px; }
1141
+ .rigel-article-content .block-bold { font-weight: 700; }
1142
+ .rigel-article-content .block-italic { font-style: italic; }
1143
+ .rigel-article-content .block-strike { text-decoration: line-through; }
1144
+ :is(.rigel .block-content, .rigel-article-content) .block-underline { text-decoration: underline; }
1145
+ :is(.rigel .block-content, .rigel-article-content) .block-underline-strike { text-decoration: underline line-through; }
1146
+ [data-rigel-richtext].rigel-article-content .block-code { display: block; white-space: pre-wrap; overflow-x: auto; background-color: var(--rigel-code-background-color); padding: var(--rigel-code-padding); margin: var(--rigel-code-margin); border: var(--rigel-code-border); border-radius: var(--rigel-code-border-radius); color: var(--rigel-code-color); font-family: var(--rigel-code-font-family); font-size: var(--rigel-code-font-size); font-weight: var(--rigel-code-font-weight); line-height: var(--rigel-code-line-height); letter-spacing: var(--rigel-code-letter-spacing); }
1147
+ .rigel-article-content .block-table-scroll { overflow-x: auto; }
1148
+ .rigel-article-content .block-table-selected { outline: 2px solid Highlight; outline-offset: -2px; }
1149
+ .rigel-article-content > p:has(> br:only-child)::before { content: "Type / to choose a block"; position: absolute; pointer-events: none; font-style: italic; }
1150
+ .rigel .article-state { max-height: 12rem; overflow: auto; flex-shrink: 0; }
1151
+ .rigel .block-content { min-height: 16rem; padding: 1rem 1rem 1rem 2.5rem; overflow-wrap: anywhere; line-height: 1.7; }
1152
+ .rigel .block-content:focus-visible { outline: 3px solid var(--accent); outline-offset: 3px; }
1153
+ .rigel .block-content > :first-child { margin-top: 0; }
1154
+ .rigel .block-content > * { margin: 0 0 1rem; }
1155
+ .rigel .block-bold { font-weight: 700; }
1156
+ .rigel .block-italic { font-style: italic; }
1157
+ .rigel .block-strike { text-decoration: line-through; }
1158
+ .rigel .block-inline-code { font-family: ui-monospace, monospace; background: var(--surface-raised); padding: 0.125rem; }
1159
+ .rigel .block-editor .formatting-toolbar { position: sticky; top: 0; z-index: 3; flex-wrap: wrap; align-items: center; background: var(--panel); }
1160
+ .rigel .block-editor .toolbar-separator { width: 1px; height: 1.25rem; margin-inline: 0.25rem; background: var(--border-subtle); flex-shrink: 0; }
1161
+ .rigel .block-editor .formatting-toolbar :is(.block-add, .block-history) { width: auto; padding: 0.25rem 0.5rem; }
1162
+ .rigel .block-surface { position: relative; }
1163
+ .rigel .block-editor .block-content :is(h1,h2,h3,h4,h5,h6) { line-height: 1.3; margin: 1.25rem 0 0.75rem; text-transform: none; letter-spacing: normal; }
1164
+ .rigel .block-editor .block-content h1 { font-size: 1.75rem; }
1165
+ .rigel .block-editor .block-content h2 { font-size: 1.5rem; }
1166
+ .rigel .block-editor .block-content h3 { font-size: 1.25rem; }
1167
+ .rigel .block-editor .block-content h4 { font-size: 1rem; }
1168
+ .rigel .block-editor .block-content h5 { font-size: 0.875rem; }
1169
+ .rigel .block-editor .block-content h6 { font-size: 0.75rem; }
1170
+ .rigel .block-content :is(ul,ol) { padding-left: 1.5rem; }
1171
+ .rigel .block-content blockquote { margin-left: 0; padding: 0.75rem; border: 1px solid var(--border-control); background: var(--surface-raised); }
1172
+ .rigel .block-content .block-code { display: block; white-space: pre-wrap; padding: 0.75rem; font-family: ui-monospace, monospace; background: var(--surface-raised); }
1173
+ .rigel .block-content img { max-width: 100%; height: auto; }
1174
+ .rigel .block-content figure { margin-inline: 0; }
1175
+ .rigel .block-content figcaption { font-size: 0.75rem; color: var(--text-2); }
1176
+ .rigel .block-content table { width: 100%; border-collapse: collapse; }
1177
+ .rigel .block-table-scroll { overflow-x: auto; }
1178
+ .rigel .block-content .block-table-selected { background: var(--accent-soft); }
1179
+ .rigel .block-content :is(th,td) { border: 1px solid var(--border-control); padding: 0.5rem; min-width: 3rem; vertical-align: top; text-align: left; }
1180
+ .rigel .block-content th { background: var(--surface-raised); font-weight: 700; }
1181
+ .rigel .block-content :is(th,td) p { margin: 0; }
1182
+ .rigel .block-table-controls { display: flex; flex-direction: column; align-items: stretch; }
1183
+ .rigel .block-table-controls button { display: flex; align-items: center; gap: 0.5rem; width: 100%; padding: 0.5rem; border: 0; background: var(--panel); color: var(--text); font: inherit; font-size: 0.8125rem; text-align: left; white-space: nowrap; cursor: pointer; }
1184
+ .rigel .block-table-controls button:hover:not(:disabled) { background: var(--accent-soft); color: var(--on-accent-soft); }
1185
+ .rigel .block-table-controls button:disabled { opacity: 0.35; cursor: default; }
1186
+ .rigel .block-table-controls label.inline { display: flex; align-items: center; gap: 0.5rem; margin: 0.25rem 0 0; padding: 0.5rem; border-top: 1px solid var(--border-subtle); font-size: 0.8125rem; }
1187
+ .rigel .block-table-controls label.inline input.switch { flex-shrink: 0; margin-left: auto; }
1188
+ .rigel .block-content > p:has(> br:only-child)::before { content: "Type / to choose a block"; position: absolute; color: var(--text-2); pointer-events: none; }
1189
+ .rigel .block-handle { position: absolute; left: 2px; width: 28px; height: 32px; padding: 0; display: flex; align-items: center; justify-content: center; background: var(--panel); border: 1px solid var(--border-control); color: var(--text); cursor: grab; touch-action: none; }
1190
+ .rigel .block-insert { position: fixed; z-index: 119; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; padding: 0; background: var(--panel); border: 1px solid var(--border-control); color: var(--text); cursor: pointer; }
1191
+ .rigel .block-insert:hover { background: var(--surface-raised); }
1192
+ .rigel .block-drop-indicator { position: absolute; left: 2.5rem; right: 0.5rem; height: 3px; background: var(--accent); pointer-events: none; }
1193
+ .rigel :is(.block-menu, .block-slash) { width: 224px; max-width: calc(100vw - 16px); max-height: 280px; overflow-y: auto; padding: 0.5rem; border: 1px solid var(--border-control); background: var(--panel); color: var(--text); box-shadow: var(--shadow-lg); }
1194
+ .rigel .block-menu { position: fixed; inset: auto; margin: 0; }
1195
+ .rigel .block-slash { position: fixed; inset: auto; margin: 0; }
1196
+ .rigel .block-markdown { margin: 0; padding: 1rem; overflow: auto; white-space: pre-wrap; font: 0.8125rem/1.7 ui-monospace, monospace; }
1197
+ .rigel :is(.block-menu, .block-slash) > button { display: block; width: 100%; text-align: left; padding: 0.5rem; background: var(--panel); border: 0; color: var(--text); font: inherit; font-size: 0.8125rem; cursor: pointer; }
1198
+ .rigel :is(.block-menu, .block-slash) > button:is(:hover,[aria-selected=true]) { background: var(--accent-soft); color: var(--on-accent-soft); }
1199
+ .rigel .block-format-menu > button { display: flex; align-items: center; gap: 0.75rem; }
1200
+ .rigel .block-format-menu > button > span { flex: 1; }
1201
+ .rigel .block-format-menu > button[aria-checked=true] { background: var(--accent-soft); color: var(--on-accent-soft); }
1202
+ .rigel .block-float { display: flex; position: fixed; z-index: 120; padding: 0.25rem; gap: 0.25rem; background: var(--panel); border: 1px solid var(--border-control); box-shadow: var(--shadow-lg); }
1203
+ .rigel .block-float button { display: flex; align-items: center; justify-content: center; height: 32px; width: 32px; padding: 0; color: var(--text); background: var(--panel); border: 0; cursor: pointer; }
1204
+ .rigel .block-float button[aria-pressed=true] { background: var(--accent-soft); color: var(--on-accent-soft); }
1205
+ .rigel .custom-select > select { display: none; border-radius: 0; }
1206
+ .rigel .select-label { display: block; margin: 1rem 0 0.375rem; color: var(--text-2); font-size: 0.75rem; font-weight: 600; }
1207
+ .rigel .select-trigger { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; width: 100%; min-width: 0; padding: 0.5rem 0.75rem; border: 1px solid var(--border-control); background: var(--panel); color: var(--text); font: inherit; font-size: 0.8125rem; text-align: left; cursor: pointer; }
1208
+ .rigel .select-trigger > span { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
1209
+ .rigel .select-trigger > .rigel-icon { flex-shrink: 0; }
1210
+ .rigel .select-trigger.icon-only { width: 32px; padding: 0; justify-content: center; }
1211
+ .rigel .select-trigger:hover:not(:disabled) { background: var(--surface-raised); }
1212
+ .rigel .select-trigger:disabled { opacity: 0.5; cursor: default; }
1213
+ .rigel .select-menu { position: fixed; inset: auto; margin: 0; padding: 0.25rem; overflow-y: auto; overscroll-behavior: contain; border: 1px solid var(--border-control); background: var(--panel); color: var(--text); font: inherit; font-size: 0.8125rem; box-shadow: var(--shadow-lg); }
1214
+ .rigel .select-menu::backdrop { background: transparent; }
1215
+ .rigel .date-popover { position: fixed; inset: auto; width: 21rem; margin: 0; padding: 0.75rem; overflow: auto; border: 1px solid var(--border-control); background: var(--panel); color: var(--text); font: inherit; box-shadow: var(--shadow-lg); }
1216
+ .rigel .date-popover::backdrop { background: transparent; }
1217
+ .rigel .date-header { display: flex; align-items: center; gap: 0.375rem; margin-bottom: 0.5rem; }
1218
+ .rigel .date-header .custom-select { flex: 1; min-width: 0; }
1219
+ .rigel .date-header > input { width: 4.5rem; padding-inline: 0.5rem; }
1220
+ .rigel .date-header > button, .rigel .date-grid button { display: grid; place-items: center; height: 40px; padding: 0; border: 0; background: transparent; color: var(--text); font: inherit; cursor: pointer; }
1221
+ .rigel .date-header > button { width: 32px; flex-shrink: 0; }
1222
+ .rigel .date-previous svg { transform: rotate(180deg); }
1223
+ .rigel .date-grid { width: 100%; margin: 0; table-layout: fixed; border-collapse: collapse; }
1224
+ .rigel .date-grid :is(th, td) { padding: 0; border: 0; text-align: center; background: transparent; }
1225
+ .rigel .date-grid th { height: 32px; color: var(--text-2); font-size: 0.75rem; font-weight: 500; text-transform: none; letter-spacing: normal; }
1226
+ .rigel .date-grid tr { background: transparent; }
1227
+ .rigel .date-grid button { width: 100%; font-size: 0.8125rem; }
1228
+ .rigel .date-grid button[aria-current="date"] { box-shadow: inset 0 0 0 1px var(--accent); }
1229
+ .rigel .date-header > button:hover:not(:disabled), .rigel .date-grid button:hover { background: var(--surface-raised); }
1230
+ .rigel .date-grid td[aria-selected="true"] button { background: var(--accent); color: var(--on-accent); }
1231
+ .rigel .date-actions { display: flex; justify-content: flex-end; gap: 0.5rem; margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid var(--border-subtle); }
1232
+ .rigel .date-popover .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
1233
+ .rigel .select-option { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; min-height: 2.25rem; padding: 0.5rem 0.625rem; cursor: pointer; overflow-wrap: anywhere; }
1234
+ .rigel .select-option.active { background: var(--accent-soft); color: var(--on-accent-soft); }
1235
+ .rigel .select-option > .rigel-icon { flex-shrink: 0; }
1236
+ .rigel .select-option > span:not(.select-check) { flex: 1; }
1237
+ .rigel .select-option[aria-disabled="true"] { opacity: 0.5; cursor: default; }
1238
+ .rigel .select-check { width: 1rem; flex-shrink: 0; color: var(--accent); }
1239
+ .rigel .select-empty { margin: 0; padding: 0.5rem; color: var(--text-2); }
1240
+ .rigel .add-section .custom-select { flex: 1; }
1241
+ @media (max-width: 767px) { .rigel .select-option { min-height: 2.75rem; } }
1242
+ .rigel .page-properties-header { position: sticky; top: 0; z-index: 2; padding-top: 0.5rem; margin-top: -0.5rem; background: var(--panel); }
1243
+ .rigel .panel-tabs { display: flex; gap: 0.25rem; border-bottom: 1px solid var(--border-control); }
1244
+ .rigel .panel-tabs button { flex: 1; padding: 0.5rem 0.75rem; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--text-2); font: inherit; font-size: 0.8125rem; cursor: pointer; }
1245
+ .rigel .panel-tabs button[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); }
1246
+ .rigel .document-form, .rigel main:has(> .document-form) > :is(.editor-actions, .titlebar) { max-width: 720px; }
1247
+ .rigel .document-form .schema-panel { border: 0; padding: 0; overflow: visible; background: transparent; }
1248
+ .rigel .document-form section { background: transparent; box-shadow: none; }
1249
+ .rigel .document-form .panel-note { display: none; }
1250
+ .rigel .document-form [data-schema-path="photo"] .preview { width: 5rem; height: 5rem; object-fit: cover; }
1251
+
1252
+ .rigel .schema-panel h3 { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-3); margin-bottom: 0.5rem; }
1253
+ .rigel .panel-note { margin: 0 0 0.75rem; font-size: 0.75rem; color: var(--text-3); }
1254
+ .rigel .shared-badge { display: flex; align-items: center; gap: 0.375rem; margin: 0 0 0.75rem; padding: 0.5rem; border: 1px solid var(--accent); color: var(--text-2); font-size: 0.75rem; }
1255
+ .rigel .structure-list { list-style: none; margin: 0 0 0.75rem; padding: 0; display: flex; flex-direction: column; gap: 0.375rem; }
1256
+ .rigel .structure-list li { display: flex; align-items: stretch; border: 1px solid var(--border); }
1257
+ .rigel .structure-list li.active { border-color: var(--accent); }
1258
+ .rigel .structure-row { flex: 1; min-width: 0; display: flex; justify-content: space-between; gap: 0.5rem; align-items: center; border: 0; border-radius: 0; background: transparent; color: var(--text); padding: 0.5rem; text-align: left; cursor: pointer; font-size: 0.8125rem; }
1259
+ .rigel .structure-actions, .rigel .schema-item-actions { display: flex; align-items: center; }
1260
+ .rigel .structure-actions button, .rigel .schema-item-actions button { border: 0; border-left: 1px solid var(--border); border-radius: 0; background: transparent; color: var(--text-2); min-width: 26px; height: 100%; padding: 0 0.25rem; cursor: pointer; }
1261
+ .rigel .structure-actions button:disabled, .rigel .schema-item-actions button:disabled { opacity: 0.35; cursor: default; }
1262
+ .rigel .add-section { display: flex; gap: 0.5rem; }
1263
+ .rigel .add-section select { flex: 1; min-width: 0; }
1264
+ .rigel .schema-key { font-family: ui-monospace, monospace; font-size: 0.6875rem; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; }
1265
+ .rigel .selected-path { margin: 0 0 0.5rem; font-size: 0.75rem; color: var(--text-2); }
1266
+ .rigel .schema-object { border: 1px solid var(--border); padding: 0.5rem; margin: 0.5rem 0; }
1267
+ .rigel .schema-object legend { padding: 0 0.25rem; font-size: 0.75rem; color: var(--text-3); }
1268
+ .rigel .schema-item { border: 1px solid var(--border); margin-top: 0.5rem; padding: 0.5rem; }
1269
+ .rigel .schema-item-head { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.5rem; font-size: 0.75rem; color: var(--text-2); }
1270
+ .rigel .schema-item-head .schema-key { margin-left: auto; }
1271
+ .rigel .schema-label { display: block; font-size: 0.75rem; color: var(--text-2); margin-bottom: 0.25rem; }
1272
+ @media (max-width: 1100px) {
1273
+ .rigel .visual-editor.with-panel { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) 42%; }
1274
+ .rigel .properties-divider { display: none; }
1275
+ .rigel .schema-panel { border-left: 0; border-top: 1px solid var(--border); }
1276
+ }
1277
+ @media (max-width: 767px) {
1278
+ .rigel main.visual-pane { padding: 0.75rem; }
1279
+ .rigel .visual-editor.with-panel { grid-template-rows: minmax(0, 1fr) 50%; }
1280
+ }