@panphora/clayjs 1.13.1 → 1.15.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 (146) hide show
  1. package/THIRD-PARTY-NOTICES.md +19 -0
  2. package/dist/clay.standalone.js +69385 -40992
  3. package/dist/server/checkpoint.cjs +1 -0
  4. package/dist/server/checkpoint.mjs +8 -0
  5. package/dist/server/core.cjs +72210 -0
  6. package/dist/server/rooms.cjs +1 -0
  7. package/dist/server/rooms.mjs +66 -0
  8. package/docs/guide.md +127 -99
  9. package/entries/clay.js +22 -0
  10. package/entries/sap.js +5 -5
  11. package/package.json +16 -2
  12. package/packed-contract.json +18 -3
  13. package/src/core/boot-phase.js +6 -0
  14. package/src/core/conflict-download.js +12 -3
  15. package/src/core/host-meta.js +75 -0
  16. package/src/core/persist.js +11 -0
  17. package/src/core/save-core.js +266 -31
  18. package/src/core/save.js +154 -36
  19. package/src/core/snapshot.js +51 -13
  20. package/src/core/style-comparisons.js +37 -0
  21. package/src/dom/insert-style-tag.js +11 -12
  22. package/src/lib/derived.js +116 -0
  23. package/src/lib/effect.js +130 -0
  24. package/src/lib/mutation.js +3 -1
  25. package/src/lib/style-adoption.js +9 -0
  26. package/src/lib/style.js +47 -0
  27. package/src/live/fast-lane.js +347 -60
  28. package/src/live/local-lane.js +32 -6
  29. package/src/live/ops.js +77 -0
  30. package/src/live/provenance.js +129 -0
  31. package/src/live/save-history.js +188 -0
  32. package/src/live/server-lane.js +9 -2
  33. package/src/live/store.js +194 -16
  34. package/src/loader-logic.js +16 -4
  35. package/src/loader.js +37 -1
  36. package/src/page/address.js +20 -0
  37. package/src/page/adopt-boot.js +189 -0
  38. package/src/page/adopt.js +240 -0
  39. package/src/page/ai-tool.js +188 -0
  40. package/src/page/announce.js +21 -0
  41. package/src/page/blocks.js +1170 -0
  42. package/src/page/blocksel.js +269 -0
  43. package/src/page/board-drag.js +226 -0
  44. package/src/page/board-panel.js +353 -0
  45. package/src/page/board-style.js +146 -0
  46. package/src/page/board-view.js +447 -0
  47. package/src/page/board.js +41 -0
  48. package/src/page/chart.js +220 -0
  49. package/src/page/checklist.js +143 -0
  50. package/src/page/chrome.js +587 -0
  51. package/src/page/csv-import.js +169 -0
  52. package/src/page/drag.js +202 -0
  53. package/src/page/drop.js +112 -0
  54. package/src/page/editor.js +386 -0
  55. package/src/page/highlight.js +268 -0
  56. package/src/page/inline.js +60 -1
  57. package/src/page/items.js +159 -0
  58. package/src/page/link.js +247 -0
  59. package/src/page/markdown.js +71 -0
  60. package/src/page/media.js +570 -0
  61. package/src/page/merge.js +130 -0
  62. package/src/page/model.js +71 -9
  63. package/src/page/placeholder.js +23 -0
  64. package/src/page/projection.js +647 -0
  65. package/src/page/recover.js +193 -0
  66. package/src/page/rich/cell.js +16 -0
  67. package/src/page/rich/chart.js +104 -0
  68. package/src/page/rich/csv.js +118 -0
  69. package/src/page/rich/page-tool.js +86 -0
  70. package/src/page/rich/tool-runtime.js +195 -0
  71. package/src/page/save-projection.js +53 -0
  72. package/src/page/save-states.js +85 -0
  73. package/src/page/schema.js +12 -5
  74. package/src/page/table-kinds.js +20 -0
  75. package/src/page/table-paste.js +57 -0
  76. package/src/page/table-select.js +244 -0
  77. package/src/page/table-style.js +25 -0
  78. package/src/page/table.js +650 -0
  79. package/src/page/themes/content.css +46 -0
  80. package/src/page/themes/light-1.css +269 -0
  81. package/src/page/themes/light-2.css +211 -0
  82. package/src/page/themes/light-3.css +130 -0
  83. package/src/page/themes/light-4.css +299 -0
  84. package/src/page/tool-data.js +25 -0
  85. package/src/page/tool-view.js +68 -0
  86. package/src/page/tools.js +133 -0
  87. package/src/page/view.js +136 -0
  88. package/src/page/ybind/author.js +25 -0
  89. package/src/page/ybind/binding.js +92 -0
  90. package/src/page/ybind/board-commands.js +170 -0
  91. package/src/page/ybind/board.js +89 -0
  92. package/src/page/ybind/bridge.js +382 -0
  93. package/src/page/ybind/conversion.js +26 -0
  94. package/src/page/ybind/core.js +7 -0
  95. package/src/page/ybind/decode.js +208 -0
  96. package/src/page/ybind/doc.js +58 -0
  97. package/src/page/ybind/external.js +190 -0
  98. package/src/page/ybind/group.js +124 -0
  99. package/src/page/ybind/index.js +12 -0
  100. package/src/page/ybind/layout.js +27 -0
  101. package/src/page/ybind/marks.js +18 -0
  102. package/src/page/ybind/migrate.js +152 -0
  103. package/src/page/ybind/moves.js +288 -0
  104. package/src/page/ybind/origins.js +257 -0
  105. package/src/page/ybind/parts.js +44 -0
  106. package/src/page/ybind/projection-map.js +92 -0
  107. package/src/page/ybind/provider.js +285 -0
  108. package/src/page/ybind/recovery.js +411 -0
  109. package/src/page/ybind/seed.js +27 -0
  110. package/src/page/ybind/table.js +166 -0
  111. package/src/page/ybind/tokens.js +93 -0
  112. package/src/page/ybind/walk.js +333 -0
  113. package/src/page/ybind/writer.js +307 -0
  114. package/src/plugins/derive.js +12 -0
  115. package/src/plugins/indicator.js +16 -6
  116. package/src/plugins/live.js +742 -65
  117. package/src/plugins/page.js +547 -0
  118. package/src/plugins/undo.js +62 -4
  119. package/src/server/checkpoint/index.js +218 -0
  120. package/src/server/rooms/index.js +59 -0
  121. package/src/server/rooms/live-data-ops.js +369 -0
  122. package/src/server/rooms/live-data-rooms.js +965 -0
  123. package/src/server/rooms/live-data-tags.js +49 -0
  124. package/src/server/rooms/live-page-history.js +41 -0
  125. package/src/server/rooms/live-provenance.js +142 -0
  126. package/src/server/rooms/page-admission.js +79 -0
  127. package/src/server/rooms/page-conversion.js +62 -0
  128. package/src/server/rooms/page-rebase.js +108 -0
  129. package/src/server/rooms/page-state.js +91 -0
  130. package/src/server/rooms/page-write-admission.js +63 -0
  131. package/src/server/rooms/page-write-guard.js +23 -0
  132. package/src/server/rooms/recent.js +18 -0
  133. package/src/server/rooms/spec-wire.js +17 -0
  134. package/src/standalone.js +22 -0
  135. package/src/sync/conflict-revert.js +2 -0
  136. package/src/sync/conflicts.js +2 -2
  137. package/src/sync/live-sync.js +36 -8
  138. package/src/sync/stream.js +62 -16
  139. package/src/ui/index.js +4 -0
  140. package/src/ui/toast.js +21 -5
  141. package/src/vendor/pierre/pierre.vendor.js +3 -0
  142. package/src/vendor/sap-core.vendor.js +9 -0
  143. package/src/vendor/sap-ownership.vendor.js +111 -0
  144. package/src/vendor/yjs.vendor.js +7 -0
  145. package/src/page/binding.js +0 -647
  146. package/src/page/replay.js +0 -578
@@ -0,0 +1,46 @@
1
+ @layer page {
2
+ article[data-page] {
3
+ --page-link: #164583;
4
+ --page-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
5
+ min-height: 100vh;
6
+ box-sizing: border-box;
7
+ padding: var(--page-pad-top) 16px 30vh;
8
+ background: var(--page-bg);
9
+ color: var(--page-ink);
10
+ font-family: var(--page-font);
11
+ font-size: var(--page-font-size);
12
+ line-height: var(--page-line-height);
13
+ overflow-wrap: break-word;
14
+ }
15
+ article[data-page] ::selection { background: var(--page-selection); }
16
+ article[data-page] > * { max-width: var(--page-measure); margin: var(--page-block-gap) auto; }
17
+ article[data-page] > h1 { font-family: var(--page-font-display); font-size: var(--page-h1-size); font-weight: var(--page-h1-weight); letter-spacing: var(--page-h1-tracking); line-height: var(--page-h1-line); color: var(--page-ink-strong); margin-block: 0 0.6em; }
18
+ article[data-page] > h2 { font-family: var(--page-font-heading); font-size: var(--page-h2-size); font-weight: var(--page-h2-weight); color: var(--page-ink-strong); line-height: 1.35; margin-block-start: 1.4em; }
19
+ article[data-page] > h3 { font-family: var(--page-font-heading); font-size: var(--page-h3-size); font-weight: var(--page-h3-weight); color: var(--page-ink-strong); margin-block-start: 1.2em; }
20
+ article[data-page] a { color: var(--page-link, var(--page-accent)); }
21
+ article[data-page] code { font-family: var(--page-font-mono); font-size: 0.88em; background: var(--page-code-bg); color: var(--page-code-ink); border-radius: 4px; padding: 0.1em 0.3em; }
22
+ article[data-page] pre { position: relative; padding: 32px 14px 12px; font-family: var(--page-font-mono); font-size: 0.88em; background: var(--page-code-bg); color: var(--page-code-ink); border-radius: 8px; white-space: pre-wrap; overflow-wrap: anywhere; }
23
+ article[data-page] pre[data-lang] { white-space: pre; overflow-wrap: normal; }
24
+ article[data-page] pre code { display: block; overflow-x: auto; background: none; padding: 0; font-size: inherit; }
25
+ article[data-page] .page-callout { background: var(--page-callout-bg); border: 1px solid var(--page-callout-line); border-radius: 8px; padding: 10px 14px; }
26
+ article[data-page] hr { border: 0; border-top: 1px solid var(--page-rule); margin-block: 1.2em; }
27
+ article[data-page] ul, article[data-page] ol { padding-inline-start: var(--page-indent); }
28
+ article[data-page] li { padding-inline-start: 0; }
29
+ article[data-page] li::marker { color: var(--page-marker); }
30
+ article[data-page] li:has(> input[type="checkbox"]) { list-style: none; }
31
+ article[data-page] li > input[type="checkbox"] { appearance: none; width: var(--page-check-size); height: var(--page-check-size); margin: 0 calc(var(--page-indent) - var(--page-check-size)) 0 0; vertical-align: -0.12em; border: 1px solid var(--page-check-border); border-radius: var(--page-check-radius); }
32
+ article[data-page] li > input[type="checkbox"]:checked { background: var(--page-check-fill); border-color: var(--page-check-fill); }
33
+ article[data-page] li > input[type="checkbox"]:checked::after { content: ""; display: block; width: 100%; height: 100%; background: var(--page-check-ink); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.8 8.4l2.9 2.9 5.5-6.4' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 72% no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.8 8.4l2.9 2.9 5.5-6.4' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 72% no-repeat; }
34
+ article[data-page] li:has(> input[type="checkbox"]:checked) { color: var(--page-done-ink); text-decoration: line-through; }
35
+ article[data-page] details { padding-inline-start: var(--page-indent); }
36
+ article[data-page] summary { color: var(--page-toggle-ink); cursor: pointer; }
37
+ article[data-page] figure { max-width: var(--page-measure); }
38
+ article[data-page] figure img, article[data-page] figure svg { display: block; max-width: 100%; height: auto; }
39
+ article[data-page] figcaption { color: var(--page-ink-soft); font-size: 0.88em; text-align: center; }
40
+ article[data-page] [data-type="file"] { padding: 8px 12px; border: 1px solid var(--page-rule); border-radius: 8px; }
41
+ article[data-page] table { width: 100%; border-collapse: collapse; border: 1px solid var(--page-rule); border-radius: 8px; }
42
+ article[data-page] th, article[data-page] td { min-width: 120px; padding: 6px 10px; border-inline-end: 1px solid var(--page-rule); border-block-end: 1px solid var(--page-rule); text-align: start; white-space: pre-wrap; }
43
+ article[data-page] th { background: var(--page-code-bg); color: var(--page-ink-soft); font-weight: 600; }
44
+ article[data-page] th[data-kind="number"], article[data-page] td[data-kind="number"] { text-align: end; }
45
+ article[data-page] blockquote { color: var(--page-ink-soft); border-inline-start: 1px solid var(--page-rule); padding-inline-start: var(--page-indent); }
46
+ }
@@ -0,0 +1,269 @@
1
+ /* Light 1: warm paper, Inter body under a Newsreader serif title, hairline chrome that darkens one small step on movement, from the parent bake-off seat. */
2
+ @import url("https://fonts.googleapis.com/css2?family=Newsreader:opsz,wght@6..72,500&family=Inter:wght@400;500;600&display=swap");
3
+
4
+ @import url("./content.css");
5
+
6
+ :where(article[data-page], .page-shell) {
7
+ --chart-1: #2F5E9E;
8
+ --chart-2: #164583;
9
+ --chart-3: #5B5953;
10
+ --chart-4: #23221F;
11
+ --chart-5: #A1A09B;
12
+ --chart-6: #6B6862;
13
+ --chart-text: #23221F;
14
+ --page-bg: #F7F6F2;
15
+ --page-ink: #23221F;
16
+ --page-ink-strong: #23221F;
17
+ --page-ink-soft: #5B5953;
18
+ --page-ink-faint: #A1A09B;
19
+ --page-rule: rgba(35, 34, 31, 0.08);
20
+ --page-accent: #2F5E9E;
21
+ --page-link: #164583;
22
+ --page-caret: #2F5E9E;
23
+ --page-selection: rgba(88, 120, 170, 0.20);
24
+
25
+ --page-font: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
26
+ --page-font-display: Newsreader, "Iowan Old Style", Georgia, serif;
27
+ --page-font-heading: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
28
+ --page-font-mono: ui-monospace, "SF Mono", Menlo, monospace;
29
+ --page-font-size: 17px;
30
+ --page-line-height: 1.65;
31
+ --page-measure: 632px;
32
+ --page-pad-top: 120px;
33
+ --page-h1-size: 40px;
34
+ --page-h1-weight: 500;
35
+ --page-h1-tracking: -0.01em;
36
+ --page-h1-line: 1.15;
37
+ --page-h2-size: 19px;
38
+ --page-h2-weight: 600;
39
+ --page-h3-size: 17px;
40
+ --page-h3-weight: 600;
41
+ --page-block-gap: 0.8em;
42
+ --page-indent: 26px;
43
+
44
+ --page-marker: #5B5953;
45
+ --page-check-size: 15px;
46
+ --page-check-radius: 4px;
47
+ --page-check-border: rgba(35, 34, 31, 0.30);
48
+ --page-check-fill: #5B5953;
49
+ --page-check-ink: #F7F6F2;
50
+ --page-done-ink: #5B5953;
51
+ --page-toggle-ink: #5B5953;
52
+ --page-callout-bg: rgba(35, 34, 31, 0.035);
53
+ --page-callout-line: transparent;
54
+ --page-code-bg: rgba(35, 34, 31, 0.045);
55
+ --page-code-ink: #23221F;
56
+
57
+ --page-chrome-ink-rest: rgba(35, 34, 31, 0.16);
58
+ --page-chrome-ink-moved: rgba(35, 34, 31, 0.30);
59
+ --page-chrome-bg-rest: rgba(35, 34, 31, 0.025);
60
+ --page-chrome-bg-moved: rgba(35, 34, 31, 0.045);
61
+ --page-chrome-line-rest: rgba(35, 34, 31, 0.16);
62
+ --page-chrome-line-moved: rgba(35, 34, 31, 0.30);
63
+ --page-chrome-shadow-rest: none;
64
+ --page-chrome-shadow-moved: none;
65
+ --page-chrome-radius: 7px;
66
+ --page-plus-size: 24px;
67
+ --page-fade: 250ms;
68
+
69
+ --page-pop-bg: #FBFAF7;
70
+ --page-pop-ink: #23221F;
71
+ --page-pop-muted: #5B5953;
72
+ --page-pop-line: rgba(35, 34, 31, 0.08);
73
+ --page-pop-shadow: 0 1px 2px rgba(35, 34, 31, 0.05), 0 8px 24px rgba(35, 34, 31, 0.07);
74
+ --page-pop-hover: rgba(35, 34, 31, 0.06);
75
+ --page-pop-radius: 12px;
76
+ --page-bar-bg: #F7F6F2;
77
+ --page-bar-ink: #5B5953;
78
+ --page-scrim: rgba(35, 34, 31, 0.10);
79
+
80
+ -webkit-font-smoothing: antialiased;
81
+ }
82
+
83
+ article[data-page] figure[data-type="chart"] { --chart-1: #2F5E9E; --chart-2: #164583; --chart-3: #5B5953; --chart-4: #23221F; --chart-5: #A1A09B; --chart-6: #6B6862; --chart-text: #23221F; max-width: 100%; }
84
+ article[data-page] figure[data-type="chart"] > svg { display: block; width: 100%; height: auto; color: var(--chart-text); font: 12px Inter, sans-serif; }
85
+
86
+ :is(article[data-page], .page-shell) .page-li {
87
+ --page-block-gap: 0.35em;
88
+ }
89
+
90
+ :is(article[data-page], .page-shell .page-editor) > h1:first-child {
91
+ margin-bottom: 0.7em;
92
+ }
93
+
94
+ :is(article[data-page], .page-shell .page-editor) > h2 {
95
+ margin-top: 1.6em;
96
+ line-height: 1.4;
97
+ }
98
+
99
+ :is(article[data-page], .page-shell) .page-li[data-kind="bullet"][data-indent="1"]::before,
100
+ :is(article[data-page], .page-shell) .page-li[data-kind="bullet"][data-indent="3"]::before,
101
+ :is(article[data-page], .page-shell) .page-li[data-kind="bullet"][data-indent="5"]::before,
102
+ :is(article[data-page], .page-shell) .page-li[data-kind="bullet"][data-indent="7"]::before {
103
+ background: none;
104
+ border: 1.5px solid currentColor;
105
+ }
106
+
107
+ :is(article[data-page], .page-shell) .page-li[data-kind="ordered"]::before {
108
+ font-size: 15px;
109
+ font-variant-numeric: tabular-nums;
110
+ }
111
+
112
+ :is(article[data-page], .page-shell) .page-li[data-kind="check"]::before {
113
+ border-width: 1.5px;
114
+ }
115
+
116
+ :is(article[data-page], .page-shell) .page-li[data-kind="check"][data-checked="true"] {
117
+ text-decoration-color: rgba(35, 34, 31, 0.30);
118
+ }
119
+
120
+ .page-shell .page-toggle-button::before {
121
+ content: "";
122
+ display: block;
123
+ width: 22px;
124
+ height: 22px;
125
+ background: currentColor;
126
+ clip-path: polygon(37.5% 28%, 65.6% 50%, 37.5% 72%);
127
+ }
128
+
129
+ .page-shell .page-dock {
130
+ gap: 2px;
131
+ padding: 4px;
132
+ border-radius: 10px;
133
+ }
134
+
135
+ .page-shell .page-dock .page-tool,
136
+ .page-shell .page-bubble .page-tool {
137
+ width: 30px;
138
+ height: 28px;
139
+ border-radius: 6px;
140
+ font: 600 13px/1 Inter, system-ui, sans-serif;
141
+ }
142
+
143
+ .page-shell .page-dock .page-tool svg,
144
+ .page-shell .page-bubble .page-tool svg {
145
+ width: 15px;
146
+ height: 15px;
147
+ }
148
+
149
+ .page-shell .page-dock .page-tool-turn {
150
+ width: auto;
151
+ gap: 4px;
152
+ padding: 0 8px;
153
+ font-weight: 500;
154
+ }
155
+
156
+ .page-shell .page-tool-sep {
157
+ width: 1px;
158
+ height: 16px;
159
+ margin: 0 3px;
160
+ background: currentColor;
161
+ opacity: 0.5;
162
+ }
163
+
164
+ .page-shell .page-plus svg {
165
+ width: 12px;
166
+ height: 12px;
167
+ }
168
+
169
+ .page-shell .page-bubble {
170
+ gap: 1px;
171
+ padding: 3px;
172
+ border-radius: 9px;
173
+ color: #5B5953;
174
+ }
175
+
176
+ .page-shell .page-menu {
177
+ width: 264px;
178
+ padding: 6px;
179
+ font-size: 14px;
180
+ }
181
+
182
+ .page-shell .page-menu-title {
183
+ padding: 6px 10px 8px;
184
+ font-size: 13px;
185
+ color: #5B5953;
186
+ opacity: 0.7;
187
+ }
188
+
189
+ .page-shell .page-menu-item {
190
+ gap: 10px;
191
+ padding: 6px 10px;
192
+ border-radius: 7px;
193
+ }
194
+
195
+ .page-shell .page-menu-icon {
196
+ flex: none;
197
+ display: grid;
198
+ place-items: center;
199
+ width: 26px;
200
+ height: 26px;
201
+ border-radius: 6px;
202
+ border: 1px solid rgba(35, 34, 31, 0.08);
203
+ color: #5B5953;
204
+ font: 500 12px/1 Inter, system-ui, sans-serif;
205
+ }
206
+
207
+ .page-shell .page-menu-icon svg {
208
+ width: 14px;
209
+ height: 14px;
210
+ }
211
+
212
+ .page-shell .page-menu-hint {
213
+ margin-left: auto;
214
+ color: #5B5953;
215
+ opacity: 0.6;
216
+ font: 400 12px/1 ui-monospace, Menlo, monospace;
217
+ }
218
+
219
+ @media (max-width: 560px) {
220
+ :where(article[data-page], .page-shell) {
221
+ --page-font-size: 16px;
222
+ --page-pad-top: 64px;
223
+ --page-h1-size: 30px;
224
+ --page-indent: 20px;
225
+ }
226
+
227
+ :is(article[data-page], .page-shell .page-editor) > h1:first-child {
228
+ margin-bottom: 0.67em;
229
+ }
230
+
231
+ .page-shell .page-bubble {
232
+ border-radius: 0;
233
+ border-width: 1px 0 0;
234
+ border-color: rgba(35, 34, 31, 0.08);
235
+ box-shadow: none;
236
+ }
237
+
238
+ .page-shell .page-bubble .page-tool {
239
+ width: 44px;
240
+ height: 44px;
241
+ }
242
+
243
+ .page-shell .page-plus {
244
+ width: 36px;
245
+ height: 36px;
246
+ border-radius: 10px;
247
+ }
248
+
249
+ .page-shell .page-menu {
250
+ width: auto;
251
+ padding: 6px 8px calc(14px + env(safe-area-inset-bottom));
252
+ border-radius: 16px 16px 0 0;
253
+ border-bottom: 0;
254
+ font-size: 16px;
255
+ }
256
+
257
+ .page-shell .page-menu-item {
258
+ min-height: 48px;
259
+ }
260
+
261
+ .page-shell .page-menu-icon {
262
+ width: 32px;
263
+ height: 32px;
264
+ }
265
+
266
+ .page-shell .page-menu-hint {
267
+ display: none;
268
+ }
269
+ }
@@ -0,0 +1,211 @@
1
+ /* Light 2: margin ink, a warm paper page set in Newsreader with deep green ink accents and a dark selection bar, from the Opus bake-off seat. */
2
+ @import url("https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400&display=swap");
3
+
4
+ @import url("./content.css");
5
+
6
+ :where(article[data-page], .page-shell) {
7
+ --chart-1: #2f5d50;
8
+ --chart-2: #18473b;
9
+ --chart-3: #57534c;
10
+ --chart-4: #23211e;
11
+ --chart-5: #8f8a81;
12
+ --chart-6: #2a2825;
13
+ --chart-text: #23211e;
14
+ --page-bg: #faf8f4;
15
+ --page-ink: #23211e;
16
+ --page-ink-strong: #23211e;
17
+ --page-ink-soft: #57534c;
18
+ --page-ink-faint: #8f8a81;
19
+ --page-rule: #e7e3db;
20
+ --page-accent: #2f5d50;
21
+ --page-link: #18473b;
22
+ --page-caret: #2f5d50;
23
+ --page-selection: #e3ddcd;
24
+
25
+ --page-font: "Newsreader", "Iowan Old Style", "Charter", Georgia, serif;
26
+ --page-font-display: "Newsreader", "Iowan Old Style", "Charter", Georgia, serif;
27
+ --page-font-heading: "Newsreader", "Iowan Old Style", "Charter", Georgia, serif;
28
+ --page-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
29
+ --page-font-size: 18.5px;
30
+ --page-line-height: 1.68;
31
+ --page-measure: 39rem;
32
+ --page-pad-top: 118px;
33
+ --page-h1-size: 2.15em;
34
+ --page-h1-weight: 500;
35
+ --page-h1-tracking: -0.012em;
36
+ --page-h1-line: 1.15;
37
+ --page-h2-size: 1.12em;
38
+ --page-h2-weight: 600;
39
+ --page-h3-size: 1em;
40
+ --page-h3-weight: 600;
41
+ --page-block-gap: 0.85em;
42
+ --page-indent: 1.5em;
43
+
44
+ --page-marker: #8f8a81;
45
+ --page-check-size: 17px;
46
+ --page-check-radius: 4px;
47
+ --page-check-border: #8f8a81;
48
+ --page-check-fill: #2f5d50;
49
+ --page-check-ink: #f4f1ea;
50
+ --page-done-ink: #8f8a81;
51
+ --page-toggle-ink: #57534c;
52
+ --page-callout-bg: #f3f0e9;
53
+ --page-callout-line: #e7e3db;
54
+ --page-code-bg: #f1eee7;
55
+ --page-code-ink: #23211e;
56
+
57
+ --page-chrome-ink-rest: #cbc6bc;
58
+ --page-chrome-ink-moved: #aea89d;
59
+ --page-chrome-bg-rest: rgba(250, 248, 244, .88);
60
+ --page-chrome-bg-moved: rgba(250, 248, 244, .92);
61
+ --page-chrome-line-rest: #ebe7df;
62
+ --page-chrome-line-moved: #ddd8ce;
63
+ --page-chrome-shadow-rest: none;
64
+ --page-chrome-shadow-moved: none;
65
+ --page-chrome-radius: 7px;
66
+ --page-plus-size: 26px;
67
+ --page-fade: 400ms;
68
+
69
+ --page-pop-bg: #fdfcf9;
70
+ --page-pop-ink: #23211e;
71
+ --page-pop-muted: #8f8a81;
72
+ --page-pop-line: #e2ddd3;
73
+ --page-pop-shadow: 0 1px 2px rgba(40, 34, 24, .05), 0 8px 24px -8px rgba(40, 34, 24, .14);
74
+ --page-pop-hover: #f1eee7;
75
+ --page-pop-radius: 11px;
76
+ --page-bar-bg: #2a2825;
77
+ --page-bar-ink: #ece8e0;
78
+ --page-scrim: rgba(40, 34, 24, .10);
79
+
80
+ -webkit-font-smoothing: antialiased;
81
+ }
82
+
83
+ article[data-page] figure[data-type="chart"] { --chart-1: #2f5d50; --chart-2: #18473b; --chart-3: #57534c; --chart-4: #23211e; --chart-5: #8f8a81; --chart-6: #2a2825; --chart-text: #23211e; max-width: 100%; }
84
+ article[data-page] figure[data-type="chart"] > svg { display: block; width: 100%; height: auto; color: var(--chart-text); font: 12px Newsreader, serif; }
85
+
86
+ :is(article[data-page], .page-shell .page-editor) h1 { margin: 0 0 .7em; }
87
+ :is(article[data-page], .page-shell .page-editor) h2 { line-height: 1.3; margin: 1.9em 0 .45em; }
88
+ :is(article[data-page], .page-shell .page-editor) h3 { line-height: 1.35; margin: 1.5em 0 .35em; }
89
+ :is(article[data-page], .page-shell .page-editor) > .page-li + .page-li { margin-top: .15em; }
90
+ :is(article[data-page], .page-shell .page-editor) > .page-li[data-kind="check"]::before { border-width: 1.5px; }
91
+ :is(article[data-page], .page-shell .page-editor) > .page-li[data-checked="true"] {
92
+ text-decoration: line-through;
93
+ text-decoration-color: #8f8a81;
94
+ text-decoration-thickness: 1px;
95
+ }
96
+ :is(article[data-page], .page-shell .page-editor) hr { border: 0; border-top: 1px solid #e7e3db; }
97
+ :is(article[data-page], .page-shell .page-editor) figcaption { color: #8f8a81; font-size: .85em; }
98
+
99
+ .page-shell .page-dock {
100
+ gap: 2px;
101
+ padding: 4px;
102
+ border-radius: 9px;
103
+ font: 500 12.5px/1 -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
104
+ }
105
+ .page-shell .page-dock .page-tool {
106
+ height: 26px;
107
+ min-width: 26px;
108
+ padding: 0 6px;
109
+ gap: 4px;
110
+ border-radius: 6px;
111
+ }
112
+ .page-shell .page-dock .page-tool-sep { width: 1px; height: 14px; margin: 0 4px; }
113
+
114
+ .page-shell .page-plus { border-radius: 7px; }
115
+
116
+ .page-shell .page-bubble {
117
+ gap: 1px;
118
+ padding: 4px;
119
+ background: #2a2825;
120
+ color: #ece8e0;
121
+ border: 0;
122
+ border-radius: 9px;
123
+ box-shadow: 0 6px 18px -6px rgba(30, 26, 20, .35);
124
+ font: 500 13px/1 -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
125
+ }
126
+ .page-shell .page-bubble .page-tool {
127
+ height: 28px;
128
+ min-width: 28px;
129
+ padding: 0 7px;
130
+ border-radius: 6px;
131
+ color: #ece8e0;
132
+ background: transparent;
133
+ }
134
+ .page-shell .page-bubble .page-tool:hover { background: rgba(236, 232, 224, .14); }
135
+ .page-shell .page-bubble .page-tool-sep { background: rgba(236, 232, 224, .20); height: 16px; margin: 0 4px; }
136
+
137
+ .page-shell .page-menu {
138
+ width: 268px;
139
+ padding: 6px;
140
+ font: 14px/1.2 -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
141
+ }
142
+ .page-shell .page-menu-title {
143
+ padding: 7px 8px 9px;
144
+ margin-bottom: 4px;
145
+ border-bottom: 1px solid #e7e3db;
146
+ color: #8f8a81;
147
+ font-size: 13px;
148
+ letter-spacing: 0;
149
+ text-transform: none;
150
+ }
151
+ .page-shell .page-menu-item {
152
+ gap: 11px;
153
+ height: 34px;
154
+ padding: 0 8px;
155
+ border-radius: 7px;
156
+ }
157
+ .page-shell .page-menu-icon {
158
+ width: 24px;
159
+ height: 24px;
160
+ border: 1px solid #e7e3db;
161
+ border-radius: 6px;
162
+ display: grid;
163
+ place-items: center;
164
+ color: #57534c;
165
+ font: 600 11px/1 -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
166
+ }
167
+ .page-shell .page-menu-label { flex: 1; }
168
+ .page-shell .page-menu-hint { color: #8f8a81; font: 11.5px/1 ui-monospace, "SF Mono", Menlo, Consolas, monospace; }
169
+ .page-shell .page-menu-item[aria-selected="true"] .page-menu-icon {
170
+ border-color: #e2ddd3;
171
+ background: #fdfcf9;
172
+ color: #23211e;
173
+ }
174
+
175
+ @media (prefers-reduced-motion: reduce) {
176
+ .page-shell { --page-fade: 0ms; }
177
+ }
178
+
179
+ @media (max-width: 560px) {
180
+ :where(article[data-page], .page-shell) {
181
+ --page-font-size: 17.5px;
182
+ --page-line-height: 1.62;
183
+ --page-pad-top: 76px;
184
+ --page-h1-size: 1.85em;
185
+ }
186
+ .page-shell .page-plus {
187
+ width: 44px;
188
+ height: 44px;
189
+ border-radius: 12px;
190
+ background: #faf8f4;
191
+ }
192
+ .page-shell .page-bubble {
193
+ height: 50px;
194
+ padding: 0 6px;
195
+ border-radius: 13px;
196
+ gap: 0;
197
+ justify-content: space-between;
198
+ }
199
+ .page-shell .page-bubble .page-tool { min-width: 38px; height: 38px; padding: 0 6px; }
200
+ .page-shell .page-bubble .page-tool-sep { display: none; }
201
+ .page-shell .page-menu {
202
+ width: auto;
203
+ padding: 6px 12px 22px;
204
+ border-radius: 16px 16px 0 0;
205
+ border-width: 1px 0 0;
206
+ font-size: 16px;
207
+ }
208
+ .page-shell .page-menu-title { padding: 6px 8px 12px; font-size: 14px; }
209
+ .page-shell .page-menu-item { height: 48px; padding: 0 10px; gap: 14px; border-radius: 10px; }
210
+ .page-shell .page-menu-icon { width: 30px; height: 30px; border-radius: 8px; }
211
+ }
@@ -0,0 +1,130 @@
1
+ /* Light 3: sage-grey paper with a Georgia title, quiet green-grey chrome and soft wash highlights, from the Codex bake-off seat. */
2
+
3
+ @import url("./content.css");
4
+
5
+ :where(article[data-page], .page-shell) {
6
+ --chart-1: #3c5039;
7
+ --chart-2: #303931;
8
+ --chart-3: #727c70;
9
+ --chart-4: #495048;
10
+ --chart-5: #8c9187;
11
+ --chart-6: #c9cdbe;
12
+ --chart-text: #495048;
13
+ --page-bg: #f8f7f3;
14
+ --page-ink: #495048;
15
+ --page-ink-strong: #303931;
16
+ --page-ink-soft: #727c70;
17
+ --page-ink-faint: #8c9187;
18
+ --page-rule: #e3e5dc;
19
+ --page-accent: #3c5039;
20
+ --page-caret: #303931;
21
+ --page-selection: #e0e7d8;
22
+
23
+ --page-font: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
24
+ --page-font-display: Georgia, "Times New Roman", serif;
25
+ --page-font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
26
+ --page-font-size: 16px;
27
+ --page-line-height: 1.72;
28
+ --page-measure: 650px;
29
+ --page-pad-top: 115px;
30
+ --page-h1-size: 38px;
31
+ --page-h1-weight: 400;
32
+ --page-h1-tracking: -0.034em;
33
+ --page-h1-line: 1.18;
34
+ --page-h2-size: 14px;
35
+ --page-h2-weight: 600;
36
+ --page-h3-size: 13px;
37
+ --page-h3-weight: 600;
38
+ --page-block-gap: 1.3em;
39
+ --page-indent: 1.375em;
40
+
41
+ --page-marker: #727c70;
42
+ --page-check-size: 15px;
43
+ --page-check-radius: 3px;
44
+ --page-check-border: #8c9187;
45
+ --page-check-fill: #eef0e8;
46
+ --page-check-ink: #727c70;
47
+ --page-done-ink: #8c9187;
48
+ --page-toggle-ink: #727c70;
49
+ --page-callout-bg: #eef0e8;
50
+ --page-callout-line: transparent;
51
+ --page-code-bg: rgba(48, 57, 49, 0.05);
52
+ --page-code-ink: #303931;
53
+
54
+ --page-chrome-ink-rest: rgba(114, 124, 112, 0.40);
55
+ --page-chrome-ink-moved: rgba(114, 124, 112, 0.59);
56
+ --page-chrome-bg-rest: rgba(252, 251, 248, 0.40);
57
+ --page-chrome-bg-moved: rgba(252, 251, 248, 0.59);
58
+ --page-chrome-line-rest: rgba(201, 205, 190, 0.40);
59
+ --page-chrome-line-moved: rgba(201, 205, 190, 0.59);
60
+ --page-chrome-shadow-rest: none;
61
+ --page-chrome-shadow-moved: none;
62
+ --page-chrome-radius: 9px;
63
+ --page-plus-size: 27px;
64
+ --page-fade: 220ms;
65
+
66
+ --page-pop-bg: #fcfbf8;
67
+ --page-pop-ink: #495048;
68
+ --page-pop-muted: #8c9187;
69
+ --page-pop-line: #e3e5dc;
70
+ --page-pop-shadow: 0 5px 20px rgba(36, 44, 32, 0.06), 0 1px 3px rgba(36, 44, 32, 0.03);
71
+ --page-pop-hover: #eef0e8;
72
+ --page-pop-radius: 12px;
73
+ --page-bar-bg: #fcfbf8;
74
+ --page-bar-ink: #727c70;
75
+ --page-scrim: rgba(36, 44, 32, 0.12);
76
+ }
77
+
78
+ article[data-page] figure[data-type="chart"] { --chart-1: #3c5039; --chart-2: #303931; --chart-3: #727c70; --chart-4: #495048; --chart-5: #8c9187; --chart-6: #c9cdbe; --chart-text: #495048; max-width: 100%; }
79
+ article[data-page] figure[data-type="chart"] > svg { display: block; width: 100%; height: auto; color: var(--chart-text); font: 12px system-ui, sans-serif; }
80
+
81
+ :is(article[data-page], .page-shell .page-editor) { letter-spacing: 0.002em; }
82
+ :is(article[data-page], .page-shell .page-editor) h1 { margin-block: 0 0.74em; }
83
+ :is(article[data-page], .page-shell .page-editor) h2 { margin-block: 1.9em 0.78em; line-height: 1.6; letter-spacing: 0.003em; }
84
+ :is(article[data-page], .page-shell .page-editor) h3 { margin-block: 1.6em 0.6em; line-height: 1.6; }
85
+
86
+ :is(article[data-page], .page-shell .page-editor) .page-li { margin-block: 0.15em; }
87
+ :is(article[data-page], .page-shell .page-editor) .page-li[data-kind="bullet"][data-indent="1"]::before,
88
+ :is(article[data-page], .page-shell .page-editor) .page-li[data-kind="bullet"][data-indent="3"]::before,
89
+ :is(article[data-page], .page-shell .page-editor) .page-li[data-kind="bullet"][data-indent="5"]::before,
90
+ :is(article[data-page], .page-shell .page-editor) .page-li[data-kind="bullet"][data-indent="7"]::before { background: none; border: 1.5px solid currentColor; }
91
+ :is(article[data-page], .page-shell .page-editor) .page-li[data-kind="check"] { margin-block: 0.25em; }
92
+ :is(article[data-page], .page-shell .page-editor) .page-li[data-kind="check"][data-checked="true"] { text-decoration-color: #e3e5dc; }
93
+
94
+ .page-shell .page-dock { gap: 2px; padding: 3px 5px; }
95
+ .page-shell .page-tool { min-width: 28px; height: 28px; border-radius: 5px; }
96
+ .page-shell .page-tool svg { width: 16px; height: 16px; }
97
+ .page-shell .page-tool-turn { padding: 0 8px; font-size: 12px; }
98
+ .page-shell .page-tool-sep { height: 14px; margin: 0 4px; }
99
+
100
+ .page-shell .page-plus { border-radius: 7px; }
101
+ .page-shell .page-plus svg { width: 16px; height: 16px; }
102
+
103
+ .page-shell .page-bubble { gap: 2px; padding: 5px; border-radius: 9px; color: #727c70; }
104
+ .page-shell .page-bubble .page-tool { width: 30px; height: 29px; }
105
+
106
+ .page-shell .page-menu { width: 264px; padding: 13px 7px 7px; }
107
+ .page-shell .page-menu-title { padding: 0 9px 10px; font-size: 11px; line-height: 1.5; color: #8c9187; }
108
+ .page-shell .page-menu-item { gap: 12px; min-height: 39px; padding: 7px 10px; border-radius: 6px; font-size: 13px; }
109
+ .page-shell .page-menu-icon { color: #727c70; }
110
+ .page-shell .page-menu-hint { font-size: 11px; color: #8c9187; }
111
+ .page-shell .page-menu-item[aria-selected="true"],
112
+ .page-shell .page-menu-item[aria-selected="true"] .page-menu-icon { color: #3c5039; }
113
+
114
+ @media (max-width: 560px) {
115
+ :where(article[data-page], .page-shell) {
116
+ --page-font-size: 15px;
117
+ --page-line-height: 1.7;
118
+ --page-pad-top: 63px;
119
+ --page-h1-size: 32px;
120
+ --page-h1-tracking: -0.028em;
121
+ }
122
+ .page-shell .page-plus { width: 44px; height: 44px; border-radius: 10px; }
123
+ .page-shell .page-plus svg { width: 18px; height: 18px; }
124
+ .page-shell .page-bubble { min-height: 44px; padding: 5px 4px; border-radius: 10px; box-shadow: 0 2px 10px rgba(36, 44, 32, 0.04); }
125
+ .page-shell .page-bubble .page-tool { min-width: 24px; width: auto; height: 32px; padding: 0 5px; }
126
+ .page-shell .page-menu { width: 100%; padding: 10px 12px 16px; border-radius: 17px 17px 0 0; box-shadow: 0 -6px 24px rgba(20, 30, 20, 0.05); }
127
+ .page-shell .page-menu::before { content: ""; display: block; width: 30px; height: 3px; margin: 0 auto 15px; border-radius: 3px; background: #e3e5dc; }
128
+ .page-shell .page-menu-title { padding: 0 10px 11px; font-size: 12px; }
129
+ .page-shell .page-menu-item { gap: 14px; min-height: 46px; padding: 10px 12px; font-size: 14px; }
130
+ }