@acms-subir/core 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/cli/common.mjs +35 -0
  3. package/cli/legacy.mjs +317 -0
  4. package/cli/main.mjs +66 -0
  5. package/cli/palette.mjs +4 -0
  6. package/cli/preview.mjs +50 -0
  7. package/cli/remote.mjs +55 -0
  8. package/cli/themes.mjs +127 -0
  9. package/cli.mjs +2 -315
  10. package/deploy/Caddyfile +8 -0
  11. package/deploy/Dockerfile +34 -0
  12. package/deploy/compose.https.yml +21 -0
  13. package/deploy/compose.yml +46 -0
  14. package/docs/theme-authoring.md +103 -0
  15. package/email-runner.mjs +32 -0
  16. package/integration.mjs +193 -2
  17. package/ops-check.mjs +27 -0
  18. package/package.json +35 -12
  19. package/src/actions/index.ts +744 -38
  20. package/src/components/AiCleaner.tsx +291 -0
  21. package/src/components/AiSettings.tsx +575 -0
  22. package/src/components/CommandPalette.tsx +200 -0
  23. package/src/components/ContentList.astro +246 -0
  24. package/src/components/DesignAccess.tsx +182 -0
  25. package/src/components/DesignManager.tsx +455 -47
  26. package/src/components/EmailSettings.tsx +521 -0
  27. package/src/components/EventPage.astro +178 -0
  28. package/src/components/LegalPage.astro +27 -0
  29. package/src/components/LinksManager.tsx +216 -97
  30. package/src/components/NavManager.tsx +83 -38
  31. package/src/components/ThemeScript.astro +50 -0
  32. package/src/components/ThemeSections.astro +57 -0
  33. package/src/components/ThemeSectionsEditor.tsx +513 -0
  34. package/src/components/booking/BookingFlow.astro +150 -0
  35. package/src/components/booking/HoursEditor.astro +63 -0
  36. package/src/components/builder/PageBuilder.tsx +10 -2
  37. package/src/components/editor/EventPanel.tsx +401 -0
  38. package/src/components/editor/FormatDock.tsx +81 -0
  39. package/src/components/editor/LivePane.tsx +122 -0
  40. package/src/components/editor/MobileToolbar.tsx +93 -0
  41. package/src/components/editor/PostEditor.tsx +826 -271
  42. package/src/components/editor/PreviewOverlay.tsx +242 -43
  43. package/src/components/editor/extensions/calendar.tsx +51 -7
  44. package/src/components/editor/extensions/cards.tsx +17 -1
  45. package/src/components/editor/extensions/codeBlock.tsx +1 -1
  46. package/src/components/editor/extensions/events.tsx +153 -0
  47. package/src/components/editor/extensions/infoCards.tsx +16 -1
  48. package/src/components/editor/extensions/mediaCards.tsx +36 -2
  49. package/src/components/editor/extensions/slash.tsx +77 -9
  50. package/src/components/editor/extensions/toc.tsx +89 -0
  51. package/src/components/editor/extensions/toggle.tsx +70 -0
  52. package/src/components/site/Pager.astro +24 -0
  53. package/src/components/site/PostCard.astro +64 -0
  54. package/src/components/site/TagLabel.astro +11 -0
  55. package/src/layouts/Admin.astro +289 -49
  56. package/src/layouts/Site.astro +331 -57
  57. package/src/lib/agent-api.ts +13 -0
  58. package/src/lib/agent-discovery.ts +40 -0
  59. package/src/lib/agent.ts +114 -0
  60. package/src/lib/ai-config.ts +58 -0
  61. package/src/lib/ai-schema.ts +22 -0
  62. package/src/lib/ai.ts +90 -0
  63. package/src/lib/analytics.ts +121 -0
  64. package/src/lib/api-keys.ts +65 -0
  65. package/src/lib/api.ts +52 -0
  66. package/src/lib/auth.ts +25 -5
  67. package/src/lib/backup/content.ts +36 -0
  68. package/src/lib/backup/unzip.ts +12 -1
  69. package/src/lib/backup/zip.ts +1 -1
  70. package/src/lib/booking/agent.ts +108 -0
  71. package/src/lib/booking/availability.ts +221 -0
  72. package/src/lib/booking/emails.ts +115 -0
  73. package/src/lib/booking/forms.ts +77 -0
  74. package/src/lib/booking/service.ts +277 -0
  75. package/src/lib/booking/view.ts +54 -0
  76. package/src/lib/calendar/agent-schema.ts +48 -0
  77. package/src/lib/calendar/agent.ts +136 -0
  78. package/src/lib/calendar/api.ts +81 -0
  79. package/src/lib/calendar/cards.ts +102 -0
  80. package/src/lib/calendar/config.ts +52 -0
  81. package/src/lib/calendar/data.ts +130 -0
  82. package/src/lib/calendar/events.ts +261 -0
  83. package/src/lib/calendar/feeds.ts +43 -0
  84. package/src/lib/calendar/hooks.ts +38 -0
  85. package/src/lib/calendar/http.ts +30 -0
  86. package/src/lib/calendar/ics-write.ts +120 -0
  87. package/src/lib/calendar/ics.ts +15 -5
  88. package/src/lib/calendar/import.ts +203 -0
  89. package/src/lib/calendar/render.ts +120 -37
  90. package/src/lib/calendar/rrule.ts +149 -0
  91. package/src/lib/calendar/seo.ts +48 -0
  92. package/src/lib/design-service.ts +58 -0
  93. package/src/lib/designDiff.ts +145 -0
  94. package/src/lib/designPreview.ts +112 -0
  95. package/src/lib/documents/cleanup.ts +31 -0
  96. package/src/lib/documents/extract.ts +154 -0
  97. package/src/lib/documents/vendor.d.ts +4 -0
  98. package/src/lib/drafts.ts +131 -0
  99. package/src/lib/dynamicBlocks.ts +79 -7
  100. package/src/lib/email/accounts.ts +55 -0
  101. package/src/lib/email/config.ts +86 -0
  102. package/src/lib/email/migration.ts +24 -0
  103. package/src/lib/email/providers.ts +89 -0
  104. package/src/lib/email/service.ts +78 -0
  105. package/src/lib/email/store.ts +167 -0
  106. package/src/lib/email/templates.ts +18 -0
  107. package/src/lib/email/types.ts +32 -0
  108. package/src/lib/email/webhooks.ts +87 -0
  109. package/src/lib/email.ts +15 -0
  110. package/src/lib/env.ts +1 -1
  111. package/src/lib/legal/index.ts +25 -0
  112. package/src/lib/mobile/bookings.ts +73 -0
  113. package/src/lib/mobile/calendar.ts +85 -0
  114. package/src/lib/mobile/content.ts +85 -0
  115. package/src/lib/mobile/http.ts +63 -0
  116. package/src/lib/mobile/route.ts +20 -0
  117. package/src/lib/ops.ts +8 -0
  118. package/src/lib/preview.ts +21 -1
  119. package/src/lib/repo/migrations.ts +254 -0
  120. package/src/lib/repo/sql.ts +956 -46
  121. package/src/lib/repo/types.ts +140 -3
  122. package/src/lib/scheduler.ts +25 -0
  123. package/src/lib/schema.ts +362 -0
  124. package/src/lib/search-i18n.ts +3 -0
  125. package/src/lib/socialIcons.ts +32 -0
  126. package/src/lib/tagColor.ts +11 -0
  127. package/src/lib/theme.ts +59 -40
  128. package/src/lib/themeTokens.ts +174 -0
  129. package/src/lib/umami.ts +108 -0
  130. package/src/lib/webhooks.ts +139 -0
  131. package/src/middleware.ts +36 -3
  132. package/src/pages/404.astro +23 -0
  133. package/src/pages/[...slug].astro +10 -5
  134. package/src/pages/account/[action].astro +53 -0
  135. package/src/pages/admin/ai.astro +12 -0
  136. package/src/pages/admin/c/[collection]/[id].astro +14 -4
  137. package/src/pages/admin/c/[collection]/index.astro +127 -91
  138. package/src/pages/admin/calendar/bookings.astro +400 -0
  139. package/src/pages/admin/calendar/calendars.astro +265 -0
  140. package/src/pages/admin/calendar/events/[id].astro +56 -0
  141. package/src/pages/admin/calendar/events/index.astro +408 -0
  142. package/src/pages/admin/calendar/index.ts +4 -0
  143. package/src/pages/admin/calendar/integrations.astro +221 -0
  144. package/src/pages/admin/calendar/resources/[id].astro +180 -0
  145. package/src/pages/admin/calendar/resources/index.astro +106 -0
  146. package/src/pages/admin/calendar/resources/link.astro +196 -0
  147. package/src/pages/admin/design.astro +16 -4
  148. package/src/pages/admin/email.astro +13 -0
  149. package/src/pages/admin/index.astro +237 -87
  150. package/src/pages/admin/links.astro +3 -3
  151. package/src/pages/admin/login.astro +14 -10
  152. package/src/pages/admin/navigation.astro +8 -2
  153. package/src/pages/admin/pages/[id].astro +14 -3
  154. package/src/pages/admin/pages/index.astro +41 -47
  155. package/src/pages/admin/settings.astro +475 -276
  156. package/src/pages/admin/tags.astro +4 -4
  157. package/src/pages/admin/users.astro +38 -28
  158. package/src/pages/api/agent/docs.ts +33 -0
  159. package/src/pages/api/agent/index.ts +21 -0
  160. package/src/pages/api/ai/clean.ts +13 -0
  161. package/src/pages/api/ai/draft.ts +14 -0
  162. package/src/pages/api/ai/settings.ts +53 -0
  163. package/src/pages/api/ai/test.ts +12 -0
  164. package/src/pages/api/backup.ts +8 -21
  165. package/src/pages/api/calendar/availability.ts +35 -0
  166. package/src/pages/api/calendar/bookings/[id].ts +49 -0
  167. package/src/pages/api/calendar/bookings/index.ts +73 -0
  168. package/src/pages/api/calendar/calendars.ts +35 -0
  169. package/src/pages/api/calendar/docs.ts +64 -0
  170. package/src/pages/api/calendar/events/[id].ts +63 -0
  171. package/src/pages/api/calendar/events/index.ts +112 -0
  172. package/src/pages/api/calendar/resources.ts +34 -0
  173. package/src/pages/api/design/capabilities.ts +10 -0
  174. package/src/pages/api/design/index.ts +58 -0
  175. package/src/pages/api/design/keys.ts +24 -0
  176. package/src/pages/api/design/media.ts +32 -0
  177. package/src/pages/api/email/run.ts +11 -0
  178. package/src/pages/api/email/settings.ts +61 -0
  179. package/src/pages/api/email/webhooks/[provider].ts +4 -0
  180. package/src/pages/api/mcp.ts +59 -0
  181. package/src/pages/api/media/upload.ts +2 -2
  182. package/src/pages/api/ops/status.ts +39 -0
  183. package/src/pages/api/restore.ts +27 -37
  184. package/src/pages/api/search.ts +18 -4
  185. package/src/pages/api/v1/availability.ts +7 -0
  186. package/src/pages/api/v1/bookings.ts +17 -0
  187. package/src/pages/api/v1/calendars.ts +7 -0
  188. package/src/pages/api/v1/content/[id].ts +7 -0
  189. package/src/pages/api/v1/content/index.ts +7 -0
  190. package/src/pages/api/v1/events.ts +7 -0
  191. package/src/pages/api/v1/resources.ts +7 -0
  192. package/src/pages/author/[slug].astro +43 -35
  193. package/src/pages/blog/[slug].astro +140 -66
  194. package/src/pages/blog/index.astro +95 -30
  195. package/src/pages/blog/tag/[slug].astro +45 -40
  196. package/src/pages/book/[resource]/[link].astro +70 -0
  197. package/src/pages/book/[resource]/index.astro +63 -0
  198. package/src/pages/book/[resource].ics.ts +38 -0
  199. package/src/pages/book/index.astro +47 -0
  200. package/src/pages/book/manage/[token].astro +108 -0
  201. package/src/pages/calendar/[slug].ics.ts +27 -0
  202. package/src/pages/calendar/feed.ics.ts +15 -0
  203. package/src/pages/calendar/index.astro +191 -0
  204. package/src/pages/embed/book/[resource]/[link].astro +33 -0
  205. package/src/pages/embed/calendar/[slug].astro +43 -0
  206. package/src/pages/events/[slug].astro +74 -0
  207. package/src/pages/events/[slug].ics.ts +25 -0
  208. package/src/pages/index.astro +9 -3
  209. package/src/pages/legal/privacy.astro +4 -0
  210. package/src/pages/legal/terms.astro +4 -0
  211. package/src/pages/links.astro +33 -7
  212. package/src/pages/llms.txt.ts +4 -0
  213. package/src/pages/preview/[type]/[id].astro +34 -8
  214. package/src/pages/search.astro +40 -20
  215. package/src/pages/sitemap.xml.ts +16 -1
  216. package/src/styles/admin.css +928 -105
  217. package/src/styles/cards.css +101 -60
  218. package/src/styles/editor.css +532 -102
  219. package/src/styles/email-settings.css +117 -0
  220. package/src/styles/sections.css +12 -0
  221. package/src/styles/site.css +938 -278
  222. package/src/styles/theme-editor.css +135 -0
  223. package/src/theme-sdk/contract.d.mts +619 -0
  224. package/src/theme-sdk/contract.mjs +80 -0
  225. package/src/theme-sdk/index.ts +15 -0
  226. package/src/theme-sdk/tokens.d.mts +148 -0
  227. package/src/theme-sdk/tokens.mjs +52 -0
  228. package/src/themes/editorial/templates/home.astro +4 -4
  229. package/src/themes/editorial/templates/post-minimal.astro +2 -2
  230. package/src/themes/editorial/theme.css +22 -37
  231. package/src/themes/editorial/theme.json +23 -3
  232. package/src/themes/field/theme.json +26 -9
  233. package/src/themes/ink/theme.json +30 -12
  234. package/src/themes/night/theme.css +4 -7
  235. package/src/themes/night/theme.json +27 -10
  236. package/src/virtual.d.ts +14 -0
  237. package/src/worker.ts +5 -1
@@ -0,0 +1,117 @@
1
+ /* Settings → Email island. Scoped under .ems; reads only admin.css tokens.
2
+ Selection is a tinted fill, never an accent edge stripe. */
3
+ .ems { display: flex; flex-direction: column; gap: 12px; }
4
+ .ems code { font-family: ui-monospace, 'SF Mono', monospace; font-size: 12px; }
5
+ .ems .hint { margin: 0; }
6
+ .ems .flash { margin: 10px 0 0; }
7
+ .ems-status:empty { display: none; }
8
+ .ems-tabs { align-self: flex-start; max-width: 100%; overflow-x: auto; }
9
+ .ems-tabs > [role='tab'] { padding: 5px 12px; }
10
+ .ems-tabs > [role='tab']:focus-visible, .ems .seg > button:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--accent-ring); }
11
+ .ems-panel { display: flex; flex-direction: column; gap: 12px; }
12
+ .ems-panel[hidden] { display: none; }
13
+ .ems-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--shadow-card); padding: 16px 18px; }
14
+ .ems-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
15
+ .ems-head h2 { font-size: 14.5px; margin: 0; letter-spacing: -0.01em; }
16
+ .ems-head p { margin: 2px 0 0; color: var(--muted); font-size: 13px; max-width: 64ch; }
17
+ .ems-sub { font-size: 12px; font-weight: 600; color: var(--muted); margin: 16px 0 8px; }
18
+
19
+ /* loading skeleton */
20
+ .ems-skel { display: grid; gap: 10px; }
21
+ .ems-skel i { display: block; height: 56px; border-radius: var(--r-lg); background: var(--panel-2); animation: ems-pulse 1.2s ease-in-out infinite alternate; }
22
+ .ems-skel i:first-child { height: 30px; width: 320px; max-width: 100%; }
23
+ @keyframes ems-pulse { to { opacity: 0.45; } }
24
+ @media (prefers-reduced-motion: reduce) { .ems-skel i { animation: none; } }
25
+
26
+ /* setup checklist */
27
+ .ems-check { list-style: none; margin: 0; padding: 0; display: grid; gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; }
28
+ .ems-check li { display: grid; grid-template-columns: 22px 150px 1fr; gap: 8px; align-items: baseline; padding: 9px 12px; background: var(--panel); font-size: 13px; }
29
+ .ems-check li::before { font-weight: 700; text-align: center; }
30
+ .ems-check li[data-s='ok']::before { content: '✓'; color: var(--green); }
31
+ .ems-check li[data-s='bad']::before { content: '!'; color: var(--red); }
32
+ .ems-check li[data-s='todo']::before { content: '○'; color: var(--faint); }
33
+ .ems-check li[data-s='manual']::before { content: '↗'; color: var(--amber); }
34
+ .ems-check b { font-weight: 600; }
35
+ .ems-check span { color: var(--text-2); min-width: 0; overflow-wrap: anywhere; }
36
+ .ems-hb { margin: 10px 0 0; font-size: 12.5px; color: var(--muted); }
37
+ .ems-hb.stale { color: var(--amber); }
38
+
39
+ /* choices */
40
+ .ems-toggle { display: flex; gap: 9px; align-items: flex-start; margin: 0 0 12px; cursor: pointer; font-size: 13.5px; }
41
+ .ems-toggle input { accent-color: var(--accent); margin: 3px 0 0; width: 15px; height: 15px; flex: 0 0 auto; }
42
+ .ems-toggle small { display: block; color: var(--muted); font-size: 12px; }
43
+ .ems-grid { border: 0; padding: 0; margin: 4px 0 14px; min-width: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
44
+ .ems-grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
45
+ .ems-grid legend { font-size: 12px; color: var(--muted); font-weight: 500; padding: 0; margin-bottom: 5px; }
46
+ .ems-grid:disabled { opacity: 0.6; }
47
+ .ems-opt { display: flex; gap: 9px; align-items: flex-start; padding: 10px 12px; border: 1px solid var(--line-strong); border-radius: var(--r-md); background: var(--panel); cursor: pointer; }
48
+ .ems-opt:hover { background: var(--hover); }
49
+ .ems-opt.on { background: var(--sel); }
50
+ .ems-opt:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-ring); }
51
+ .ems-opt input { accent-color: var(--accent); margin: 3px 0 0; flex: 0 0 auto; }
52
+ .ems-opt b { display: block; font-size: 13px; }
53
+ .ems-opt small { display: block; color: var(--muted); font-size: 12px; line-height: 1.4; margin-top: 1px; }
54
+ .ems-opt:has(input:disabled) { cursor: not-allowed; }
55
+ .ems-opt-l, .ems-saved { font-style: normal; font-weight: 500; color: var(--faint); margin-left: 4px; }
56
+ .ems-saved { color: var(--green); }
57
+ .ems .field-row.three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
58
+ .ems input:disabled, .ems select:disabled { opacity: 0.6; cursor: not-allowed; }
59
+ .ems-env { background: var(--panel-2); border-radius: var(--r-md); padding: 10px 13px; margin: 0 0 12px; font-size: 13px; }
60
+ .ems-env p { margin: 0 0 6px; color: var(--text-2); }
61
+ .ems-env ul { margin: 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 6px; }
62
+ .ems-env code { display: inline-block; background: var(--panel); border: 1px solid var(--line); border-radius: 6px; padding: 2px 7px; }
63
+ .ems-note { background: var(--amber-soft); color: var(--text-2); border-radius: var(--r-md); padding: 9px 13px; margin: 0 0 12px; font-size: 13px; }
64
+ .ems-pw { max-width: 340px; margin-top: 4px; }
65
+ .ems-pw .hint { display: block; margin-top: 4px; }
66
+ .ems-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
67
+ .ems-row { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 12px; }
68
+ .ems-row .field { margin-bottom: 0; }
69
+ .ems-grow { flex: 1; min-width: 220px; }
70
+ .ems-list { margin: 0; padding-left: 18px; color: var(--text-2); font-size: 13px; display: grid; gap: 3px; }
71
+
72
+ /* template preview */
73
+ .ems-mail { margin: 0; border: 1px solid var(--line-strong); border-radius: var(--r-md); overflow: hidden; background: var(--panel-2); }
74
+ .ems-mail figcaption { padding: 10px 14px; font-size: 12.5px; color: var(--text-2); border-bottom: 1px solid var(--line); background: var(--panel); }
75
+ .ems-ics { display: inline-block; margin-left: 8px; font-size: 11px; font-weight: 600; padding: 1px 8px; border-radius: var(--r-full); background: var(--blue-soft); color: var(--blue); }
76
+ .ems-html { max-width: 520px; margin: 18px auto; background: #fff; color: #24211c; border-radius: var(--r-md); padding: 22px 26px; box-shadow: var(--shadow-sm); font-size: 14px; }
77
+ .ems-html h3 { font-size: 19px; margin: 6px 0 10px; letter-spacing: -0.01em; }
78
+ .ems-html p { margin: 0 0 8px; }
79
+ .ems-brand { font-weight: 700; font-size: 13px; color: #7d776e; }
80
+ .ems-cta { display: inline-block; margin: 8px 0 14px; padding: 8px 16px; border-radius: 8px; background: #24211c; color: #fff; font-weight: 600; font-size: 13.5px; }
81
+ .ems-small { font-size: 12px; color: #7d776e; }
82
+ .ems-text { margin: 0; padding: 16px 18px; white-space: pre-wrap; font: 12.5px/1.6 ui-monospace, 'SF Mono', monospace; color: var(--text); overflow-x: auto; }
83
+
84
+ /* activity */
85
+ .ems-scroll { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--r-md); }
86
+ .ems-table td, .ems-table th { padding: 10px 12px; vertical-align: top; font-size: 13px; }
87
+ .ems-table .t-sub { font-size: 11.5px; overflow-wrap: anywhere; }
88
+ .ems-rcpt { overflow-wrap: anywhere; font-weight: 600; max-width: 220px; }
89
+ .ems-state { display: inline-block; font-size: 11px; font-weight: 600; padding: 1px 8px; border-radius: var(--r-full); background: var(--sel); color: var(--muted); text-transform: capitalize; }
90
+ .ems-state[data-tone='ok'] { background: var(--green-soft); color: var(--green); }
91
+ .ems-state[data-tone='info'] { background: var(--blue-soft); color: var(--blue); }
92
+ .ems-state[data-tone='warn'] { background: var(--amber-soft); color: var(--amber); }
93
+ .ems-state[data-tone='bad'] { background: var(--red-soft); color: var(--red); }
94
+ .ems-err { margin-top: 4px; font-size: 12px; color: var(--red); overflow-wrap: anywhere; }
95
+ .ems-act { text-align: right; white-space: nowrap; }
96
+ .ems-empty { margin: 0; padding: 18px 4px; color: var(--muted); }
97
+
98
+ @media (max-width: 900px) {
99
+ .ems-grid, .ems .field-row.three { grid-template-columns: repeat(2, minmax(0, 1fr)); }
100
+ }
101
+ @media (max-width: 767px) {
102
+ .ems-card { padding: 14px; }
103
+ .ems-grid, .ems-grid.two, .ems .field-row, .ems .field-row.three { grid-template-columns: 1fr; }
104
+ .ems-check li { grid-template-columns: 22px 1fr; }
105
+ .ems-check li span { grid-column: 2; }
106
+ .ems-actions .btn, .ems-row > .btn { flex: 1; justify-content: center; }
107
+ .ems-pw { max-width: none; }
108
+ .ems-html { margin: 12px; padding: 18px; }
109
+ /* activity rows become stacked cards */
110
+ .ems-scroll { border: 0; overflow: visible; }
111
+ .ems-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
112
+ .ems-table, .ems-table tbody, .ems-table tr, .ems-table td { display: block; width: 100%; }
113
+ .ems-table tr { border: 1px solid var(--line); border-radius: var(--r-md); margin-bottom: 8px; padding: 6px 0; }
114
+ .ems-table td { border: 0; padding: 4px 12px; text-align: left; max-width: none; }
115
+ .ems-table td[data-l]::before { content: attr(data-l); display: block; font-size: 10.5px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--faint); }
116
+ .ems-table tr:hover td { background: none; }
117
+ }
@@ -0,0 +1,12 @@
1
+ .acms-sections{display:grid;gap:calc(3rem * var(--density,1));margin-block:2rem}
2
+ .acms-section{padding:clamp(1rem,4vw,3rem);border-radius:var(--r-lg);min-width:0}
3
+ .acms-section h2{font-family:var(--font-heading);font-size:clamp(1.7rem,4vw,3rem);line-height:1.15}
4
+ .section-text{white-space:pre-line;max-width:65ch;color:var(--muted)}
5
+ .section-hero.variant-split{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:2rem}
6
+ .section-hero.variant-centered{text-align:center}.section-hero.variant-centered .section-text{margin-inline:auto}
7
+ .section-image{width:100%;max-height:32rem;object-fit:cover;border-radius:var(--r)}
8
+ .section-items{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));gap:1.25rem;margin-top:1.5rem}
9
+ .variant-list .section-items,.section-faq .section-items{grid-template-columns:1fr}
10
+ .section-items>article:not(.post-card),.section-items>details{background:var(--panel);padding:1.25rem;border:1px solid var(--line);border-radius:var(--r)}
11
+ .section-items summary{cursor:pointer;font-weight:600}.section-cta.variant-panel{background:var(--soft)}
12
+ @media(max-width:640px){.section-hero.variant-split{grid-template-columns:1fr}.acms-section{padding:1rem}}