@cosxai/ui 0.1.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.
- package/package.json +38 -0
- package/src/actionbar/ActionBar.tsx +436 -0
- package/src/actionbar/ActionBarButton.tsx +110 -0
- package/src/actionbar/ActionBarMenuGroup.tsx +106 -0
- package/src/actionbar/ActionBarProvider.tsx +76 -0
- package/src/actionbar/actionbar-context.ts +23 -0
- package/src/actionbar/index.ts +13 -0
- package/src/actionbar/types.ts +50 -0
- package/src/actionbar/useActionBarItems.ts +47 -0
- package/src/ambient/AmbientBackdrop.tsx +74 -0
- package/src/ambient/CommandInput.tsx +107 -0
- package/src/ambient/SuperbarStrip.tsx +36 -0
- package/src/ambient/index.ts +6 -0
- package/src/bento/BentoCell.tsx +66 -0
- package/src/bento/BentoGrid.tsx +42 -0
- package/src/bento/index.ts +2 -0
- package/src/command/CommandPalette.tsx +277 -0
- package/src/command/CommandProvider.tsx +57 -0
- package/src/command/command-context.ts +12 -0
- package/src/command/index.ts +6 -0
- package/src/command/rank.ts +45 -0
- package/src/command/types.ts +26 -0
- package/src/command/useCommandSource.ts +37 -0
- package/src/dialogs/DialogsProvider.tsx +216 -0
- package/src/dialogs/Modal.tsx +204 -0
- package/src/dialogs/Toast.tsx +85 -0
- package/src/dialogs/dialogs-context.ts +6 -0
- package/src/dialogs/index.ts +10 -0
- package/src/dialogs/types.ts +37 -0
- package/src/dialogs/useDialogs.ts +8 -0
- package/src/editorial/EditorialSpotlight.tsx +63 -0
- package/src/editorial/Folio.tsx +52 -0
- package/src/editorial/PlateMarker.tsx +33 -0
- package/src/editorial/RomanSection.tsx +65 -0
- package/src/editorial/RunningMarginalia.tsx +65 -0
- package/src/editorial/index.ts +10 -0
- package/src/frutiger/GlossyOrb.tsx +79 -0
- package/src/frutiger/SkyBackdrop.tsx +114 -0
- package/src/frutiger/index.ts +2 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useKeyboardHotkey.ts +80 -0
- package/src/hooks/useReducedMotion.ts +20 -0
- package/src/hooks/useViewport.ts +61 -0
- package/src/index.ts +26 -0
- package/src/layout/Breadcrumb.tsx +74 -0
- package/src/layout/LeftNavRail.tsx +126 -0
- package/src/layout/MobileTabBar.tsx +101 -0
- package/src/layout/NavItem.tsx +128 -0
- package/src/layout/NavSearchTrigger.tsx +88 -0
- package/src/layout/NavSection.tsx +40 -0
- package/src/layout/RightSidebarPanel.tsx +111 -0
- package/src/layout/Shell.tsx +91 -0
- package/src/layout/StickyBanner.tsx +83 -0
- package/src/layout/Topbar.tsx +68 -0
- package/src/layout/index.ts +22 -0
- package/src/layout/useNavRailState.ts +69 -0
- package/src/lib/cn.ts +7 -0
- package/src/lib/time-utils.ts +44 -0
- package/src/neobrutalism/Marquee.tsx +81 -0
- package/src/neobrutalism/Sticker.tsx +71 -0
- package/src/neobrutalism/index.ts +4 -0
- package/src/primitives/Avatar.tsx +53 -0
- package/src/primitives/Button.tsx +30 -0
- package/src/primitives/Card.tsx +41 -0
- package/src/primitives/Checkbox.tsx +78 -0
- package/src/primitives/CountBadge.tsx +50 -0
- package/src/primitives/Input.tsx +71 -0
- package/src/primitives/Kbd.tsx +45 -0
- package/src/primitives/PageHeader.tsx +77 -0
- package/src/primitives/Tag.tsx +56 -0
- package/src/primitives/Textarea.tsx +62 -0
- package/src/primitives/ToggleSwitch.tsx +79 -0
- package/src/primitives/Tooltip.tsx +171 -0
- package/src/primitives/index.ts +24 -0
- package/src/pwa/InstallPromptBanner.tsx +132 -0
- package/src/pwa/index.ts +4 -0
- package/src/pwa/manifest.template.json +20 -0
- package/src/pwa/registerSW.ts +55 -0
- package/src/riso/Halftone.tsx +85 -0
- package/src/riso/Misregister.tsx +63 -0
- package/src/riso/RisoStamp.tsx +76 -0
- package/src/riso/index.ts +3 -0
- package/src/sketch/HandUnderline.tsx +53 -0
- package/src/sketch/RoughArrow.tsx +91 -0
- package/src/sketch/RoughBox.tsx +73 -0
- package/src/sketch/StickyNote.tsx +56 -0
- package/src/sketch/index.ts +4 -0
- package/src/styles/base.css +80 -0
- package/src/styles/chrome-ambient.css +222 -0
- package/src/styles/chrome-bento.css +184 -0
- package/src/styles/chrome-editorial.css +145 -0
- package/src/styles/chrome-frutiger.css +364 -0
- package/src/styles/chrome-neobrutalism.css +315 -0
- package/src/styles/chrome-riso.css +328 -0
- package/src/styles/chrome-sketch.css +351 -0
- package/src/styles/chrome-swiss.css +232 -0
- package/src/styles/chrome-terminal.css +235 -0
- package/src/styles/fonts.css +22 -0
- package/src/styles/index.css +198 -0
- package/src/styles/tokens.css +976 -0
- package/src/terminal/AsciiBox.tsx +65 -0
- package/src/terminal/BrailleSpinner.tsx +46 -0
- package/src/terminal/index.ts +4 -0
- package/src/theme/ThemeProvider.tsx +93 -0
- package/src/theme/index.ts +5 -0
- package/src/theme/inline-script.ts +36 -0
- package/src/theme/theme-context.ts +7 -0
- package/src/theme/types.ts +22 -0
- package/src/theme/useTheme.ts +8 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/* Risograph / Zine Print chrome — DIY print culture as a digital
|
|
2
|
+
aesthetic. Paper canvas + fluorescent ink + halftone dots + ink-
|
|
3
|
+
offset duplicates instead of soft drop shadows + slight rotation
|
|
4
|
+
on tags / cards. Anti-glossy, anti-gradient.
|
|
5
|
+
|
|
6
|
+
Implementation notes:
|
|
7
|
+
- Paper noise is stamped on body via ::before so it sits behind
|
|
8
|
+
all content but inside the chrome scope.
|
|
9
|
+
- "Shadows" in this chrome are not box-shadow blur — they are
|
|
10
|
+
offset solid blocks (3-4px translate, second ink color, no blur).
|
|
11
|
+
- Tags/cards get a tiny rotation via `transform: rotate(...)`.
|
|
12
|
+
We override the existing transform so neobrutalism-style
|
|
13
|
+
hover-translate isn't accidentally inherited.
|
|
14
|
+
- Body is set to a display-leaning sans; we don't bundle a
|
|
15
|
+
specific indie face — consumers can layer one on top via
|
|
16
|
+
`--ck-font-sans`. */
|
|
17
|
+
|
|
18
|
+
html[data-ck-chrome="riso"] body {
|
|
19
|
+
font-family: "Helvetica Neue", "Inter", var(--ck-font-sans);
|
|
20
|
+
font-weight: 500;
|
|
21
|
+
position: relative;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Paper grain overlay — sits on body, pointer-events off. */
|
|
25
|
+
html[data-ck-chrome="riso"] body::before {
|
|
26
|
+
content: "";
|
|
27
|
+
position: fixed;
|
|
28
|
+
inset: 0;
|
|
29
|
+
pointer-events: none;
|
|
30
|
+
background-image: var(--ck-riso-paper);
|
|
31
|
+
background-size: 240px 240px;
|
|
32
|
+
mix-blend-mode: multiply;
|
|
33
|
+
opacity: 0.55;
|
|
34
|
+
z-index: 9999;
|
|
35
|
+
}
|
|
36
|
+
html[data-ck-theme="dark"][data-ck-chrome="riso"] body::before {
|
|
37
|
+
mix-blend-mode: screen;
|
|
38
|
+
opacity: 0.18;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Display headings — chunky, slightly tighter tracking, raw ink */
|
|
42
|
+
html[data-ck-chrome="riso"] h1,
|
|
43
|
+
html[data-ck-chrome="riso"] .ck-h1 {
|
|
44
|
+
font-weight: 900;
|
|
45
|
+
letter-spacing: -0.02em;
|
|
46
|
+
line-height: 0.95;
|
|
47
|
+
text-transform: none;
|
|
48
|
+
}
|
|
49
|
+
html[data-ck-chrome="riso"] h2,
|
|
50
|
+
html[data-ck-chrome="riso"] .ck-h2 {
|
|
51
|
+
font-weight: 800;
|
|
52
|
+
letter-spacing: -0.01em;
|
|
53
|
+
line-height: 1.05;
|
|
54
|
+
}
|
|
55
|
+
html[data-ck-chrome="riso"] h3,
|
|
56
|
+
html[data-ck-chrome="riso"] .ck-h3 {
|
|
57
|
+
font-weight: 700;
|
|
58
|
+
letter-spacing: -0.005em;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* ---------- Buttons — flat ink + offset duplicate "shadow" ---------- */
|
|
62
|
+
html[data-ck-chrome="riso"] .ck-btn,
|
|
63
|
+
html[data-ck-chrome="riso"] .ck-actionbar-btn {
|
|
64
|
+
border-radius: 4px;
|
|
65
|
+
font-weight: 700;
|
|
66
|
+
letter-spacing: 0.01em;
|
|
67
|
+
text-transform: uppercase;
|
|
68
|
+
font-size: 12px;
|
|
69
|
+
height: 38px;
|
|
70
|
+
padding: 0 16px;
|
|
71
|
+
border: 2px solid var(--ck-text-primary);
|
|
72
|
+
box-shadow: 3px 3px 0 var(--ck-text-primary);
|
|
73
|
+
transition: transform 90ms ease, box-shadow 90ms ease, background 90ms ease;
|
|
74
|
+
}
|
|
75
|
+
html[data-ck-chrome="riso"] .ck-btn:hover:not(:disabled),
|
|
76
|
+
html[data-ck-chrome="riso"] .ck-actionbar-btn:hover:not(:disabled) {
|
|
77
|
+
transform: translate(1px, 1px);
|
|
78
|
+
box-shadow: 2px 2px 0 var(--ck-text-primary);
|
|
79
|
+
}
|
|
80
|
+
html[data-ck-chrome="riso"] .ck-btn:active:not(:disabled),
|
|
81
|
+
html[data-ck-chrome="riso"] .ck-actionbar-btn:active:not(:disabled) {
|
|
82
|
+
transform: translate(3px, 3px);
|
|
83
|
+
box-shadow: 0 0 0 var(--ck-text-primary);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
html[data-ck-chrome="riso"] .ck-btn--primary,
|
|
87
|
+
html[data-ck-chrome="riso"] .ck-actionbar-btn--primary {
|
|
88
|
+
background: var(--ck-accent);
|
|
89
|
+
color: #1A1A1A;
|
|
90
|
+
box-shadow: 3px 3px 0 var(--ck-riso-blue);
|
|
91
|
+
}
|
|
92
|
+
html[data-ck-chrome="riso"] .ck-btn--primary:hover:not(:disabled),
|
|
93
|
+
html[data-ck-chrome="riso"] .ck-actionbar-btn--primary:hover:not(:disabled) {
|
|
94
|
+
background: var(--ck-accent-hover);
|
|
95
|
+
box-shadow: 2px 2px 0 var(--ck-riso-blue);
|
|
96
|
+
}
|
|
97
|
+
html[data-ck-chrome="riso"] .ck-btn--primary:active:not(:disabled),
|
|
98
|
+
html[data-ck-chrome="riso"] .ck-actionbar-btn--primary:active:not(:disabled) {
|
|
99
|
+
box-shadow: 0 0 0 var(--ck-riso-blue);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
html[data-ck-chrome="riso"] .ck-btn--secondary {
|
|
103
|
+
background: var(--ck-bg-surface);
|
|
104
|
+
color: var(--ck-text-primary);
|
|
105
|
+
}
|
|
106
|
+
html[data-ck-chrome="riso"] .ck-btn--ghost {
|
|
107
|
+
background: transparent;
|
|
108
|
+
border-color: transparent;
|
|
109
|
+
box-shadow: none;
|
|
110
|
+
color: var(--ck-text-primary);
|
|
111
|
+
text-decoration: underline;
|
|
112
|
+
text-decoration-thickness: 2px;
|
|
113
|
+
text-underline-offset: 4px;
|
|
114
|
+
}
|
|
115
|
+
html[data-ck-chrome="riso"] .ck-btn--ghost:hover:not(:disabled) {
|
|
116
|
+
background: transparent;
|
|
117
|
+
transform: none;
|
|
118
|
+
box-shadow: none;
|
|
119
|
+
color: var(--ck-accent);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* ---------- Inputs — underline-only, ink underline ---------- */
|
|
123
|
+
html[data-ck-chrome="riso"] .ck-input,
|
|
124
|
+
html[data-ck-chrome="riso"] .ck-textarea {
|
|
125
|
+
background: transparent;
|
|
126
|
+
border: none;
|
|
127
|
+
border-bottom: 2px solid var(--ck-text-primary);
|
|
128
|
+
border-radius: 0;
|
|
129
|
+
padding-left: 0;
|
|
130
|
+
padding-right: 0;
|
|
131
|
+
box-shadow: none;
|
|
132
|
+
font-weight: 500;
|
|
133
|
+
color: var(--ck-text-primary);
|
|
134
|
+
}
|
|
135
|
+
html[data-ck-chrome="riso"] .ck-input::placeholder,
|
|
136
|
+
html[data-ck-chrome="riso"] .ck-textarea::placeholder {
|
|
137
|
+
color: var(--ck-text-tertiary);
|
|
138
|
+
font-style: italic;
|
|
139
|
+
}
|
|
140
|
+
html[data-ck-chrome="riso"] .ck-input:focus-visible,
|
|
141
|
+
html[data-ck-chrome="riso"] .ck-textarea:focus-visible {
|
|
142
|
+
outline: none;
|
|
143
|
+
border-bottom-color: var(--ck-accent) !important;
|
|
144
|
+
box-shadow: none !important;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* ---------- Cards — paper plate with offset ink block ---------- */
|
|
148
|
+
html[data-ck-chrome="riso"] .ck-card {
|
|
149
|
+
background: var(--ck-bg-surface);
|
|
150
|
+
border: 2px solid var(--ck-text-primary);
|
|
151
|
+
border-radius: 4px;
|
|
152
|
+
box-shadow: 5px 5px 0 var(--ck-riso-pink);
|
|
153
|
+
overflow: visible;
|
|
154
|
+
}
|
|
155
|
+
html[data-ck-chrome="riso"] .ck-card__head {
|
|
156
|
+
background: transparent;
|
|
157
|
+
border-bottom: 2px dashed var(--ck-border-subtle);
|
|
158
|
+
padding: 14px 20px;
|
|
159
|
+
font-weight: 700;
|
|
160
|
+
letter-spacing: 0.02em;
|
|
161
|
+
text-transform: uppercase;
|
|
162
|
+
font-size: 12px;
|
|
163
|
+
}
|
|
164
|
+
html[data-ck-chrome="riso"] .ck-card__foot {
|
|
165
|
+
background: transparent;
|
|
166
|
+
border-top: 2px dashed var(--ck-border-subtle);
|
|
167
|
+
padding: 12px 20px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Dark mode — switch offset ink to a more legible color on navy */
|
|
171
|
+
html[data-ck-theme="dark"][data-ck-chrome="riso"] .ck-card {
|
|
172
|
+
box-shadow: 5px 5px 0 var(--ck-riso-pink);
|
|
173
|
+
border-color: var(--ck-text-primary);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* ---------- Tags — rubber-stamp feel ---------- */
|
|
177
|
+
html[data-ck-chrome="riso"] [data-ck-tag] {
|
|
178
|
+
background: transparent !important;
|
|
179
|
+
border: 2px solid var(--ck-text-primary) !important;
|
|
180
|
+
border-radius: 4px !important;
|
|
181
|
+
padding: 3px 8px !important;
|
|
182
|
+
font-weight: 800 !important;
|
|
183
|
+
font-size: 10px !important;
|
|
184
|
+
letter-spacing: 0.08em !important;
|
|
185
|
+
text-transform: uppercase !important;
|
|
186
|
+
box-shadow: 2px 2px 0 var(--ck-text-primary) !important;
|
|
187
|
+
color: var(--ck-text-primary) !important;
|
|
188
|
+
display: inline-block !important;
|
|
189
|
+
transform: rotate(-2deg);
|
|
190
|
+
transform-origin: center;
|
|
191
|
+
}
|
|
192
|
+
html[data-ck-chrome="riso"] [data-ck-tag][data-tone="accent"] {
|
|
193
|
+
background: var(--ck-riso-pink) !important;
|
|
194
|
+
color: #1A1A1A !important;
|
|
195
|
+
box-shadow: 2px 2px 0 var(--ck-riso-blue) !important;
|
|
196
|
+
}
|
|
197
|
+
html[data-ck-chrome="riso"] [data-ck-tag][data-tone="success"] {
|
|
198
|
+
background: var(--ck-riso-yellow) !important;
|
|
199
|
+
color: #1A1A1A !important;
|
|
200
|
+
box-shadow: 2px 2px 0 var(--ck-riso-green) !important;
|
|
201
|
+
}
|
|
202
|
+
html[data-ck-chrome="riso"] [data-ck-tag][data-tone="warning"] {
|
|
203
|
+
background: var(--ck-riso-orange) !important;
|
|
204
|
+
color: #1A1A1A !important;
|
|
205
|
+
box-shadow: 2px 2px 0 var(--ck-text-primary) !important;
|
|
206
|
+
}
|
|
207
|
+
html[data-ck-chrome="riso"] [data-ck-tag][data-tone="critical"] {
|
|
208
|
+
background: var(--ck-riso-red) !important;
|
|
209
|
+
color: #F8F1DE !important;
|
|
210
|
+
box-shadow: 2px 2px 0 var(--ck-text-primary) !important;
|
|
211
|
+
}
|
|
212
|
+
html[data-ck-chrome="riso"] [data-ck-tag][data-tone="neutral"] {
|
|
213
|
+
background: transparent !important;
|
|
214
|
+
color: var(--ck-text-primary) !important;
|
|
215
|
+
box-shadow: 2px 2px 0 var(--ck-text-primary) !important;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* ---------- Layout chrome — paper sidebar + topbar ---------- */
|
|
219
|
+
html[data-ck-chrome="riso"] [data-ck-leftnav] {
|
|
220
|
+
background: var(--ck-bg-sidebar) !important;
|
|
221
|
+
border-right: 2px solid var(--ck-text-primary);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
html[data-ck-chrome="riso"] [data-ck-topbar] {
|
|
225
|
+
background: var(--ck-bg-canvas) !important;
|
|
226
|
+
border-bottom: 2px solid var(--ck-text-primary);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* NavItem — flat hover, riso ink block on active */
|
|
230
|
+
html[data-ck-chrome="riso"] [data-ck-navitem] {
|
|
231
|
+
background: transparent !important;
|
|
232
|
+
border-radius: 4px !important;
|
|
233
|
+
font-weight: 600 !important;
|
|
234
|
+
color: var(--ck-text-primary) !important;
|
|
235
|
+
transition: background 120ms ease, color 120ms ease;
|
|
236
|
+
}
|
|
237
|
+
html[data-ck-chrome="riso"] [data-ck-navitem]:not([data-active="true"]):hover {
|
|
238
|
+
background: var(--ck-bg-muted) !important;
|
|
239
|
+
}
|
|
240
|
+
html[data-ck-chrome="riso"] [data-ck-navitem][data-active="true"] {
|
|
241
|
+
background: var(--ck-riso-pink) !important;
|
|
242
|
+
color: #1A1A1A !important;
|
|
243
|
+
font-weight: 800 !important;
|
|
244
|
+
box-shadow: 3px 3px 0 var(--ck-riso-blue) !important;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* Search trigger — underlined input feel */
|
|
248
|
+
html[data-ck-chrome="riso"] [data-ck-search-trigger] {
|
|
249
|
+
background: var(--ck-bg-surface) !important;
|
|
250
|
+
border: 2px solid var(--ck-text-primary) !important;
|
|
251
|
+
border-radius: 4px !important;
|
|
252
|
+
box-shadow: 3px 3px 0 var(--ck-riso-yellow) !important;
|
|
253
|
+
color: var(--ck-text-primary) !important;
|
|
254
|
+
font-weight: 600 !important;
|
|
255
|
+
text-transform: uppercase;
|
|
256
|
+
letter-spacing: 0.05em;
|
|
257
|
+
font-size: 11px;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* Action bar — paper plate with offset ink block, no rounding */
|
|
261
|
+
html[data-ck-chrome="riso"] [data-ck-actionbar] {
|
|
262
|
+
background: var(--ck-bg-surface) !important;
|
|
263
|
+
border: 2px solid var(--ck-text-primary);
|
|
264
|
+
border-radius: 4px;
|
|
265
|
+
box-shadow: 5px 5px 0 var(--ck-riso-blue);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Modal — paper plate, no blur */
|
|
269
|
+
html[data-ck-chrome="riso"] [role="dialog"] > div:first-child {
|
|
270
|
+
background: rgba(26, 26, 26, 0.45);
|
|
271
|
+
backdrop-filter: none;
|
|
272
|
+
}
|
|
273
|
+
html[data-ck-chrome="riso"] [role="dialog"] > div > div {
|
|
274
|
+
background: var(--ck-bg-surface) !important;
|
|
275
|
+
border: 2px solid var(--ck-text-primary);
|
|
276
|
+
border-radius: 4px;
|
|
277
|
+
box-shadow: 6px 6px 0 var(--ck-riso-pink);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* Code blocks — bordered paper with offset block */
|
|
281
|
+
html[data-ck-chrome="riso"] pre {
|
|
282
|
+
background: var(--ck-bg-surface) !important;
|
|
283
|
+
border: 2px solid var(--ck-text-primary);
|
|
284
|
+
border-radius: 4px;
|
|
285
|
+
box-shadow: 4px 4px 0 var(--ck-riso-yellow);
|
|
286
|
+
font-family: "Courier Prime", "Courier New", var(--ck-font-mono);
|
|
287
|
+
}
|
|
288
|
+
html[data-ck-chrome="riso"] code {
|
|
289
|
+
background: var(--ck-riso-yellow) !important;
|
|
290
|
+
color: var(--ck-text-primary) !important;
|
|
291
|
+
padding: 1px 6px;
|
|
292
|
+
font-family: "Courier Prime", "Courier New", var(--ck-font-mono);
|
|
293
|
+
border-radius: 2px;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* Dividers — dashed by default under riso */
|
|
297
|
+
html[data-ck-chrome="riso"] hr {
|
|
298
|
+
border: none;
|
|
299
|
+
border-top: 2px dashed var(--ck-text-primary);
|
|
300
|
+
margin: 24px 0;
|
|
301
|
+
opacity: 0.6;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Halftone helper class — apply to any element for shaded ink fill.
|
|
305
|
+
Set `color: var(--ck-riso-pink)` on the element to control the
|
|
306
|
+
dot color, then add this class. */
|
|
307
|
+
.ck-riso-halftone {
|
|
308
|
+
background-image: var(--ck-riso-halftone, radial-gradient(circle, currentColor 1.4px, transparent 1.6px));
|
|
309
|
+
background-size: 7px 7px;
|
|
310
|
+
background-repeat: repeat;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* Crop-mark helper — opt-in via .ck-riso-marks on a positioned
|
|
314
|
+
container; corners get registration `+` glyphs. */
|
|
315
|
+
.ck-riso-marks {
|
|
316
|
+
position: relative;
|
|
317
|
+
}
|
|
318
|
+
.ck-riso-marks::before,
|
|
319
|
+
.ck-riso-marks::after {
|
|
320
|
+
content: "+";
|
|
321
|
+
position: absolute;
|
|
322
|
+
font: 700 18px/1 "Courier Prime", "Courier New", monospace;
|
|
323
|
+
color: currentColor;
|
|
324
|
+
opacity: 0.5;
|
|
325
|
+
pointer-events: none;
|
|
326
|
+
}
|
|
327
|
+
.ck-riso-marks::before { top: 4px; left: 8px; }
|
|
328
|
+
.ck-riso-marks::after { bottom: 4px; right: 8px; }
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/* Hand-drawn / Sketchy chrome — Excalidraw / tldraw / Whimsical
|
|
2
|
+
pen-on-paper aesthetic. Implementation strategy is "rough.js by
|
|
3
|
+
CSS":
|
|
4
|
+
- Asymmetric border-radius gives corners natural variance
|
|
5
|
+
- Offset second box-shadow gives the "drawn twice" line feel
|
|
6
|
+
- filter: var(--ck-sketch-wobble) applies SVG turbulence to
|
|
7
|
+
drawn surfaces (Chrome / Safari; Firefox falls back gracefully)
|
|
8
|
+
- Hatch-fill backgrounds use repeating-linear-gradient for
|
|
9
|
+
emphasized buttons / tags
|
|
10
|
+
- Each .ck-* primitive gets a tiny pre-set tilt via :nth-child
|
|
11
|
+
selectors so cards don't all stand perfectly upright
|
|
12
|
+
|
|
13
|
+
Body uses handwriting-leaning fonts. Headings push fully to
|
|
14
|
+
handwritten display via the Caveat / Patrick Hand stack. */
|
|
15
|
+
|
|
16
|
+
html[data-ck-chrome="sketch"] body {
|
|
17
|
+
font-family: var(--ck-font-sketch-body, "Comic Neue", "Comic Sans MS", system-ui, sans-serif);
|
|
18
|
+
font-weight: 400;
|
|
19
|
+
line-height: 1.55;
|
|
20
|
+
background-image:
|
|
21
|
+
radial-gradient(circle, rgba(26, 26, 26, 0.06) 1px, transparent 1.4px);
|
|
22
|
+
background-size: 22px 22px;
|
|
23
|
+
background-attachment: fixed;
|
|
24
|
+
}
|
|
25
|
+
html[data-ck-theme="dark"][data-ck-chrome="sketch"] body {
|
|
26
|
+
background-image:
|
|
27
|
+
radial-gradient(circle, rgba(240, 240, 232, 0.08) 1px, transparent 1.4px);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Headings — handwritten font, slight negative letter-spacing */
|
|
31
|
+
html[data-ck-chrome="sketch"] h1,
|
|
32
|
+
html[data-ck-chrome="sketch"] .ck-h1 {
|
|
33
|
+
font-family: var(--ck-font-sketch-display);
|
|
34
|
+
font-weight: 700;
|
|
35
|
+
line-height: 1.08;
|
|
36
|
+
letter-spacing: -0.01em;
|
|
37
|
+
transform: rotate(-0.6deg);
|
|
38
|
+
transform-origin: left;
|
|
39
|
+
}
|
|
40
|
+
html[data-ck-chrome="sketch"] h2,
|
|
41
|
+
html[data-ck-chrome="sketch"] .ck-h2 {
|
|
42
|
+
font-family: var(--ck-font-sketch-display);
|
|
43
|
+
font-weight: 700;
|
|
44
|
+
line-height: 1.1;
|
|
45
|
+
transform: rotate(-0.3deg);
|
|
46
|
+
transform-origin: left;
|
|
47
|
+
}
|
|
48
|
+
html[data-ck-chrome="sketch"] h3,
|
|
49
|
+
html[data-ck-chrome="sketch"] .ck-h3 {
|
|
50
|
+
font-family: var(--ck-font-sketch-display);
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ---------- Buttons — drawn rectangles ---------- */
|
|
55
|
+
html[data-ck-chrome="sketch"] .ck-btn,
|
|
56
|
+
html[data-ck-chrome="sketch"] .ck-actionbar-btn {
|
|
57
|
+
border-radius: 7px 9px 8px 10px / 9px 7px 10px 8px;
|
|
58
|
+
font-family: var(--ck-font-sketch-display);
|
|
59
|
+
font-size: 17px;
|
|
60
|
+
font-weight: 600;
|
|
61
|
+
letter-spacing: 0;
|
|
62
|
+
text-transform: none;
|
|
63
|
+
height: 40px;
|
|
64
|
+
padding: 0 18px;
|
|
65
|
+
border: 2px solid var(--ck-text-primary);
|
|
66
|
+
background: var(--ck-bg-surface);
|
|
67
|
+
color: var(--ck-text-primary);
|
|
68
|
+
box-shadow: 2px 3px 0 var(--ck-text-primary);
|
|
69
|
+
transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;
|
|
70
|
+
}
|
|
71
|
+
html[data-ck-chrome="sketch"] .ck-btn:hover:not(:disabled),
|
|
72
|
+
html[data-ck-chrome="sketch"] .ck-actionbar-btn:hover:not(:disabled) {
|
|
73
|
+
background: var(--ck-bg-muted);
|
|
74
|
+
transform: translate(0px, 1px) rotate(-0.4deg);
|
|
75
|
+
}
|
|
76
|
+
html[data-ck-chrome="sketch"] .ck-btn:active:not(:disabled),
|
|
77
|
+
html[data-ck-chrome="sketch"] .ck-actionbar-btn:active:not(:disabled) {
|
|
78
|
+
transform: translate(1px, 2px) rotate(0.6deg);
|
|
79
|
+
box-shadow: 0 1px 0 var(--ck-text-primary);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
html[data-ck-chrome="sketch"] .ck-btn--primary,
|
|
83
|
+
html[data-ck-chrome="sketch"] .ck-actionbar-btn--primary {
|
|
84
|
+
background: var(--ck-accent);
|
|
85
|
+
color: #FFFEF9;
|
|
86
|
+
box-shadow: 2px 3px 0 var(--ck-text-primary);
|
|
87
|
+
}
|
|
88
|
+
html[data-ck-chrome="sketch"] .ck-btn--primary:hover:not(:disabled) {
|
|
89
|
+
background: var(--ck-accent-hover);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
html[data-ck-chrome="sketch"] .ck-btn--ghost {
|
|
93
|
+
background: transparent;
|
|
94
|
+
border-color: transparent;
|
|
95
|
+
box-shadow: none;
|
|
96
|
+
text-decoration: underline;
|
|
97
|
+
text-decoration-style: wavy;
|
|
98
|
+
text-decoration-thickness: 1.5px;
|
|
99
|
+
text-underline-offset: 5px;
|
|
100
|
+
text-decoration-color: var(--ck-text-primary);
|
|
101
|
+
}
|
|
102
|
+
html[data-ck-chrome="sketch"] .ck-btn--ghost:hover:not(:disabled) {
|
|
103
|
+
background: transparent;
|
|
104
|
+
transform: rotate(-0.4deg);
|
|
105
|
+
color: var(--ck-accent);
|
|
106
|
+
text-decoration-color: var(--ck-accent);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* ---------- Inputs — wavy underline ---------- */
|
|
110
|
+
html[data-ck-chrome="sketch"] .ck-input,
|
|
111
|
+
html[data-ck-chrome="sketch"] .ck-textarea {
|
|
112
|
+
background: transparent;
|
|
113
|
+
border: none;
|
|
114
|
+
border-bottom: 2px solid var(--ck-text-primary);
|
|
115
|
+
border-radius: 0;
|
|
116
|
+
padding-left: 2px;
|
|
117
|
+
padding-right: 2px;
|
|
118
|
+
box-shadow: none;
|
|
119
|
+
font-family: var(--ck-font-sketch-display);
|
|
120
|
+
font-size: 17px;
|
|
121
|
+
color: var(--ck-text-primary);
|
|
122
|
+
}
|
|
123
|
+
html[data-ck-chrome="sketch"] .ck-input::placeholder,
|
|
124
|
+
html[data-ck-chrome="sketch"] .ck-textarea::placeholder {
|
|
125
|
+
color: var(--ck-text-tertiary);
|
|
126
|
+
font-style: italic;
|
|
127
|
+
}
|
|
128
|
+
html[data-ck-chrome="sketch"] .ck-input:focus-visible,
|
|
129
|
+
html[data-ck-chrome="sketch"] .ck-textarea:focus-visible {
|
|
130
|
+
outline: none;
|
|
131
|
+
border-bottom-color: var(--ck-accent) !important;
|
|
132
|
+
border-bottom-width: 3px;
|
|
133
|
+
box-shadow: none !important;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* ---------- Cards — drawn rectangles with second-stroke shadow */
|
|
137
|
+
html[data-ck-chrome="sketch"] .ck-card {
|
|
138
|
+
background: var(--ck-bg-surface);
|
|
139
|
+
border: 2px solid var(--ck-text-primary);
|
|
140
|
+
border-radius: 10px 14px 12px 16px / 14px 10px 16px 12px;
|
|
141
|
+
box-shadow: 3px 4px 0 var(--ck-text-primary);
|
|
142
|
+
overflow: visible;
|
|
143
|
+
}
|
|
144
|
+
html[data-ck-chrome="sketch"] .ck-card__head {
|
|
145
|
+
background: transparent;
|
|
146
|
+
border-bottom: none;
|
|
147
|
+
padding: 16px 20px 8px;
|
|
148
|
+
font-family: var(--ck-font-sketch-display);
|
|
149
|
+
font-weight: 600;
|
|
150
|
+
font-size: 18px;
|
|
151
|
+
position: relative;
|
|
152
|
+
}
|
|
153
|
+
/* Hand-drawn underline beneath card head — single wobbly stroke */
|
|
154
|
+
html[data-ck-chrome="sketch"] .ck-card__head::after {
|
|
155
|
+
content: "";
|
|
156
|
+
position: absolute;
|
|
157
|
+
left: 20px;
|
|
158
|
+
right: 20px;
|
|
159
|
+
bottom: 4px;
|
|
160
|
+
height: 2px;
|
|
161
|
+
background: var(--ck-text-primary);
|
|
162
|
+
border-radius: 2px;
|
|
163
|
+
filter: var(--ck-sketch-wobble);
|
|
164
|
+
opacity: 0.65;
|
|
165
|
+
}
|
|
166
|
+
html[data-ck-chrome="sketch"] .ck-card__foot {
|
|
167
|
+
background: transparent;
|
|
168
|
+
border-top: none;
|
|
169
|
+
padding: 8px 20px 16px;
|
|
170
|
+
position: relative;
|
|
171
|
+
}
|
|
172
|
+
html[data-ck-chrome="sketch"] .ck-card__foot::before {
|
|
173
|
+
content: "";
|
|
174
|
+
position: absolute;
|
|
175
|
+
left: 20px;
|
|
176
|
+
right: 20px;
|
|
177
|
+
top: 0;
|
|
178
|
+
height: 2px;
|
|
179
|
+
background: var(--ck-text-primary);
|
|
180
|
+
border-radius: 2px;
|
|
181
|
+
filter: var(--ck-sketch-wobble);
|
|
182
|
+
opacity: 0.5;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* ---------- Tags — drawn ovals with hatch-fill bg ---------- */
|
|
186
|
+
html[data-ck-chrome="sketch"] [data-ck-tag] {
|
|
187
|
+
background: transparent !important;
|
|
188
|
+
border: 2px solid var(--ck-text-primary) !important;
|
|
189
|
+
border-radius: 999px !important;
|
|
190
|
+
padding: 4px 12px !important;
|
|
191
|
+
font-family: var(--ck-font-sketch-display) !important;
|
|
192
|
+
font-weight: 700 !important;
|
|
193
|
+
font-size: 14px !important;
|
|
194
|
+
letter-spacing: 0 !important;
|
|
195
|
+
text-transform: none !important;
|
|
196
|
+
box-shadow: 1px 2px 0 var(--ck-text-primary) !important;
|
|
197
|
+
color: var(--ck-text-primary) !important;
|
|
198
|
+
display: inline-block !important;
|
|
199
|
+
transform: rotate(-1.5deg);
|
|
200
|
+
}
|
|
201
|
+
html[data-ck-chrome="sketch"] [data-ck-tag][data-tone="accent"] {
|
|
202
|
+
background:
|
|
203
|
+
repeating-linear-gradient(45deg,
|
|
204
|
+
var(--ck-sketch-blue) 0 3px,
|
|
205
|
+
transparent 3px 7px) !important;
|
|
206
|
+
background-color: rgba(74, 144, 226, 0.22) !important;
|
|
207
|
+
}
|
|
208
|
+
html[data-ck-chrome="sketch"] [data-ck-tag][data-tone="success"] {
|
|
209
|
+
background:
|
|
210
|
+
repeating-linear-gradient(45deg,
|
|
211
|
+
var(--ck-sketch-green) 0 3px,
|
|
212
|
+
transparent 3px 7px) !important;
|
|
213
|
+
background-color: rgba(111, 207, 151, 0.25) !important;
|
|
214
|
+
}
|
|
215
|
+
html[data-ck-chrome="sketch"] [data-ck-tag][data-tone="warning"] {
|
|
216
|
+
background:
|
|
217
|
+
repeating-linear-gradient(45deg,
|
|
218
|
+
var(--ck-sketch-orange) 0 3px,
|
|
219
|
+
transparent 3px 7px) !important;
|
|
220
|
+
background-color: rgba(242, 153, 74, 0.25) !important;
|
|
221
|
+
}
|
|
222
|
+
html[data-ck-chrome="sketch"] [data-ck-tag][data-tone="critical"] {
|
|
223
|
+
background:
|
|
224
|
+
repeating-linear-gradient(45deg,
|
|
225
|
+
var(--ck-sketch-red) 0 3px,
|
|
226
|
+
transparent 3px 7px) !important;
|
|
227
|
+
background-color: rgba(229, 75, 75, 0.25) !important;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* ---------- Layout chrome ---------- */
|
|
231
|
+
html[data-ck-chrome="sketch"] [data-ck-leftnav] {
|
|
232
|
+
background: var(--ck-bg-sidebar) !important;
|
|
233
|
+
border-right: 2px solid var(--ck-text-primary);
|
|
234
|
+
}
|
|
235
|
+
html[data-ck-chrome="sketch"] [data-ck-topbar] {
|
|
236
|
+
background: var(--ck-bg-canvas) !important;
|
|
237
|
+
border-bottom: 2px solid var(--ck-text-primary);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* NavItem — highlighter underline on active */
|
|
241
|
+
html[data-ck-chrome="sketch"] [data-ck-navitem] {
|
|
242
|
+
background: transparent !important;
|
|
243
|
+
border-radius: 8px 10px 9px 11px !important;
|
|
244
|
+
font-family: var(--ck-font-sketch-display) !important;
|
|
245
|
+
font-weight: 600 !important;
|
|
246
|
+
font-size: 17px !important;
|
|
247
|
+
color: var(--ck-text-primary) !important;
|
|
248
|
+
}
|
|
249
|
+
html[data-ck-chrome="sketch"] [data-ck-navitem]:not([data-active="true"]):hover {
|
|
250
|
+
background: var(--ck-bg-muted) !important;
|
|
251
|
+
}
|
|
252
|
+
/* Active state: translucent yellow highlighter slash through the
|
|
253
|
+
item. Combined with a hand-drawn second-stroke shadow. */
|
|
254
|
+
html[data-ck-chrome="sketch"] [data-ck-navitem][data-active="true"] {
|
|
255
|
+
background:
|
|
256
|
+
linear-gradient(180deg, transparent 0%, transparent 30%,
|
|
257
|
+
var(--ck-sketch-hi-yellow) 30%, var(--ck-sketch-hi-yellow) 78%,
|
|
258
|
+
transparent 78%, transparent 100%) !important;
|
|
259
|
+
color: var(--ck-text-primary) !important;
|
|
260
|
+
font-weight: 700 !important;
|
|
261
|
+
box-shadow: 2px 2px 0 var(--ck-text-primary) !important;
|
|
262
|
+
border: 2px solid var(--ck-text-primary) !important;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* Search trigger */
|
|
266
|
+
html[data-ck-chrome="sketch"] [data-ck-search-trigger] {
|
|
267
|
+
background: var(--ck-bg-surface) !important;
|
|
268
|
+
border: 2px solid var(--ck-text-primary) !important;
|
|
269
|
+
border-radius: 8px 10px 9px 11px !important;
|
|
270
|
+
box-shadow: 2px 3px 0 var(--ck-text-primary) !important;
|
|
271
|
+
color: var(--ck-text-secondary) !important;
|
|
272
|
+
font-family: var(--ck-font-sketch-display) !important;
|
|
273
|
+
font-size: 15px;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Action bar */
|
|
277
|
+
html[data-ck-chrome="sketch"] [data-ck-actionbar] {
|
|
278
|
+
background: var(--ck-bg-surface) !important;
|
|
279
|
+
border: 2px solid var(--ck-text-primary);
|
|
280
|
+
border-radius: 14px 18px 16px 20px / 18px 14px 20px 16px;
|
|
281
|
+
box-shadow: 4px 5px 0 var(--ck-text-primary);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* Modal — drawn plate, no glass blur */
|
|
285
|
+
html[data-ck-chrome="sketch"] [role="dialog"] > div:first-child {
|
|
286
|
+
background: rgba(26, 26, 26, 0.45);
|
|
287
|
+
backdrop-filter: none;
|
|
288
|
+
}
|
|
289
|
+
html[data-ck-chrome="sketch"] [role="dialog"] > div > div {
|
|
290
|
+
background: var(--ck-bg-surface) !important;
|
|
291
|
+
border: 2px solid var(--ck-text-primary);
|
|
292
|
+
border-radius: 14px 18px 16px 20px;
|
|
293
|
+
box-shadow: 5px 6px 0 var(--ck-text-primary);
|
|
294
|
+
font-family: var(--ck-font-sketch-body);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* Code blocks — drawn plate */
|
|
298
|
+
html[data-ck-chrome="sketch"] pre {
|
|
299
|
+
background: var(--ck-bg-surface) !important;
|
|
300
|
+
border: 2px solid var(--ck-text-primary);
|
|
301
|
+
border-radius: 8px 12px 10px 14px;
|
|
302
|
+
box-shadow: 3px 4px 0 var(--ck-text-primary);
|
|
303
|
+
font-family: "Comic Mono", "Cascadia Code", var(--ck-font-mono);
|
|
304
|
+
}
|
|
305
|
+
html[data-ck-chrome="sketch"] code {
|
|
306
|
+
background: var(--ck-sketch-hi-yellow) !important;
|
|
307
|
+
color: var(--ck-text-primary) !important;
|
|
308
|
+
padding: 1px 6px;
|
|
309
|
+
border-radius: 3px 5px 4px 6px;
|
|
310
|
+
font-family: "Comic Mono", "Cascadia Code", var(--ck-font-mono);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* HR — wobbly hand-drawn divider, not a CSS line */
|
|
314
|
+
html[data-ck-chrome="sketch"] hr {
|
|
315
|
+
border: none;
|
|
316
|
+
height: 3px;
|
|
317
|
+
background: var(--ck-text-primary);
|
|
318
|
+
border-radius: 3px;
|
|
319
|
+
filter: var(--ck-sketch-wobble-strong);
|
|
320
|
+
margin: 28px 0;
|
|
321
|
+
opacity: 0.65;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Highlighter helper — apply .ck-sketch-hl to mark important text
|
|
325
|
+
with a translucent yellow swipe behind it. */
|
|
326
|
+
.ck-sketch-hl {
|
|
327
|
+
background:
|
|
328
|
+
linear-gradient(180deg, transparent 0%, transparent 30%,
|
|
329
|
+
var(--ck-sketch-hi-yellow, rgba(242, 201, 76, 0.42)) 30%,
|
|
330
|
+
var(--ck-sketch-hi-yellow, rgba(242, 201, 76, 0.42)) 80%,
|
|
331
|
+
transparent 80%, transparent 100%);
|
|
332
|
+
padding: 0 4px;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/* Animated stroke-on for SVG paths — opt-in via .ck-sketch-drawon
|
|
336
|
+
on a path. The stroke "draws on" from start to end in ~500ms. */
|
|
337
|
+
@keyframes ck-sketch-drawon {
|
|
338
|
+
from { stroke-dashoffset: var(--ck-sketch-len, 800); }
|
|
339
|
+
to { stroke-dashoffset: 0; }
|
|
340
|
+
}
|
|
341
|
+
.ck-sketch-drawon {
|
|
342
|
+
stroke-dasharray: var(--ck-sketch-len, 800);
|
|
343
|
+
animation: ck-sketch-drawon 600ms ease-out forwards;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
@media (prefers-reduced-motion: reduce) {
|
|
347
|
+
.ck-sketch-drawon {
|
|
348
|
+
animation: none;
|
|
349
|
+
stroke-dasharray: none;
|
|
350
|
+
}
|
|
351
|
+
}
|