benjivers/notes Public Public: anyone can read this; nobody can change it.

Files b1c728e7eb4bf51bf75a6af39ebff6d562839a67
1,191 lines · 23.8 KB · ~7.0k tok Raw History
1
/* The look, in the tokens' words. Every value that is a choice — a colour, a
2
   space, a radius, a size — is a var(--…) from /tokens.css, which
3
   design/tokens.json compiles to at boot; `bun run lint:design` refuses a raw
4
   colour here. Light and dark are the tokens' business, not this file's. */
5
6
/* ── The page ───────────────────────────────────────────────────────── */
7
*,
8
*::before,
9
*::after {
10
  box-sizing: border-box;
11
}
12
html {
13
  -webkit-text-size-adjust: 100%;
14
  text-size-adjust: 100%;
15
}
16
body {
17
  margin: 0;
18
  background: var(--color-bg);
19
  color: var(--color-fg);
20
  font: var(--text-base) / var(--leading-body) var(--font-sans);
21
  -webkit-font-smoothing: antialiased;
22
}
23
h1,
24
h2,
25
p {
26
  margin: 0;
27
}
28
a {
29
  color: var(--color-accent);
30
  text-decoration-thickness: 1px;
31
  text-underline-offset: 0.15em;
32
}
33
code,
34
kbd,
35
.mono {
36
  font-family: var(--font-mono);
37
  font-size: 0.88em;
38
}
39
kbd {
40
  display: inline-block;
41
  padding: 0 0.35em;
42
  border: 1px solid var(--color-line);
43
  border-bottom-width: 2px;
44
  border-radius: var(--radius-sm);
45
  color: var(--color-muted);
46
  font-size: var(--text-xs);
47
  line-height: 1.6;
48
}
49
:focus-visible {
50
  outline: 2px solid var(--color-accent);
51
  outline-offset: 2px;
52
}
53
[hidden] {
54
  display: none !important;
55
}
56
.muted {
57
  color: var(--color-muted);
58
}
59
.small {
60
  font-size: var(--text-sm);
61
}
62
.pad {
63
  padding: var(--space-2) var(--space-3);
64
}
65
.row {
66
  display: flex;
67
  align-items: center;
68
  gap: var(--space-2);
69
  flex-wrap: wrap;
70
}
71
.row.center {
72
  justify-content: center;
73
}
74
.pill {
75
  display: inline-block;
76
  padding: 0 0.5rem;
77
  font-size: var(--text-xs);
78
  font-weight: 600;
79
  color: var(--color-muted);
80
  border: 1px solid var(--color-line);
81
  border-radius: var(--radius-pill);
82
}
83
svg {
84
  flex: none;
85
}
86
87
/* ── Controls: at least 44px on a side where a finger meets them ───── */
88
.input {
89
  min-width: 0;
90
  min-height: var(--size-tap);
91
  padding: 0 var(--space-3);
92
  font: inherit;
93
  font-size: max(16px, var(--text-base));
94
  color: inherit;
95
  background: var(--color-bg);
96
  border: 1px solid var(--color-line);
97
  border-radius: var(--radius-md);
98
}
99
.input::placeholder {
100
  color: var(--color-muted);
101
}
102
.button {
103
  min-height: var(--size-tap);
104
  padding: 0 var(--space-4);
105
  font: inherit;
106
  font-weight: 600;
107
  color: var(--color-accent-fg);
108
  background: var(--color-accent);
109
  border: 1px solid transparent;
110
  border-radius: var(--radius-md);
111
  cursor: pointer;
112
  white-space: nowrap;
113
  text-decoration: none;
114
  display: inline-flex;
115
  align-items: center;
116
  justify-content: center;
117
  gap: var(--space-2);
118
}
119
.button:hover {
120
  filter: brightness(1.08);
121
}
122
.button svg {
123
  width: 18px;
124
  height: 18px;
125
  fill: none;
126
  stroke: currentColor;
127
  stroke-width: 2;
128
  stroke-linecap: round;
129
}
130
.button-quiet {
131
  color: var(--color-muted);
132
  background: transparent;
133
  padding: 0 var(--space-3);
134
}
135
.button-quiet:hover {
136
  color: var(--color-fg);
137
  background: var(--color-hover);
138
  filter: none;
139
}
140
.button-big {
141
  min-height: 3rem;
142
  padding: 0 var(--space-5);
143
  font-size: var(--text-lg);
144
}
145
.button-wide {
146
  width: 100%;
147
}
148
.icon-button {
149
  display: inline-grid;
150
  place-items: center;
151
  width: var(--size-tap);
152
  height: var(--size-tap);
153
  padding: 0;
154
  color: var(--color-muted);
155
  background: transparent;
156
  border: 0;
157
  border-radius: var(--radius-md);
158
  cursor: pointer;
159
  text-decoration: none;
160
}
161
.icon-button svg {
162
  width: 20px;
163
  height: 20px;
164
  fill: none;
165
  stroke: currentColor;
166
  stroke-width: 1.8;
167
  stroke-linecap: round;
168
  stroke-linejoin: round;
169
}
170
.icon-button:hover,
171
.icon-button.is-on {
172
  color: var(--color-fg);
173
  background: var(--color-hover);
174
}
175
.icon-button.is-on {
176
  color: var(--color-accent);
177
}
178
.icon-button.danger:hover {
179
  color: var(--color-danger);
180
}
181
form {
182
  margin: 0;
183
}
184
185
/* ── The shell: notes | the note | its links ─────────────────────────── */
186
.app-page {
187
  height: 100dvh;
188
  overflow: hidden;
189
}
190
.shell {
191
  display: grid;
192
  grid-template-columns: var(--size-left) minmax(0, 1fr) var(--size-right);
193
  height: 100dvh;
194
}
195
.shell[data-has-right="false"] {
196
  grid-template-columns: var(--size-left) minmax(0, 1fr);
197
}
198
.left,
199
.right {
200
  min-height: 0;
201
  background: var(--color-surface);
202
  overflow-y: auto;
203
  overscroll-behavior: contain;
204
}
205
.left {
206
  display: flex;
207
  flex-direction: column;
208
  border-right: 1px solid var(--color-line);
209
}
210
.right {
211
  border-left: 1px solid var(--color-line);
212
  padding: var(--space-3) var(--space-4) var(--space-6);
213
}
214
.center {
215
  display: flex;
216
  flex-direction: column;
217
  min-width: 0;
218
  min-height: 0;
219
}
220
221
/* The left. */
222
.left-head {
223
  display: flex;
224
  align-items: center;
225
  justify-content: space-between;
226
  padding: var(--space-2) var(--space-2) 0 var(--space-4);
227
}
228
.brand {
229
  display: inline-flex;
230
  align-items: center;
231
  gap: var(--space-2);
232
  color: var(--color-fg);
233
  font-weight: 700;
234
  letter-spacing: -0.01em;
235
  text-decoration: none;
236
  min-height: var(--size-tap);
237
}
238
.brand svg {
239
  width: 22px;
240
  height: 22px;
241
  color: var(--color-accent);
242
}
243
.actions {
244
  display: flex;
245
  gap: var(--space-1);
246
  padding: var(--space-2) var(--space-3);
247
}
248
.actions form:first-child {
249
  flex: 1;
250
}
251
.find {
252
  position: relative;
253
  margin: 0 var(--space-3) var(--space-2);
254
}
255
.find > svg {
256
  position: absolute;
257
  left: var(--space-3);
258
  top: 50%;
259
  width: 16px;
260
  height: 16px;
261
  transform: translateY(-50%);
262
  fill: none;
263
  stroke: var(--color-muted);
264
  stroke-width: 2;
265
  pointer-events: none;
266
}
267
.input-find {
268
  width: 100%;
269
  padding-left: 2.1rem;
270
  padding-right: 3rem;
271
  background: var(--color-bg);
272
}
273
.find .hint {
274
  position: absolute;
275
  right: var(--space-2);
276
  top: 50%;
277
  transform: translateY(-50%);
278
  cursor: pointer;
279
}
280
.files {
281
  flex: 1;
282
  padding: 0 var(--space-2) var(--space-4);
283
}
284
.section {
285
  margin: var(--space-4) var(--space-2) var(--space-1);
286
  color: var(--color-muted);
287
  font-size: var(--text-xs);
288
  font-weight: 650;
289
  letter-spacing: 0.06em;
290
  text-transform: uppercase;
291
}
292
.count {
293
  margin-left: 0.3em;
294
  font-weight: 500;
295
  letter-spacing: 0;
296
  opacity: 0.8;
297
}
298
.file-list {
299
  list-style: none;
300
  margin: 0;
301
  padding: 0;
302
}
303
.file {
304
  display: flex;
305
  align-items: baseline;
306
  gap: var(--space-2);
307
  min-height: 2.25rem;
308
  padding: var(--space-1) var(--space-2);
309
  border-radius: var(--radius-sm);
310
  color: var(--color-fg);
311
  text-decoration: none;
312
  line-height: var(--leading-tight);
313
  align-items: center;
314
}
315
.file:hover {
316
  background: var(--color-hover);
317
}
318
.file.is-active {
319
  background: var(--color-active);
320
  font-weight: 600;
321
}
322
.file-title {
323
  flex: 1;
324
  min-width: 0;
325
  overflow: hidden;
326
  text-overflow: ellipsis;
327
  white-space: nowrap;
328
}
329
.file-when {
330
  color: var(--color-muted);
331
  font-size: var(--text-xs);
332
  font-variant-numeric: tabular-nums;
333
}
334
.tag-cloud {
335
  display: flex;
336
  flex-wrap: wrap;
337
  gap: var(--space-1);
338
  padding: var(--space-1) var(--space-2);
339
}
340
.left-foot {
341
  position: sticky;
342
  bottom: 0;
343
  display: flex;
344
  align-items: center;
345
  gap: var(--space-1);
346
  padding: var(--space-2) var(--space-2) var(--space-2) var(--space-4);
347
  border-top: 1px solid var(--color-line);
348
  background: var(--color-surface);
349
}
350
.you {
351
  flex: 1;
352
  min-width: 0;
353
  overflow: hidden;
354
  text-overflow: ellipsis;
355
  white-space: nowrap;
356
  color: var(--color-muted);
357
  font-size: var(--text-sm);
358
}
359
360
/* The toolbar above the note. */
361
.toolbar {
362
  display: flex;
363
  align-items: center;
364
  gap: var(--space-2);
365
  min-height: 3.25rem;
366
  padding: var(--space-1) var(--space-3);
367
  border-bottom: 1px solid var(--color-line);
368
}
369
.crumbs {
370
  display: flex;
371
  align-items: center;
372
  gap: var(--space-2);
373
  flex: 1;
374
  min-width: 0;
375
  font-size: var(--text-sm);
376
  color: var(--color-muted);
377
  white-space: nowrap;
378
}
379
.crumbs a {
380
  color: var(--color-muted);
381
  text-decoration: none;
382
}
383
.crumbs a:hover {
384
  color: var(--color-fg);
385
}
386
.crumb-here {
387
  color: var(--color-fg);
388
  overflow: hidden;
389
  text-overflow: ellipsis;
390
}
391
.tools {
392
  display: flex;
393
  align-items: center;
394
  gap: var(--space-1);
395
}
396
.status {
397
  min-width: 4.5rem;
398
  text-align: right;
399
  white-space: nowrap;
400
  overflow: hidden;
401
  text-overflow: ellipsis;
402
  max-width: 16rem;
403
}
404
.status[data-kind="error"] {
405
  color: var(--color-danger);
406
}
407
.segmented {
408
  display: inline-flex;
409
  padding: 2px;
410
  margin-right: var(--space-2);
411
  border: 1px solid var(--color-line);
412
  border-radius: var(--radius-md);
413
}
414
.segmented button {
415
  min-height: 2.25rem;
416
  padding: 0 var(--space-3);
417
  font: inherit;
418
  font-size: var(--text-sm);
419
  color: var(--color-muted);
420
  background: transparent;
421
  border: 0;
422
  border-radius: var(--radius-sm);
423
  cursor: pointer;
424
}
425
.segmented button:hover {
426
  color: var(--color-fg);
427
}
428
.segmented button[aria-pressed="true"] {
429
  color: var(--color-fg);
430
  background: var(--color-hover);
431
  font-weight: 600;
432
}
433
.only-narrow,
434
.only-narrow-right {
435
  display: none;
436
}
437
438
/* ── The note: a title, then the words and the reading view ──────────── */
439
.editor {
440
  flex: 1;
441
  min-height: 0;
442
  display: flex;
443
}
444
.sheet {
445
  flex: 1;
446
  min-width: 0;
447
  min-height: 0;
448
  display: flex;
449
  flex-direction: column;
450
}
451
.title-input {
452
  width: 100%;
453
  margin: 0;
454
  padding: var(--space-5) max(var(--space-5), calc((100% - var(--size-read)) / 2)) var(--space-2);
455
  font: 700 var(--text-2xl) / var(--leading-tight) var(--font-sans);
456
  letter-spacing: -0.02em;
457
  color: var(--color-fg);
458
  background: transparent;
459
  border: 0;
460
  outline: 0;
461
}
462
.title-input:focus-visible {
463
  outline: 0;
464
  box-shadow: inset 3px 0 0 var(--color-accent);
465
}
466
.panes {
467
  flex: 1;
468
  min-height: 0;
469
  display: grid;
470
  grid-template-columns: minmax(0, 1fr);
471
}
472
.panes[data-mode="split"] {
473
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
474
}
475
.panes[data-mode="split"] .source,
476
.panes[data-mode="split"] .preview {
477
  padding-inline: var(--space-5);
478
}
479
.sheet:has(.panes[data-mode="split"]) .title-input {
480
  padding-inline: var(--space-5);
481
}
482
.panes[data-mode="split"] .preview {
483
  border-left: 1px solid var(--color-line);
484
}
485
.panes[data-mode="read"] .source,
486
.panes[data-mode="edit"] .preview {
487
  display: none;
488
}
489
.source {
490
  width: 100%;
491
  height: 100%;
492
  margin: 0;
493
  padding: var(--space-3) max(var(--space-5), calc((100% - var(--size-read)) / 2)) 40vh;
494
  resize: none;
495
  font: 1.0625rem / 1.7 var(--font-sans);
496
  tab-size: 2;
497
  color: var(--color-fg);
498
  background: transparent;
499
  border: 0;
500
  outline: 0;
501
  caret-color: var(--color-accent);
502
}
503
.source:focus-visible {
504
  outline: 0;
505
}
506
.source::placeholder {
507
  color: var(--color-muted);
508
}
509
.preview {
510
  min-height: 0;
511
  overflow-y: auto;
512
  padding: var(--space-3) max(var(--space-5), calc((100% - var(--size-read)) / 2)) 40vh;
513
}
514
515
/* ── Markdown, read ───────────────────────────────────────────────────── */
516
.md {
517
  font-size: 1.0625rem;
518
  line-height: 1.7;
519
  overflow-wrap: anywhere;
520
}
521
.md > :first-child {
522
  margin-top: 0;
523
}
524
.md p,
525
.md ul,
526
.md ol,
527
.md pre,
528
.md blockquote,
529
.md .callout,
530
.md .table {
531
  margin: 0 0 var(--space-4);
532
}
533
.md h1,
534
.md h2,
535
.md h3,
536
.md h4,
537
.md h5,
538
.md h6 {
539
  margin: var(--space-5) 0 var(--space-2);
540
  line-height: var(--leading-tight);
541
  letter-spacing: -0.015em;
542
  scroll-margin-top: var(--space-4);
543
}
544
.md h1 {
545
  font-size: 1.85rem;
546
}
547
.md h2 {
548
  font-size: 1.45rem;
549
}
550
.md h3 {
551
  font-size: 1.2rem;
552
}
553
.md h4,
554
.md h5,
555
.md h6 {
556
  font-size: 1rem;
557
}
558
.md ul,
559
.md ol {
560
  padding-left: 1.5rem;
561
}
562
.md li {
563
  margin: 0.15rem 0;
564
}
565
.md li > ul,
566
.md li > ol {
567
  margin: 0.15rem 0 0;
568
}
569
.md li::marker {
570
  color: var(--color-muted);
571
}
572
.md li.task {
573
  list-style: none;
574
  margin-left: -1.5rem;
575
  display: flex;
576
  flex-wrap: wrap;
577
  gap: var(--space-2);
578
  align-items: baseline;
579
}
580
.md li.task > ul,
581
.md li.task > ol {
582
  flex-basis: 100%;
583
  padding-left: 3rem;
584
}
585
.check {
586
  flex: none;
587
  position: relative;
588
  top: 0.18em;
589
  width: 1.05rem;
590
  height: 1.05rem;
591
  padding: 0;
592
  border: 1.5px solid var(--color-muted);
593
  border-radius: 4px;
594
  background: transparent;
595
  cursor: pointer;
596
}
597
.check::after {
598
  content: "";
599
  position: absolute;
600
  inset: -0.7rem;
601
}
602
.check[aria-checked="true"] {
603
  background: var(--color-accent);
604
  border-color: var(--color-accent);
605
}
606
.check[aria-checked="true"]::before {
607
  content: "";
608
  position: absolute;
609
  left: 0.3rem;
610
  top: 0.08rem;
611
  width: 0.3rem;
612
  height: 0.58rem;
613
  border: solid var(--color-accent-fg);
614
  border-width: 0 2px 2px 0;
615
  transform: rotate(45deg);
616
}
617
.md .done {
618
  color: var(--color-muted);
619
  text-decoration: line-through;
620
}
621
.md code {
622
  padding: 0.1em 0.35em;
623
  color: var(--color-code-fg);
624
  background: var(--color-code-bg);
625
  border-radius: var(--radius-sm);
626
}
627
.md pre {
628
  padding: var(--space-3) var(--space-4);
629
  overflow-x: auto;
630
  background: var(--color-code-bg);
631
  border-radius: var(--radius-md);
632
  line-height: 1.55;
633
}
634
.md pre code {
635
  padding: 0;
636
  color: var(--color-fg);
637
  background: none;
638
}
639
.md blockquote {
640
  padding: 0 0 0 var(--space-4);
641
  color: var(--color-muted);
642
  border-left: 3px solid var(--color-line);
643
}
644
.md blockquote > :last-child,
645
.md .callout > :last-child {
646
  margin-bottom: 0;
647
}
648
.md hr {
649
  margin: var(--space-5) 0;
650
  border: 0;
651
  border-top: 1px solid var(--color-line);
652
}
653
.md mark {
654
  padding: 0 0.15em;
655
  color: var(--color-fg);
656
  background: var(--color-mark-bg);
657
  border-radius: 3px;
658
}
659
.md del {
660
  color: var(--color-muted);
661
}
662
.md a {
663
  text-decoration: none;
664
}
665
.md a:hover {
666
  text-decoration: underline;
667
}
668
.wikilink {
669
  font-weight: 550;
670
}
671
.unresolved {
672
  color: var(--color-link-missing);
673
  text-decoration: underline dashed 1px;
674
  text-underline-offset: 0.2em;
675
}
676
.tag {
677
  display: inline-flex;
678
  align-items: center;
679
  padding: 0.05em 0.55em;
680
  color: var(--color-tag-fg);
681
  background: var(--color-tag-bg);
682
  border-radius: var(--radius-pill);
683
  font-size: 0.875em;
684
  text-decoration: none;
685
  line-height: 1.6;
686
}
687
.tag:hover {
688
  text-decoration: none;
689
  filter: brightness(1.06);
690
}
691
.tag-cloud .tag {
692
  min-height: 1.75rem;
693
}
694
.md .table {
695
  overflow-x: auto;
696
}
697
.md table {
698
  border-collapse: collapse;
699
  min-width: 50%;
700
  font-size: 0.95em;
701
}
702
.md th,
703
.md td {
704
  padding: var(--space-2) var(--space-3);
705
  border: 1px solid var(--color-line);
706
  text-align: left;
707
  vertical-align: top;
708
}
709
.md th {
710
  background: var(--color-surface);
711
  font-weight: 650;
712
}
713
.callout {
714
  padding: var(--space-3) var(--space-4);
715
  color: var(--color-callout-info);
716
  border-left: 3px solid currentColor;
717
  border-radius: var(--radius-sm);
718
  background: color-mix(in srgb, currentColor 9%, transparent);
719
}
720
.callout > :not(.callout-title) {
721
  color: var(--color-fg);
722
}
723
.callout-title {
724
  margin: 0 0 var(--space-1) !important;
725
  font-weight: 650;
726
}
727
.callout-tip,
728
.callout-success {
729
  color: var(--color-callout-tip);
730
}
731
.callout-warning,
732
.callout-question,
733
.callout-todo {
734
  color: var(--color-callout-warning);
735
}
736
.callout-danger,
737
.callout-bug,
738
.callout-failure {
739
  color: var(--color-callout-danger);
740
}
741
.callout-quote,
742
.callout-example,
743
.callout-abstract {
744
  color: var(--color-accent);
745
}
746
747
/* ── The right: graph, backlinks, links, outline ─────────────────────── */
748
.panel {
749
  padding: var(--space-2) 0 var(--space-3);
750
  border-bottom: 1px solid var(--color-line);
751
}
752
.panel:last-child {
753
  border-bottom: 0;
754
}
755
.panel .section {
756
  margin: var(--space-2) 0;
757
}
758
.local-graph {
759
  display: block;
760
  width: 100%;
761
  height: 11rem;
762
  border-radius: var(--radius-md);
763
  background: var(--color-bg);
764
  touch-action: none;
765
}
766
.link-list {
767
  list-style: none;
768
  margin: 0;
769
  padding: 0;
770
}
771
.link-list li {
772
  display: grid;
773
  padding: var(--space-1) 0;
774
}
775
.link-list a {
776
  text-decoration: none;
777
  font-weight: 550;
778
  min-height: 1.75rem;
779
  display: inline-flex;
780
  align-items: center;
781
}
782
.link-list a:hover {
783
  text-decoration: underline;
784
}
785
.context {
786
  color: var(--color-muted);
787
  font-size: var(--text-sm);
788
  line-height: 1.45;
789
}
790
.outline {
791
  list-style: none;
792
  margin: 0;
793
  padding: 0;
794
  font-size: var(--text-sm);
795
}
796
.outline .depth-1 {
797
  padding-left: 0.9rem;
798
}
799
.outline .depth-2 {
800
  padding-left: 1.8rem;
801
}
802
.outline .depth-3,
803
.outline .depth-4,
804
.outline .depth-5 {
805
  padding-left: 2.7rem;
806
}
807
.outline a {
808
  display: block;
809
  padding: 0.2rem 0;
810
  color: var(--color-muted);
811
  text-decoration: none;
812
}
813
.outline a:hover {
814
  color: var(--color-fg);
815
}
816
.meta p {
817
  margin: 0 0 var(--space-1);
818
}
819
820
/* ── Pages without a note ─────────────────────────────────────────────── */
821
.empty-state {
822
  margin: auto;
823
  max-width: 30rem;
824
  padding: var(--space-6) var(--space-4);
825
  text-align: center;
826
  display: grid;
827
  gap: var(--space-4);
828
  justify-items: center;
829
}
830
.empty-state h1 {
831
  font-size: var(--text-xl);
832
}
833
.mark {
834
  color: var(--color-accent);
835
}
836
.mark svg {
837
  width: 56px;
838
  height: 56px;
839
}
840
.results {
841
  overflow-y: auto;
842
  padding: var(--space-5) max(var(--space-5), calc((100% - var(--size-read)) / 2)) var(--space-6);
843
}
844
.results-head {
845
  font-size: var(--text-xl);
846
  margin-bottom: var(--space-4);
847
}
848
.hits {
849
  list-style: none;
850
  margin: 0;
851
  padding: 0;
852
}
853
.hits a {
854
  display: grid;
855
  gap: var(--space-1);
856
  padding: var(--space-3);
857
  margin: 0 calc(-1 * var(--space-3));
858
  border-radius: var(--radius-md);
859
  color: var(--color-fg);
860
  text-decoration: none;
861
}
862
.hits a:hover {
863
  background: var(--color-hover);
864
}
865
.hits mark {
866
  color: var(--color-fg);
867
  background: var(--color-mark-bg);
868
  border-radius: 3px;
869
}
870
.graph-stage {
871
  position: relative;
872
  flex: 1;
873
  min-height: 0;
874
}
875
.big-graph {
876
  display: block;
877
  width: 100%;
878
  height: 100%;
879
  touch-action: none;
880
}
881
.graph-help {
882
  position: absolute;
883
  left: var(--space-4);
884
  bottom: var(--space-3);
885
  pointer-events: none;
886
}
887
888
/* Signed out. */
889
.landing-page {
890
  min-height: 100dvh;
891
  display: grid;
892
  place-items: center;
893
  background: radial-gradient(60rem 30rem at 50% -10%, var(--color-active), transparent 70%), var(--color-bg);
894
}
895
.landing {
896
  padding: var(--space-6) var(--space-4);
897
}
898
.landing-card {
899
  max-width: 30rem;
900
  display: grid;
901
  gap: var(--space-4);
902
  justify-items: center;
903
  text-align: center;
904
}
905
.landing-card h1 {
906
  font-size: 2.5rem;
907
  letter-spacing: -0.03em;
908
}
909
.lede {
910
  font-size: var(--text-lg);
911
  color: var(--color-muted);
912
}
913
914
/* Sign up, log in, account. */
915
.auth {
916
  width: min(24rem, 100%);
917
  justify-items: stretch;
918
  text-align: left;
919
}
920
.auth h1 {
921
  font-size: var(--text-2xl);
922
  text-align: center;
923
}
924
.auth .mark {
925
  justify-self: center;
926
}
927
.auth > p {
928
  text-align: center;
929
}
930
.field {
931
  display: grid;
932
  gap: var(--space-1);
933
  font-weight: 600;
934
  font-size: var(--text-sm);
935
}
936
.field .input {
937
  width: 100%;
938
  font-weight: 400;
939
}
940
.auth-error {
941
  padding: var(--space-2) var(--space-3);
942
  color: var(--color-danger);
943
  border: 1px solid currentColor;
944
  border-radius: var(--radius-md);
945
  text-align: center;
946
}
947
.settings {
948
  display: grid;
949
  gap: var(--space-3);
950
  max-width: 24rem;
951
  margin-top: var(--space-5);
952
  padding-top: var(--space-2);
953
  border-top: 1px solid var(--color-line);
954
}
955
.button-danger {
956
  background: var(--color-danger);
957
  color: var(--color-bg);
958
}
959
960
/* ── Overlays: the switcher, [[ completion, the toast ─────────────────── */
961
.palette {
962
  position: fixed;
963
  inset: 0;
964
  z-index: 30;
965
  display: grid;
966
  justify-items: center;
967
  align-items: start;
968
  padding: 12vh var(--space-4) var(--space-4);
969
  background: var(--color-scrim);
970
}
971
.palette-box {
972
  width: min(38rem, 100%);
973
  overflow: hidden;
974
  background: var(--color-surface);
975
  border: 1px solid var(--color-line);
976
  border-radius: var(--radius-lg);
977
  box-shadow: 0 24px 64px var(--color-shadow);
978
}
979
.palette-input {
980
  width: 100%;
981
  min-height: 3.25rem;
982
  padding: 0 var(--space-4);
983
  border: 0;
984
  border-bottom: 1px solid var(--color-line);
985
  border-radius: 0;
986
  background: transparent;
987
  outline: 0;
988
}
989
.palette-list {
990
  list-style: none;
991
  margin: 0;
992
  padding: var(--space-2);
993
  max-height: min(24rem, 55vh);
994
  overflow-y: auto;
995
}
996
.palette-item,
997
.palette-empty {
998
  display: flex;
999
  align-items: center;
1000
  min-height: var(--size-tap);
1001
  padding: 0 var(--space-3);
1002
  border-radius: var(--radius-md);
1003
  cursor: pointer;
1004
  overflow: hidden;
1005
  text-overflow: ellipsis;
1006
  white-space: nowrap;
1007
}
1008
.palette-item[aria-selected="true"] {
1009
  background: var(--color-active);
1010
}
1011
.palette-item.is-create {
1012
  color: var(--color-accent);
1013
  font-weight: 600;
1014
}
1015
.palette-help {
1016
  display: flex;
1017
  flex-wrap: wrap;
1018
  gap: var(--space-1);
1019
  align-items: center;
1020
  padding: var(--space-2) var(--space-4);
1021
  border-top: 1px solid var(--color-line);
1022
}
1023
.suggest {
1024
  position: fixed;
1025
  z-index: 20;
1026
  list-style: none;
1027
  margin: 0;
1028
  padding: var(--space-1);
1029
  min-width: 14rem;
1030
  max-width: min(24rem, calc(100vw - 1rem));
1031
  background: var(--color-surface);
1032
  border: 1px solid var(--color-line);
1033
  border-radius: var(--radius-md);
1034
  box-shadow: 0 12px 32px var(--color-shadow);
1035
}
1036
.suggest-item {
1037
  padding: var(--space-2) var(--space-3);
1038
  border-radius: var(--radius-sm);
1039
  cursor: pointer;
1040
  white-space: nowrap;
1041
  overflow: hidden;
1042
  text-overflow: ellipsis;
1043
}
1044
.suggest-item[aria-selected="true"] {
1045
  background: var(--color-active);
1046
}
1047
.scrim {
1048
  display: none;
1049
}
1050
1051
/* A word from the last request, shown once, gone in a moment. */
1052
.toast {
1053
  position: fixed;
1054
  z-index: 40;
1055
  left: 50%;
1056
  bottom: var(--space-5);
1057
  transform: translateX(-50%);
1058
  max-width: calc(100% - 2 * var(--space-4));
1059
  padding: var(--space-3) var(--space-4);
1060
  color: var(--color-toast-fg);
1061
  background: var(--color-toast-bg);
1062
  border-radius: var(--radius-pill);
1063
  box-shadow: 0 8px 24px var(--color-shadow);
1064
  animation: toast 6s forwards;
1065
}
1066
@keyframes toast {
1067
  0%,
1068
  85% {
1069
    opacity: 1;
1070
  }
1071
  100% {
1072
    opacity: 0;
1073
    visibility: hidden;
1074
  }
1075
}
1076
1077
/* ── Narrower: the links slide in from the right ──────────────────────── */
1078
@media (max-width: 1250px) {
1079
  .shell,
1080
  .shell[data-has-right="true"] {
1081
    grid-template-columns: var(--size-left) minmax(0, 1fr);
1082
  }
1083
  .right {
1084
    position: fixed;
1085
    z-index: 15;
1086
    top: 0;
1087
    right: 0;
1088
    bottom: 0;
1089
    width: min(var(--size-right), 88vw);
1090
    transform: translateX(100%);
1091
    transition: transform 0.2s ease;
1092
    box-shadow: 0 0 40px var(--color-shadow);
1093
  }
1094
  .shell[data-open="right"] .right {
1095
    transform: none;
1096
  }
1097
  .only-narrow-right {
1098
    display: inline-grid;
1099
  }
1100
  .scrim:not([hidden]) {
1101
    display: block;
1102
    position: fixed;
1103
    inset: 0;
1104
    z-index: 12;
1105
    background: var(--color-scrim);
1106
  }
1107
}
1108
1109
/* ── A phone: the notes slide in from the left, one pane at a time ────── */
1110
@media (max-width: 900px) {
1111
  .shell,
1112
  .shell[data-has-right="true"],
1113
  .shell[data-has-right="false"] {
1114
    grid-template-columns: minmax(0, 1fr);
1115
  }
1116
  .left {
1117
    position: fixed;
1118
    z-index: 15;
1119
    top: 0;
1120
    left: 0;
1121
    bottom: 0;
1122
    width: min(var(--size-left), 88vw);
1123
    transform: translateX(-100%);
1124
    transition: transform 0.2s ease;
1125
    box-shadow: 0 0 40px var(--color-shadow);
1126
  }
1127
  .shell[data-open="left"] .left {
1128
    transform: none;
1129
  }
1130
  .only-narrow {
1131
    display: inline-grid;
1132
  }
1133
  .only-wide {
1134
    display: none;
1135
  }
1136
  .panes[data-mode="split"] {
1137
    grid-template-columns: minmax(0, 1fr);
1138
  }
1139
  .panes[data-mode="split"] .preview {
1140
    display: none;
1141
  }
1142
  .status {
1143
    min-width: 0;
1144
    max-width: 6rem;
1145
  }
1146
  .toolbar {
1147
    padding: var(--space-1);
1148
    gap: var(--space-1);
1149
  }
1150
  .segmented {
1151
    margin-right: 0;
1152
  }
1153
  .segmented button {
1154
    min-height: 2.5rem;
1155
  }
1156
  .title-input,
1157
  .sheet:has(.panes[data-mode="split"]) .title-input,
1158
  .panes[data-mode] .source,
1159
  .panes[data-mode] .preview,
1160
  .results {
1161
    padding-inline: var(--space-4);
1162
  }
1163
  .title-input {
1164
    font-size: var(--text-xl);
1165
    padding-top: var(--space-4);
1166
  }
1167
}
1168
@media (max-width: 520px) {
1169
  .toolbar .crumbs {
1170
    display: none;
1171
  }
1172
  .tools {
1173
    flex: 1;
1174
    justify-content: flex-end;
1175
  }
1176
}
1177
1178
/* Motion is a courtesy: whoever asked for less gets none. */
1179
@media (prefers-reduced-motion: reduce) {
1180
  *,
1181
  *::before,
1182
  *::after {
1183
    animation-duration: 0.01ms !important;
1184
    animation-iteration-count: 1 !important;
1185
    transition-duration: 0.01ms !important;
1186
    scroll-behavior: auto !important;
1187
  }
1188
  .toast {
1189
    animation: none;
1190
  }
1191
}
↑↓ navigate ↵ open esc close
↑↓ navigate ↵ open esc close

Keyboard shortcuts