@3sln/nook 0.0.0-stage → 0.2.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.
@@ -0,0 +1,1960 @@
1
+ import { tutorialGraphicsStyles } from "./tutorialGraphics.js";
2
+ export default `
3
+ :host {
4
+ display: block;
5
+ position: relative;
6
+ min-width: 0;
7
+ -webkit-tap-highlight-color: transparent;
8
+ --nook-accent: light-dark(#7560e8, #ad9bff);
9
+ --nook-on-accent: light-dark(#fff, #211b35);
10
+ --nook-surface: light-dark(#fff, #25232d);
11
+ --nook-text: light-dark(#232237, #f2eef8);
12
+ --nook-muted: light-dark(#77768a, #b7b0c5);
13
+ --nook-border: light-dark(#e9e7ef, #484151);
14
+ --nook-material-background: color-mix(
15
+ in srgb,
16
+ var(--nook-surface) 41%,
17
+ transparent
18
+ );
19
+ --nook-material-blur: 7.5px;
20
+ --nook-radius: 16px;
21
+ --nook-shadow:
22
+ 0 8px 32px light-dark(#241a4918, #00000048),
23
+ 0 2px 8px light-dark(#241a490a, #00000024);
24
+ --nook-duration: 180ms;
25
+ --nook-pop-duration: 260ms;
26
+ --nook-settle-duration: 240ms;
27
+ --nook-exit-duration: 120ms;
28
+ --nook-font: system-ui, sans-serif;
29
+ --nook-text-xs: 12px;
30
+ --nook-text-sm: 13px;
31
+ --nook-text-md: 14px;
32
+ --nook-text-lg: 16px;
33
+ --nook-line-height: 1.55;
34
+ --nook-heading-weight: 600;
35
+ --nook-label-weight: 550;
36
+ --nook-z: 10000;
37
+ --nook-padding: 16px;
38
+ --nook-gap: 8px;
39
+ --nook-item-size: 48px;
40
+ --nook-root-max-items: 6;
41
+ --nook-surface-offset: 56px;
42
+ --nook-edge-gap: 12px;
43
+ }
44
+ * {
45
+ -webkit-tap-highlight-color: transparent;
46
+ box-sizing: border-box;
47
+ }
48
+ button,
49
+ input,
50
+ select {
51
+ font: inherit;
52
+ }
53
+ button {
54
+ color: inherit;
55
+ cursor: pointer;
56
+ }
57
+ button:focus-visible,
58
+ input:focus-visible,
59
+ select:focus-visible,
60
+ a:focus-visible {
61
+ outline: 3px solid var(--nook-accent);
62
+ outline-offset: 3px;
63
+ }
64
+ button {
65
+ border: 0;
66
+ }
67
+ [hidden] {
68
+ display: none !important;
69
+ }
70
+ .root-measure {
71
+ width: var(--nook-item-size);
72
+ margin-inline-end: var(--nook-gap);
73
+ margin-block-start: var(--nook-surface-offset);
74
+ margin-block-end: var(--nook-edge-gap);
75
+ }
76
+ .anchor {
77
+ font: var(--nook-text-md)/var(--nook-line-height) var(--nook-font);
78
+ color: var(--nook-text);
79
+ color-scheme: var(--nook-color-scheme, var(--nook-inherited-color-scheme, light dark));
80
+ text-align: start;
81
+ -webkit-text-size-adjust: 100%;
82
+ text-size-adjust: 100%;
83
+ position: fixed;
84
+ z-index: var(--nook-z);
85
+ pointer-events: none;
86
+ }
87
+ .anchor > * {
88
+ pointer-events: auto;
89
+ }
90
+ .anchor[data-corner^="bottom"] {
91
+ bottom: var(--nook-bound-bottom, env(safe-area-inset-bottom, 0px));
92
+ }
93
+ .anchor[data-corner^="top"] {
94
+ top: var(--nook-bound-top, env(safe-area-inset-top, 0px));
95
+ }
96
+ .anchor[data-corner$="right"] {
97
+ right: var(--nook-bound-right, env(safe-area-inset-right, 0px));
98
+ }
99
+ .anchor[data-corner$="left"] {
100
+ left: var(--nook-bound-left, env(safe-area-inset-left, 0px));
101
+ }
102
+ .handle {
103
+ display: grid;
104
+ place-items: center;
105
+ position: relative;
106
+ width: 48px;
107
+ height: 48px;
108
+ background: transparent;
109
+ touch-action: none;
110
+ user-select: none;
111
+ -webkit-user-select: none;
112
+ transition:
113
+ opacity 120ms ease,
114
+ transform 120ms ease;
115
+ }
116
+ .handle:before {
117
+ content: "";
118
+ position: absolute;
119
+ inset: 16px 0 0 16px;
120
+ background: var(--nook-accent);
121
+ border-radius: 100% 0 0 0;
122
+ transition: filter var(--nook-duration);
123
+ }
124
+ .handle:hover:before {
125
+ filter: brightness(1.12);
126
+ }
127
+ .mark svg {
128
+ display: block;
129
+ width: 100%;
130
+ height: 100%;
131
+ }
132
+ .mark {
133
+ position: relative;
134
+ color: var(--nook-on-accent);
135
+ width: 16px;
136
+ height: 16px;
137
+ transform: translate(12px, 12px);
138
+ }
139
+ [data-corner$="left"] .handle:before {
140
+ inset: 16px 16px 0 0;
141
+ transform: scaleX(-1);
142
+ }
143
+ [data-corner$="left"] .mark {
144
+ transform: translate(-12px, 12px);
145
+ }
146
+ [data-corner^="top"] .handle:before {
147
+ inset: 0 0 16px 16px;
148
+ transform: scaleY(-1);
149
+ }
150
+ [data-corner^="top"][data-corner$="left"] .handle:before {
151
+ inset: 0 16px 16px 0;
152
+ transform: scale(-1);
153
+ }
154
+ [data-corner^="top"] .mark {
155
+ transform: translate(12px, -12px);
156
+ }
157
+ [data-corner^="top"][data-corner$="left"] .mark {
158
+ transform: translate(-12px, -12px);
159
+ }
160
+ .surface {
161
+ position: absolute;
162
+ width: min(var(--nook-width, 304px), calc(var(--nook-bound-width, 100vw) - 24px));
163
+ max-height: min(640px, calc(var(--nook-bound-height, 100dvh) - 96px));
164
+ overflow: auto;
165
+ background: var(--nook-material-background);
166
+ -webkit-backdrop-filter: blur(var(--nook-material-blur));
167
+ backdrop-filter: blur(var(--nook-material-blur));
168
+ border: 1px solid var(--nook-border);
169
+ border-radius: var(--nook-radius);
170
+ box-shadow: var(--nook-shadow);
171
+ padding: var(--nook-padding);
172
+ animation: arrive var(--nook-pop-duration) cubic-bezier(0.2, 0.8, 0.2, 1);
173
+ overscroll-behavior: contain;
174
+ }
175
+ [data-corner^="bottom"] .surface {
176
+ bottom: var(--nook-surface-offset);
177
+ }
178
+ [data-corner^="top"] .surface {
179
+ top: var(--nook-surface-offset);
180
+ }
181
+ [data-corner$="right"] .surface {
182
+ right: var(--nook-edge-gap);
183
+ }
184
+ [data-corner$="left"] .surface {
185
+ left: var(--nook-edge-gap);
186
+ }
187
+ header {
188
+ display: flex;
189
+ align-items: center;
190
+ gap: var(--nook-gap);
191
+ min-height: 36px;
192
+ margin-bottom: 12px;
193
+ }
194
+ h2 {
195
+ font-size: var(--nook-text-lg);
196
+ line-height: 1.25;
197
+ text-wrap: balance;
198
+ font-weight: var(--nook-heading-weight);
199
+ margin: 0;
200
+ flex: 1;
201
+ letter-spacing: -0.015em;
202
+ }
203
+ .quiet {
204
+ background: transparent;
205
+ color: var(--nook-muted);
206
+ border-radius: 8px;
207
+ min-height: 44px;
208
+ min-width: 44px;
209
+ padding: 8px;
210
+ }
211
+ .quiet:hover {
212
+ background: color-mix(in srgb, var(--nook-accent) 9%, transparent);
213
+ }
214
+ .items {
215
+ display: grid;
216
+ grid-template-columns: repeat(4, minmax(0, 1fr));
217
+ gap: var(--nook-gap);
218
+ }
219
+ .item {
220
+ position: relative;
221
+ display: flex;
222
+ min-width: 0;
223
+ align-items: center;
224
+ justify-content: center;
225
+ flex-direction: column;
226
+ gap: 6px;
227
+ min-height: var(--nook-item-size);
228
+ padding: 10px 6px;
229
+ background: transparent;
230
+ border-radius: 10px;
231
+ transition:
232
+ background var(--nook-duration),
233
+ transform var(--nook-duration);
234
+ }
235
+ .item:focus-within { z-index: 2; }
236
+ .item:hover { z-index: 3; }
237
+ .item[data-selected] { z-index: 3; }
238
+ .item:hover {
239
+ background: color-mix(in srgb, var(--nook-accent) 8%, var(--nook-surface));
240
+ }
241
+ .icon {
242
+ width: 20px;
243
+ height: 20px;
244
+ display: grid;
245
+ place-items: center;
246
+ font-size: 19px;
247
+ line-height: 1;
248
+ flex: none;
249
+ }
250
+ .icon > * {
251
+ grid-area: 1 / 1;
252
+ display: grid;
253
+ place-items: center;
254
+ line-height: 1;
255
+ }
256
+ .icon svg {
257
+ display: block;
258
+ width: 20px;
259
+ height: 20px;
260
+ margin: 0;
261
+ vertical-align: middle;
262
+ }
263
+ .item-label {
264
+ line-height: 1.35;
265
+ font-weight: var(--nook-label-weight);
266
+ display: var(--nook-label-display, none);
267
+ font-size: var(--nook-text-xs);
268
+ overflow: hidden;
269
+ text-overflow: ellipsis;
270
+ max-width: 100%;
271
+ white-space: nowrap;
272
+ }
273
+ .tooltip {
274
+ left: 50%;
275
+ transform: translateX(-50%);
276
+ max-width: min(220px, calc(var(--nook-bound-width, 100vw) - 64px));
277
+ text-align: center;
278
+ pointer-events: none;
279
+ position: absolute;
280
+ bottom: calc(100% + 6px);
281
+ padding: 5px 9px;
282
+ white-space: normal;
283
+ width: max-content;
284
+ border-radius: 7px;
285
+ background: var(--nook-text);
286
+ color: var(--nook-surface);
287
+ font-size: var(--nook-text-xs);
288
+ opacity: 0;
289
+ transition: opacity var(--nook-duration);
290
+ z-index: 2;
291
+ }
292
+ .item:nth-child(4n + 1) .tooltip {
293
+ left: 0;
294
+ transform: none;
295
+ }
296
+ .item:nth-child(4n) .tooltip,
297
+ .item:last-child .tooltip {
298
+ left: auto;
299
+ right: 0;
300
+ transform: none;
301
+ }
302
+ .item:hover .tooltip,
303
+ .item:focus-visible .tooltip {
304
+ opacity: 1;
305
+ }
306
+ [part~="back"] {
307
+ margin-inline-start: -8px;
308
+ }
309
+ [part~="close"] {
310
+ display: none;
311
+ margin-inline-end: -8px;
312
+ }
313
+ kbd {
314
+ font: 10px var(--nook-font);
315
+ border: 1px solid var(--nook-border);
316
+ border-radius: 4px;
317
+ padding: 2px 5px;
318
+ }
319
+ .setting {
320
+ display: flex;
321
+ align-items: center;
322
+ justify-content: space-between;
323
+ gap: 16px;
324
+ padding: 12px 0;
325
+ border-bottom: 1px solid var(--nook-border);
326
+ }
327
+ .setting:first-child {
328
+ padding-top: 0;
329
+ }
330
+ .setting:last-child,
331
+ .setting:has(+ [part~="settings-footer"]) {
332
+ padding-bottom: 0;
333
+ border-bottom: 0;
334
+ }
335
+ .setting > [part~="setting-label"] {
336
+ font-size: var(--nook-text-sm);
337
+ font-weight: var(--nook-label-weight);
338
+ line-height: 1.4;
339
+ min-width: 0;
340
+ flex: 1;
341
+ }
342
+ .setting small {
343
+ font-weight: 400;
344
+ display: block;
345
+ color: var(--nook-muted);
346
+ font-size: var(--nook-text-xs);
347
+ line-height: 1.5;
348
+ margin-top: 3px;
349
+ }
350
+ .setting input {
351
+ accent-color: var(--nook-accent);
352
+ width: 112px;
353
+ max-width: 42%;
354
+ margin: 0;
355
+ }
356
+ .setting select {
357
+ max-width: 46%;
358
+ min-height: 36px;
359
+ border: 1px solid var(--nook-border);
360
+ background: var(--nook-surface);
361
+ color: inherit;
362
+ border-radius: 9px;
363
+ padding: 8px;
364
+ }
365
+ .setting input[type="checkbox"] {
366
+ appearance: none;
367
+ flex: none;
368
+ max-width: none;
369
+ width: 38px;
370
+ height: 22px;
371
+ border-radius: 20px;
372
+ background: var(--nook-border);
373
+ position: relative;
374
+ cursor: pointer;
375
+ }
376
+ .setting input[type="checkbox"]:before {
377
+ content: "";
378
+ position: absolute;
379
+ width: 16px;
380
+ height: 16px;
381
+ border-radius: 100%;
382
+ background: var(--nook-on-accent);
383
+ top: 3px;
384
+ left: 3px;
385
+ transition: transform var(--nook-duration);
386
+ }
387
+ .setting input[type="checkbox"]:checked {
388
+ background: var(--nook-accent);
389
+ }
390
+ .setting input[type="checkbox"]:checked:before {
391
+ transform: translateX(16px);
392
+ }
393
+ .content {
394
+ font-size: var(--nook-text-sm);
395
+ }
396
+ .content > :first-child {
397
+ margin-top: 0;
398
+ }
399
+ .content > :last-child {
400
+ margin-bottom: 0;
401
+ }
402
+ .content form {
403
+ display: grid;
404
+ gap: 12px;
405
+ }
406
+ .content form > * {
407
+ margin: 0;
408
+ }
409
+ .content label {
410
+ display: grid;
411
+ gap: 8px;
412
+ }
413
+ .content textarea {
414
+ display: block;
415
+ resize: vertical;
416
+ min-height: 112px;
417
+ }
418
+ .content button {
419
+ justify-self: start;
420
+ min-height: 40px;
421
+ }
422
+ .content input,
423
+ .content textarea {
424
+ width: 100%;
425
+ border: 1px solid var(--nook-border);
426
+ border-radius: 8px;
427
+ padding: 10px 12px;
428
+ font: inherit;
429
+ color: inherit;
430
+ background: var(--nook-surface);
431
+ }
432
+ .content button {
433
+ padding: 10px 16px;
434
+ background: var(--nook-accent);
435
+ color: var(--nook-on-accent);
436
+ border-radius: 10px;
437
+ }
438
+ .content p {
439
+ line-height: 1.65;
440
+ color: var(--nook-muted);
441
+ }
442
+ .dragging {
443
+ opacity: 0.28;
444
+ cursor: grabbing;
445
+ }
446
+ .handle.dragging::before {
447
+ animation: none;
448
+ }
449
+ .preview,
450
+ .preview > * {
451
+ pointer-events: none;
452
+ }
453
+ .preview .handle {
454
+ opacity: var(--nook-preview-opacity, 0.8);
455
+ }
456
+ .preview .handle::before {
457
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--nook-accent) 18%, transparent);
458
+ }
459
+ [data-corner="bottom-left"] .mark svg {
460
+ transform: rotate(90deg);
461
+ }
462
+ [data-corner="top-left"] .mark svg {
463
+ transform: rotate(180deg);
464
+ }
465
+ [data-corner="top-right"] .mark svg {
466
+ transform: rotate(270deg);
467
+ }
468
+
469
+ .touch-only {
470
+ display: none;
471
+ }
472
+ .live {
473
+ position: absolute;
474
+ width: 1px;
475
+ height: 1px;
476
+ overflow: hidden;
477
+ clip-path: inset(50%);
478
+ }
479
+ @keyframes arrive {
480
+ 0% {
481
+ transform: scale(0.95);
482
+ }
483
+ 70% {
484
+ transform: scale(1.015);
485
+ }
486
+ 100% {
487
+ transform: scale(1);
488
+ }
489
+ }
490
+ @keyframes content-arrive {
491
+ 0% {
492
+ opacity: 0;
493
+ transform: translateY(6px) scale(0.99);
494
+ }
495
+ 72% {
496
+ opacity: 1;
497
+ transform: translateY(-1px) scale(1.004);
498
+ }
499
+ 100% {
500
+ opacity: 1;
501
+ transform: none;
502
+ }
503
+ }
504
+ @media (prefers-reduced-motion: reduce) {
505
+ *,
506
+ *:before,
507
+ *:after {
508
+ animation: none !important;
509
+ transition: none !important;
510
+ }
511
+ }
512
+ @media (pointer: coarse), (hover: none) {
513
+ .tooltip,
514
+ .keyboard-only {
515
+ display: none !important;
516
+ }
517
+ .touch-only {
518
+ display: block;
519
+ }
520
+ .surface {
521
+ max-height: calc(
522
+ var(--nook-bound-height, 100dvh) - 96px - env(safe-area-inset-top, 0px) -
523
+ env(safe-area-inset-bottom, 0px)
524
+ );
525
+ }
526
+ .content input,
527
+ .content textarea,
528
+ .setting select,
529
+ .setting input:not([type="checkbox"]):not([type="range"]) {
530
+ font-size: 16px;
531
+ }
532
+ }
533
+
534
+ /* Compact controls share one material, rather than individual button bubbles. */
535
+ .surface[data-presentation="compact"] {
536
+ -webkit-backdrop-filter: none;
537
+ backdrop-filter: none;
538
+ background: transparent;
539
+ border: 0;
540
+ border-radius: 0;
541
+ box-shadow: none;
542
+ padding: 0;
543
+ overflow: visible;
544
+ width: max-content;
545
+ max-width: calc(var(--nook-bound-width, 100vw) - 32px);
546
+ }
547
+ .surface[data-presentation="compact"]:has(.setting),
548
+ .surface[data-presentation="compact"][data-view="settings"] {
549
+ width: min(var(--nook-width, 304px), calc(var(--nook-bound-width, 100vw) - 32px));
550
+ }
551
+ .surface[data-presentation="compact"] .items {
552
+ display: flex;
553
+ gap: var(--nook-gap);
554
+ }
555
+ [data-corner$="right"] .surface[data-presentation="compact"] .items {
556
+ justify-content: flex-end;
557
+ }
558
+ [data-corner$="left"] .surface[data-presentation="compact"] .items {
559
+ justify-content: flex-start;
560
+ }
561
+ .surface[data-presentation="compact"] .item {
562
+ flex: 0 0 var(--nook-item-size);
563
+ background: var(--nook-floating-background, transparent);
564
+ border-radius: 10px;
565
+ box-shadow: none;
566
+ }
567
+ .surface[data-presentation="compact"] .item:hover {
568
+ background: color-mix(in srgb, var(--nook-accent) 10%, transparent);
569
+ }
570
+ .surface[data-presentation="compact"][data-view="root"] > header {
571
+ display: none;
572
+ }
573
+ .surface[data-presentation="compact"] kbd {
574
+ background: var(--nook-surface);
575
+ }
576
+ .surface[data-presentation="compact"] .setting {
577
+ background: transparent;
578
+ border-radius: 0;
579
+ padding: 12px 4px;
580
+ margin: 0;
581
+ }
582
+ .surface[data-presentation="compact"] > header h2 {
583
+ min-width: 0;
584
+ overflow-wrap: anywhere;
585
+ }
586
+
587
+ @media (pointer: coarse), (hover: none) {
588
+ .surface[data-presentation="expanded"] [part~="close"] {
589
+ display: inline-block;
590
+ }
591
+ .anchor .surface[data-presentation="expanded"] {
592
+ position: fixed;
593
+ inset: 0;
594
+ width: var(--nook-bound-width, 100vw);
595
+ height: var(--nook-bound-height, 100dvh);
596
+ max-height: none;
597
+ border: 0;
598
+ border-radius: 0;
599
+ box-shadow: none;
600
+ background: transparent;
601
+ -webkit-backdrop-filter: none;
602
+ backdrop-filter: none;
603
+ isolation: isolate;
604
+ padding: calc(24px + env(safe-area-inset-top, 0px))
605
+ calc(24px + env(safe-area-inset-right, 0px))
606
+ calc(24px + env(safe-area-inset-bottom, 0px))
607
+ calc(24px + env(safe-area-inset-left, 0px));
608
+ animation-name: none;
609
+ }
610
+ .surface[data-presentation="expanded"]::before {
611
+ content: "";
612
+ position: fixed;
613
+ inset: 0;
614
+ z-index: -1;
615
+ background: var(--nook-backdrop, var(--nook-material-background));
616
+ -webkit-backdrop-filter: blur(
617
+ var(--nook-backdrop-blur, var(--nook-material-blur))
618
+ )
619
+ saturate(var(--nook-material-saturation, 100%));
620
+ backdrop-filter: blur(var(--nook-backdrop-blur, var(--nook-material-blur)))
621
+ saturate(var(--nook-material-saturation, 100%));
622
+ box-shadow: inset 0 1px 0
623
+ var(
624
+ --nook-material-highlight,
625
+ light-dark(rgb(255 255 255 / 85%), rgb(255 255 255 / 7%))
626
+ );
627
+ pointer-events: none;
628
+ }
629
+ .surface[data-presentation="expanded"] > header,
630
+ .surface[data-presentation="expanded"] > [part~="body"] {
631
+ width: 100%;
632
+ max-width: 560px;
633
+ margin-inline: auto;
634
+ }
635
+ .surface[data-presentation="expanded"] > [part~="body"] {
636
+ animation: content-arrive var(--nook-pop-duration)
637
+ cubic-bezier(0.2, 0.8, 0.2, 1);
638
+ transform-origin: 50% 0;
639
+ }
640
+ .surface[data-presentation="expanded"] > header {
641
+ margin-bottom: 24px;
642
+ }
643
+ .surface[data-presentation="expanded"] .items {
644
+ gap: 16px;
645
+ }
646
+ .surface[data-presentation="expanded"] .item {
647
+ min-height: 64px;
648
+ }
649
+ .surface[data-presentation="expanded"] .item-label {
650
+ display: block;
651
+ }
652
+ }
653
+ .groups {
654
+ display: none;
655
+ }
656
+ @media (pointer: coarse), (hover: none) {
657
+ .surface[data-presentation="expanded"] > [part~="body"] > .items {
658
+ display: none;
659
+ }
660
+ .surface[data-presentation="expanded"] .groups,
661
+ .surface[data-presentation="expanded"] .group-body {
662
+ display: grid;
663
+ grid-template-columns: repeat(auto-fit, minmax(min(64px, 100%), 1fr));
664
+ gap: var(--nook-group-gap, 16px);
665
+ }
666
+ .surface[data-view="root"][data-presentation="expanded"]
667
+ > [part~="body"]
668
+ > .items:has(> .setting) {
669
+ display: grid;
670
+ margin-bottom: 16px;
671
+ }
672
+ .surface[data-view="root"][data-presentation="expanded"]
673
+ > [part~="body"]
674
+ > .items
675
+ > .item {
676
+ display: none;
677
+ }
678
+ .surface[data-view="root"][data-presentation="expanded"]
679
+ > [part~="body"]
680
+ > .items
681
+ > .setting {
682
+ grid-column: 1 / -1;
683
+ }
684
+ .group {
685
+ grid-column: 1 / -1;
686
+ min-width: 0;
687
+ }
688
+ .group + .group {
689
+ margin-top: 8px;
690
+ }
691
+ [part~="group-heading"] {
692
+ margin: 0 0 12px;
693
+ font-size: var(--nook-text-sm);
694
+ font-weight: var(--nook-heading-weight);
695
+ color: var(--nook-text);
696
+ }
697
+ .group .group {
698
+ padding-inline-start: 12px;
699
+ border-inline-start: 1px solid var(--nook-border);
700
+ }
701
+ }
702
+
703
+ @keyframes reveal {
704
+ from {
705
+ opacity: 0;
706
+ }
707
+ to {
708
+ opacity: 1;
709
+ }
710
+ }
711
+ .surface[data-view="commands"] {
712
+ width: min(var(--nook-command-width, 480px), calc(var(--nook-bound-width, 100vw) - 24px));
713
+ display: flex;
714
+ flex-direction: column;
715
+ overflow: hidden;
716
+ }
717
+ .surface[data-view="commands"] > header {
718
+ flex: none;
719
+ }
720
+ .surface[data-view="commands"] > [part~="body"] {
721
+ display: flex;
722
+ flex-direction: column;
723
+ gap: 12px;
724
+ min-height: 0;
725
+ }
726
+ .command-results {
727
+ min-height: 0;
728
+ overflow: auto;
729
+ overscroll-behavior: contain;
730
+ }
731
+ .command-search {
732
+ flex: none;
733
+ }
734
+ [data-corner^="bottom"] .command-search {
735
+ order: 1;
736
+ }
737
+ @media (pointer: coarse), (hover: none) {
738
+ .surface[data-view="commands"][data-presentation="expanded"] > [part~="body"] {
739
+ flex: 1;
740
+ }
741
+ .surface[data-view="commands"][data-presentation="expanded"] .command-results {
742
+ flex: 1;
743
+ }
744
+ }
745
+ .command-search {
746
+ width: 100%;
747
+ min-height: 44px;
748
+ padding: 10px 12px;
749
+ border: 1px solid var(--nook-border);
750
+ border-radius: 10px;
751
+ background: transparent;
752
+ color: var(--nook-text);
753
+ font: inherit;
754
+ }
755
+ .command-list {
756
+ display: grid;
757
+ gap: 4px;
758
+ margin-top: 0;
759
+ }
760
+ .command-result {
761
+ position: relative;
762
+ display: grid;
763
+ grid-template-columns: minmax(0, 1fr) auto;
764
+ gap: 3px 12px;
765
+ padding: 12px;
766
+ text-align: start;
767
+ border-radius: 10px;
768
+ background: transparent;
769
+ color: var(--nook-text);
770
+ }
771
+ .command-result:hover,
772
+ .command-result[data-active="true"] {
773
+ background: color-mix(in srgb, var(--nook-accent) 8%, transparent);
774
+ }
775
+ [part~="command-name"] {
776
+ font-size: var(--nook-text-md);
777
+ line-height: 1.4;
778
+ font-weight: var(--nook-label-weight);
779
+ }
780
+ [part~="command-description"] {
781
+ color: var(--nook-muted);
782
+ font-size: var(--nook-text-xs);
783
+ line-height: 1.5;
784
+ }
785
+ .command-result [part~="command-description"] {
786
+ grid-column: 1;
787
+ }
788
+ .command-result kbd {
789
+ grid-column: 2;
790
+ grid-row: 1 / span 2;
791
+ align-self: center;
792
+ }
793
+ .command-empty {
794
+ color: var(--nook-muted);
795
+ padding: 16px 12px;
796
+ font-size: var(--nook-text-sm);
797
+ margin: 0;
798
+ }
799
+ .command-form,
800
+ .command-fields {
801
+ display: grid;
802
+ gap: 16px;
803
+ }
804
+ .command-description {
805
+ margin: 0;
806
+ }
807
+ .command-field {
808
+ display: grid;
809
+ gap: 6px;
810
+ font-size: var(--nook-text-sm);
811
+ }
812
+ .command-field input,
813
+ .command-field select {
814
+ min-width: 0;
815
+ width: 100%;
816
+ min-height: 40px;
817
+ border: 1px solid var(--nook-border);
818
+ border-radius: 8px;
819
+ padding: 8px 10px;
820
+ font: inherit;
821
+ color: var(--nook-text);
822
+ background: var(--nook-surface);
823
+ }
824
+ .command-field input[type="checkbox"] {
825
+ width: 20px;
826
+ height: 20px;
827
+ min-height: 0;
828
+ accent-color: var(--nook-accent);
829
+ }
830
+ .command-run {
831
+ min-height: 44px;
832
+ padding: 10px 16px;
833
+ border-radius: 8px;
834
+ background: var(--nook-accent);
835
+ color: var(--nook-on-accent);
836
+ justify-self: start;
837
+ }
838
+ .number {
839
+ display: none;
840
+ position: absolute;
841
+ inset-block-start: -4px;
842
+ inset-inline-end: -4px;
843
+ min-width: 19px;
844
+ height: 19px;
845
+ padding: 0 4px;
846
+ border-radius: 6px;
847
+ background: var(--nook-text);
848
+ color: var(--nook-surface);
849
+ font: 10px/19px var(--nook-font);
850
+ text-align: center;
851
+ pointer-events: none;
852
+ z-index: 3;
853
+ }
854
+ .anchor[data-numbering] .number:not([hidden]) {
855
+ display: block;
856
+ }
857
+ @media (pointer: coarse), (hover: none) {
858
+ .command-search,
859
+ .command-field input,
860
+ .command-field select {
861
+ font-size: 16px;
862
+ }
863
+ .anchor[data-numbering] .number {
864
+ display: none;
865
+ }
866
+ }
867
+ .quiet svg {
868
+ display: block;
869
+ width: 18px;
870
+ height: 18px;
871
+ margin: auto;
872
+ }
873
+ .tutorial {
874
+ font-size: var(--nook-text-sm);
875
+ line-height: 1.65;
876
+ margin-bottom: 20px;
877
+ color: var(--nook-muted);
878
+ }
879
+ .tutorial p {
880
+ margin: 0 0 12px;
881
+ }
882
+ .tutorial strong {
883
+ color: var(--nook-text);
884
+ }
885
+ .anchor:not([data-layout-ready]) .layout-hint {
886
+ display: none;
887
+ }
888
+ .handle.inviting::before {
889
+ animation: nook-invite var(--nook-invite-cycle, 2s) ease-out infinite;
890
+ animation-delay: var(--nook-invite-delay, 200ms);
891
+ }
892
+ @keyframes nook-invite {
893
+ 0% {
894
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--nook-accent) 30%, transparent);
895
+ filter: brightness(1);
896
+ }
897
+ 45% {
898
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--nook-accent) 20%, transparent);
899
+ filter: brightness(1.12);
900
+ }
901
+ 100% {
902
+ box-shadow: 0 0 0 10px color-mix(in srgb, var(--nook-accent) 0%, transparent);
903
+ filter: brightness(1);
904
+ }
905
+ }
906
+ @media (prefers-reduced-motion: reduce) {
907
+ .handle.inviting::before {
908
+ animation: none;
909
+ }
910
+ }
911
+ .handle-tooltip {
912
+ position: absolute;
913
+ width: max-content;
914
+ max-width: min(240px, calc(var(--nook-bound-width, 100vw) - 32px));
915
+ display: grid;
916
+ gap: 3px;
917
+ padding: 9px 12px;
918
+ border-radius: 10px;
919
+ background: var(--nook-text);
920
+ color: var(--nook-surface);
921
+ box-shadow: var(--nook-shadow);
922
+ text-align: start;
923
+ font: 12px/1.5 var(--nook-font);
924
+ opacity: 0;
925
+ visibility: hidden;
926
+ transition:
927
+ opacity var(--nook-duration),
928
+ visibility var(--nook-duration);
929
+ pointer-events: none;
930
+ z-index: 2;
931
+ }
932
+ .handle-tooltip [part~="drag-hint"] {
933
+ opacity: 0.8;
934
+ }
935
+ [data-corner^="bottom"] .handle-tooltip {
936
+ bottom: calc(100% + 8px);
937
+ }
938
+ [data-corner^="top"] .handle-tooltip {
939
+ top: calc(100% + 8px);
940
+ }
941
+ [data-corner$="right"] .handle-tooltip {
942
+ right: 8px;
943
+ }
944
+ [data-corner$="left"] .handle-tooltip {
945
+ left: 8px;
946
+ }
947
+ .handle:not(.dragging):not([data-tooltip-dismissed]):hover .handle-tooltip,
948
+ .handle:not(.dragging):not([data-tooltip-dismissed]):focus-visible
949
+ .handle-tooltip {
950
+ opacity: 1;
951
+ visibility: visible;
952
+ }
953
+ @media (pointer: coarse), (hover: none) {
954
+ .handle-tooltip {
955
+ display: none;
956
+ }
957
+ }
958
+ .surface::before,
959
+ .surface > header,
960
+ .surface > [part~="body"] {
961
+ animation: reveal var(--nook-duration) ease-out;
962
+ }
963
+ /* Shared dial material for transient controls: light tint, subtle blur,
964
+ a defined edge, and one elevation shadow. Feathering made the material muddy. */
965
+ .surface[data-presentation="compact"] {
966
+ isolation: isolate;
967
+ }
968
+ .surface[data-presentation="compact"]::before {
969
+ content: "";
970
+ position: absolute;
971
+ inset: var(--nook-halo-inset, -8px);
972
+ z-index: -1;
973
+ pointer-events: none;
974
+ border-radius: var(--nook-radius);
975
+ border: 1px solid
976
+ var(
977
+ --nook-material-edge,
978
+ light-dark(rgb(40 35 60 / 10%), rgb(255 255 255 / 14%))
979
+ );
980
+ background: var(--nook-halo-background, var(--nook-material-background));
981
+ box-shadow:
982
+ inset 0 1px 0
983
+ var(
984
+ --nook-material-highlight,
985
+ light-dark(rgb(255 255 255 / 85%), rgb(255 255 255 / 7%))
986
+ ),
987
+ var(--nook-shadow);
988
+ -webkit-backdrop-filter: blur(
989
+ var(--nook-halo-blur, var(--nook-material-blur))
990
+ )
991
+ saturate(var(--nook-material-saturation, 100%));
992
+ backdrop-filter: blur(var(--nook-halo-blur, var(--nook-material-blur)))
993
+ saturate(var(--nook-material-saturation, 100%));
994
+ }
995
+ @supports not (
996
+ (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))
997
+ ) {
998
+ .surface[data-presentation="compact"]::before,
999
+ .surface[data-presentation="expanded"],
1000
+ .surface[data-presentation="expanded"]::before {
1001
+ background: var(--nook-surface);
1002
+ }
1003
+ }
1004
+ @media (prefers-reduced-transparency: reduce) {
1005
+ .surface[data-presentation="compact"]::before,
1006
+ .surface[data-presentation="expanded"],
1007
+ .surface[data-presentation="expanded"]::before {
1008
+ background: var(--nook-surface);
1009
+ -webkit-backdrop-filter: none;
1010
+ backdrop-filter: none;
1011
+ }
1012
+ }
1013
+
1014
+ .landing-zone,
1015
+ .landing-zone > * {
1016
+ pointer-events: none;
1017
+ }
1018
+ .landing-zone .handle::before {
1019
+ background: transparent;
1020
+ border: 1px dashed var(--nook-accent);
1021
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--nook-surface) 82%, transparent);
1022
+ }
1023
+ .landing-zone[data-selected] .handle::before {
1024
+ border: 2px solid var(--nook-accent);
1025
+ background: color-mix(in srgb, var(--nook-accent) 10%, transparent);
1026
+ }
1027
+ .anchor[data-draggable="false"] [part~="drag-hint"] {
1028
+ display: none;
1029
+ }
1030
+ .handle:focus-visible {
1031
+ outline: none;
1032
+ }
1033
+ .handle:focus-visible::before {
1034
+ animation: none;
1035
+ box-shadow:
1036
+ 0 0 0 2px var(--nook-surface),
1037
+ 0 0 0 4px var(--nook-accent);
1038
+ }
1039
+ [data-corner="bottom-right"] .handle,
1040
+ [data-corner="bottom-right"] .surface {
1041
+ transform-origin: 100% 100%;
1042
+ }
1043
+ [data-corner="bottom-left"] .handle,
1044
+ [data-corner="bottom-left"] .surface {
1045
+ transform-origin: 0 100%;
1046
+ }
1047
+ [data-corner="top-left"] .handle,
1048
+ [data-corner="top-left"] .surface {
1049
+ transform-origin: 0 0;
1050
+ }
1051
+ [data-corner="top-right"] .handle,
1052
+ [data-corner="top-right"] .surface {
1053
+ transform-origin: 100% 0;
1054
+ }
1055
+ .quiet,
1056
+ .command-result,
1057
+ .command-run,
1058
+ .content button {
1059
+ transition:
1060
+ background var(--nook-duration),
1061
+ color var(--nook-duration),
1062
+ box-shadow var(--nook-duration),
1063
+ transform 120ms ease;
1064
+ }
1065
+ .item:hover {
1066
+ transform: translateY(-1px);
1067
+ }
1068
+ .item:active,
1069
+ .quiet:active,
1070
+ .command-run:active,
1071
+ .content button:active {
1072
+ transform: scale(0.97);
1073
+ }
1074
+ .landing-zone {
1075
+ animation: reveal 120ms ease-out;
1076
+ }
1077
+ .landing-zone .handle::before {
1078
+ transition:
1079
+ background 120ms ease,
1080
+ border-color 120ms ease,
1081
+ box-shadow 120ms ease;
1082
+ }
1083
+ :host([data-nook-capturing]) .anchor,
1084
+ :host([data-bound-hidden]) .anchor { visibility: hidden !important; pointer-events: none !important; }
1085
+ .enum-control {
1086
+ display: inline-grid;
1087
+ gap: 4px;
1088
+ min-width: 0;
1089
+ max-width: 48%;
1090
+ }
1091
+ .enum-trigger {
1092
+ display: grid;
1093
+ grid-template-columns: minmax(0, 1fr) 16px;
1094
+ align-items: center;
1095
+ gap: 10px;
1096
+ min-height: 40px;
1097
+ width: 100%;
1098
+ padding: 8px 10px;
1099
+ border: 1px solid var(--nook-border);
1100
+ border-radius: 10px;
1101
+ color: var(--nook-text);
1102
+ background: color-mix(in srgb, var(--nook-surface) 72%, transparent);
1103
+ text-align: start;
1104
+ transition:
1105
+ background var(--nook-duration),
1106
+ border-color var(--nook-duration);
1107
+ }
1108
+ .enum-trigger:hover {
1109
+ background: var(--nook-surface);
1110
+ border-color: var(--nook-accent);
1111
+ }
1112
+ .enum-trigger:disabled {
1113
+ opacity: 0.45;
1114
+ cursor: not-allowed;
1115
+ }
1116
+ .enum-current {
1117
+ display: flex;
1118
+ align-items: center;
1119
+ min-width: 0;
1120
+ gap: 8px;
1121
+ }
1122
+ [part~="enum-selected-label"] {
1123
+ overflow: hidden;
1124
+ text-overflow: ellipsis;
1125
+ white-space: nowrap;
1126
+ }
1127
+ .enum-chevron,
1128
+ .enum-check {
1129
+ display: grid;
1130
+ place-items: center;
1131
+ width: 16px;
1132
+ height: 16px;
1133
+ }
1134
+ .enum-chevron svg,
1135
+ .enum-check svg {
1136
+ display: block;
1137
+ width: 16px;
1138
+ height: 16px;
1139
+ }
1140
+ .enum-chevron {
1141
+ color: var(--nook-muted);
1142
+ }
1143
+ .enum-value {
1144
+ position: absolute !important;
1145
+ width: 1px !important;
1146
+ height: 1px !important;
1147
+ min-height: 0 !important;
1148
+ padding: 0 !important;
1149
+ border: 0 !important;
1150
+ clip-path: inset(50%);
1151
+ overflow: hidden;
1152
+ pointer-events: none;
1153
+ }
1154
+ .enum-options {
1155
+ max-height: min(440px, calc(var(--nook-bound-height, 100dvh) - 168px));
1156
+ overflow: auto;
1157
+ overscroll-behavior: contain;
1158
+ padding: 4px;
1159
+ display: grid;
1160
+ gap: 6px;
1161
+ }
1162
+ .enum-option {
1163
+ display: grid;
1164
+ grid-template-columns: minmax(0, 1fr) 16px;
1165
+ align-items: center;
1166
+ gap: 14px;
1167
+ width: 100%;
1168
+ min-height: 52px;
1169
+ padding: 12px;
1170
+ border-radius: 12px;
1171
+ text-align: start;
1172
+ background: transparent;
1173
+ transition: background var(--nook-duration);
1174
+ }
1175
+ .enum-option:hover,
1176
+ .enum-option:focus-visible {
1177
+ background: color-mix(in srgb, var(--nook-accent) 7%, transparent);
1178
+ }
1179
+ .enum-option[aria-selected="true"] {
1180
+ background: color-mix(in srgb, var(--nook-accent) 10%, transparent);
1181
+ }
1182
+ .enum-option:disabled {
1183
+ opacity: 0.4;
1184
+ cursor: not-allowed;
1185
+ }
1186
+ .enum-option-content {
1187
+ display: flex;
1188
+ align-items: center;
1189
+ gap: 12px;
1190
+ min-width: 0;
1191
+ }
1192
+ .enum-option-icon {
1193
+ display: grid;
1194
+ place-items: center;
1195
+ flex: none;
1196
+ width: 22px;
1197
+ height: 22px;
1198
+ }
1199
+ .enum-option-icon svg {
1200
+ display: block;
1201
+ width: 22px;
1202
+ height: 22px;
1203
+ }
1204
+ [part~="enum-option-label"] {
1205
+ display: block;
1206
+ font-size: var(--nook-text-sm);
1207
+ font-weight: var(--nook-label-weight);
1208
+ }
1209
+ [part~="enum-option-description"] {
1210
+ display: block;
1211
+ font-size: var(--nook-text-xs);
1212
+ color: var(--nook-muted);
1213
+ line-height: 1.5;
1214
+ margin-top: 3px;
1215
+ }
1216
+ .enum-check {
1217
+ color: var(--nook-accent);
1218
+ visibility: hidden;
1219
+ }
1220
+ .enum-option[aria-selected="true"] .enum-check {
1221
+ visibility: visible;
1222
+ }
1223
+ .enum-empty {
1224
+ font-size: var(--nook-text-sm);
1225
+ color: var(--nook-muted);
1226
+ margin: 0;
1227
+ }
1228
+ .command-field .enum-control {
1229
+ max-width: none;
1230
+ width: 100%;
1231
+ }
1232
+ .feedback-form {
1233
+ display: grid;
1234
+ gap: 16px;
1235
+ }
1236
+ .feedback-intro {
1237
+ margin: 0;
1238
+ color: var(--nook-muted);
1239
+ font-size: var(--nook-text-sm);
1240
+ }
1241
+ .feedback-types {
1242
+ display: flex;
1243
+ flex-wrap: wrap;
1244
+ gap: 6px;
1245
+ }
1246
+ .feedback-types button {
1247
+ padding: 7px 10px;
1248
+ border-radius: 8px;
1249
+ border: 1px solid var(--nook-border);
1250
+ background: transparent;
1251
+ font-size: var(--nook-text-xs);
1252
+ min-height: 36px;
1253
+ transition:
1254
+ background var(--nook-duration),
1255
+ border-color var(--nook-duration);
1256
+ }
1257
+ .feedback-types button[aria-checked="true"] {
1258
+ border-color: color-mix(in srgb, var(--nook-accent) 45%, var(--nook-border));
1259
+ background: color-mix(in srgb, var(--nook-accent) 10%, transparent);
1260
+ }
1261
+ .feedback-label {
1262
+ display: grid;
1263
+ gap: 8px;
1264
+ font-size: var(--nook-text-xs);
1265
+ font-weight: var(--nook-label-weight);
1266
+ }
1267
+ .feedback-label textarea {
1268
+ width: 100%;
1269
+ min-height: 132px;
1270
+ resize: vertical;
1271
+ font: var(--nook-text-md)/1.6 var(--nook-font);
1272
+ border: 1px solid var(--nook-border);
1273
+ border-radius: 12px;
1274
+ background: color-mix(in srgb, var(--nook-surface) 65%, transparent);
1275
+ color: var(--nook-text);
1276
+ padding: 12px;
1277
+ }
1278
+ textarea:focus-visible {
1279
+ outline: 3px solid var(--nook-accent);
1280
+ outline-offset: 3px;
1281
+ }
1282
+ .feedback-tools {
1283
+ display: flex;
1284
+ flex-wrap: wrap;
1285
+ gap: 8px;
1286
+ }
1287
+ .feedback-tools button {
1288
+ padding: 8px 10px;
1289
+ min-height: 36px;
1290
+ background: transparent;
1291
+ border: 1px solid var(--nook-border);
1292
+ border-radius: 8px;
1293
+ font-size: var(--nook-text-xs);
1294
+ }
1295
+ .feedback-tools button:hover {
1296
+ background: color-mix(in srgb, var(--nook-accent) 6%, transparent);
1297
+ }
1298
+ .feedback-attachments {
1299
+ padding: 0;
1300
+ margin: 0;
1301
+ display: grid;
1302
+ gap: 8px;
1303
+ list-style: none;
1304
+ }
1305
+ .feedback-attachments:empty {
1306
+ display: none;
1307
+ }
1308
+ .feedback-attachment {
1309
+ display: flex;
1310
+ align-items: center;
1311
+ gap: 10px;
1312
+ padding: 8px;
1313
+ border: 1px solid var(--nook-border);
1314
+ border-radius: 10px;
1315
+ }
1316
+ [part~="feedback-preview"] {
1317
+ width: 44px;
1318
+ height: 36px;
1319
+ object-fit: cover;
1320
+ border-radius: 5px;
1321
+ }
1322
+ [part~="feedback-attachment-name"] {
1323
+ flex: 1;
1324
+ min-width: 0;
1325
+ overflow-wrap: anywhere;
1326
+ font-size: var(--nook-text-xs);
1327
+ color: var(--nook-muted);
1328
+ }
1329
+ [part~="feedback-remove"] {
1330
+ display: grid;
1331
+ place-items: center;
1332
+ flex: none;
1333
+ min-width: 32px;
1334
+ min-height: 32px;
1335
+ background: transparent;
1336
+ border-radius: 7px;
1337
+ }
1338
+ [part~="feedback-remove"] svg {
1339
+ width: 16px;
1340
+ height: 16px;
1341
+ }
1342
+ .feedback-privacy {
1343
+ margin: 0;
1344
+ font-size: var(--nook-text-xs);
1345
+ line-height: 1.6;
1346
+ color: var(--nook-muted);
1347
+ }
1348
+ .feedback-status {
1349
+ margin: 12px 0 0;
1350
+ font-size: var(--nook-text-xs);
1351
+ color: var(--nook-muted);
1352
+ }
1353
+ .feedback-status:empty {
1354
+ display: none;
1355
+ }
1356
+ .feedback-status[data-error="true"] {
1357
+ color: light-dark(#a82843, #ff9cb1);
1358
+ }
1359
+ .feedback-success h3 {
1360
+ font-size: var(--nook-text-lg);
1361
+ font-weight: var(--nook-heading-weight);
1362
+ line-height: 1.3;
1363
+ margin: 0 0 8px;
1364
+ }
1365
+ .feedback-success p {
1366
+ font-size: var(--nook-text-sm);
1367
+ color: var(--nook-muted);
1368
+ margin: 0 0 16px;
1369
+ }
1370
+ .feedback-success button + button {
1371
+ margin-inline-start: 8px;
1372
+ }
1373
+ .feedback-form [disabled] {
1374
+ opacity: 0.55;
1375
+ cursor: wait;
1376
+ }
1377
+ @media (pointer: coarse), (hover: none) {
1378
+ .feedback-label textarea {
1379
+ font-size: 16px;
1380
+ }
1381
+ .enum-option {
1382
+ min-height: 60px;
1383
+ }
1384
+ }
1385
+ .enum-error { font-size: var(--nook-text-xs); line-height: 1.5; color: light-dark(#a82843,#ff9cb1); }
1386
+ .surface:is([data-view="full"], [data-view="all"]) {
1387
+ width: min(var(--nook-overflow-width, 360px), calc(var(--nook-bound-width, 100vw) - 32px));
1388
+ }
1389
+ .surface:is([data-view="full"], [data-view="all"]) > [part~="body"] > .items {
1390
+ display: none;
1391
+ }
1392
+ .overflow-groups {
1393
+ display: grid;
1394
+ gap: 20px;
1395
+ }
1396
+ [part~="overflow-group-heading"] {
1397
+ margin: 0 0 6px;
1398
+ padding-inline: 12px;
1399
+ font-size: var(--nook-text-xs);
1400
+ font-weight: var(--nook-heading-weight);
1401
+ line-height: 1.4;
1402
+ color: var(--nook-muted);
1403
+ }
1404
+ [part~="overflow-group-body"] {
1405
+ display: grid;
1406
+ gap: 4px;
1407
+ }
1408
+ .overflow-groups .item {
1409
+ flex-direction: row;
1410
+ justify-content: flex-start;
1411
+ gap: 12px;
1412
+ min-width: 0;
1413
+ min-height: 44px;
1414
+ padding: 10px 12px;
1415
+ text-align: start;
1416
+ }
1417
+ .overflow-groups .item-label {
1418
+ display: block;
1419
+ flex: 1;
1420
+ text-align: start;
1421
+ font-size: var(--nook-text-sm);
1422
+ white-space: normal;
1423
+ overflow-wrap: anywhere;
1424
+ }
1425
+ .overflow-groups .tooltip { display: none; }
1426
+ @media (pointer: coarse), (hover: none) {
1427
+ .anchor .surface:is([data-view="full"], [data-view="all"])[data-presentation="expanded"] { width: var(--nook-bound-width, 100vw); }
1428
+ .overflow-groups .item { min-height: 48px; }
1429
+ }
1430
+
1431
+ @media (hover: hover) and (pointer: fine) {
1432
+ .anchor[data-numbering] .surface:not([data-view="root"]):not([data-view="commands"]):not([data-view="full"]):not([data-view="all"]):has(.item:not([hidden])) {
1433
+ width: min(var(--nook-keyboard-width, 320px), calc(var(--nook-bound-width, 100vw) - 32px));
1434
+ }
1435
+ .anchor[data-numbering] .surface:not([data-view="full"]):not([data-view="all"]) > [part~="body"] > .items {
1436
+ display: grid;
1437
+ grid-template-columns: minmax(0, 1fr);
1438
+ gap: 4px;
1439
+ }
1440
+ .anchor[data-numbering] .item {
1441
+ flex: 0 0 auto;
1442
+ flex-direction: row;
1443
+ justify-content: flex-start;
1444
+ gap: 10px;
1445
+ min-height: 44px;
1446
+ padding: 10px 12px;
1447
+ text-align: start;
1448
+ }
1449
+ .anchor[data-numbering] .item-label {
1450
+ display: block;
1451
+ flex: 1;
1452
+ min-width: 0;
1453
+ max-width: none;
1454
+ white-space: normal;
1455
+ overflow-wrap: anywhere;
1456
+ font-size: var(--nook-text-sm);
1457
+ }
1458
+ .anchor[data-numbering] .item .number { order: -2; }
1459
+ .anchor[data-numbering] .item .icon { order: -1; }
1460
+ .anchor[data-numbering] .number {
1461
+ position: static;
1462
+ flex: none;
1463
+ min-width: 24px;
1464
+ height: 24px;
1465
+ border: 1px solid var(--nook-border);
1466
+ border-radius: 6px;
1467
+ background: color-mix(in srgb, var(--nook-accent) 8%, var(--nook-surface));
1468
+ color: var(--nook-text);
1469
+ font: var(--nook-text-xs)/22px var(--nook-font);
1470
+ }
1471
+ .anchor[data-numbering] .item .tooltip { display: none; }
1472
+ .anchor[data-numbering] .command-result {
1473
+ grid-template-columns: auto minmax(0, 1fr) auto;
1474
+ }
1475
+ .anchor[data-numbering] .command-result .number {
1476
+ grid-column: 1;
1477
+ grid-row: 1 / span 2;
1478
+ align-self: center;
1479
+ }
1480
+ .anchor[data-numbering] [part~="command-name"],
1481
+ .anchor[data-numbering] .command-result [part~="command-description"] { grid-column: 2; }
1482
+ .anchor[data-numbering] .command-result kbd { grid-column: 3; }
1483
+ }
1484
+
1485
+ /* Alt suppresses duplicate hover/focus labels even while layout data refreshes. */
1486
+ .anchor:is([data-alt-held], [data-numbering]) :is(.tooltip, [role="tooltip"]) {
1487
+ display: none;
1488
+ visibility: hidden;
1489
+ opacity: 0;
1490
+ transition: none;
1491
+ }
1492
+ /* Edge centers keep the anchor untransformed so fullscreen panels remain fixed
1493
+ to the viewport. The visible handle becomes a shallow semicircle. */
1494
+ .anchor[data-corner="top-center"], .anchor[data-corner="bottom-center"] { left: calc(var(--nook-bound-left, 0px) + var(--nook-bound-width, 100vw) / 2 - 32px); }
1495
+ .anchor[data-corner="left-center"] { left: var(--nook-bound-left, env(safe-area-inset-left, 0px)); top: calc(var(--nook-bound-top, 0px) + var(--nook-bound-height, 100dvh) / 2 - 32px); }
1496
+ .anchor[data-corner="right-center"] { right: var(--nook-bound-right, env(safe-area-inset-right, 0px)); top: calc(var(--nook-bound-top, 0px) + var(--nook-bound-height, 100dvh) / 2 - 32px); }
1497
+ [data-corner="top-center"] .handle, [data-corner="bottom-center"] .handle { width: 64px; height: 48px; }
1498
+ [data-corner="left-center"] .handle, [data-corner="right-center"] .handle { width: 48px; height: 64px; }
1499
+ [data-corner="top-center"] .handle::before { inset: 0 0 16px; border-radius: 0 0 32px 32px; transform: none; }
1500
+ [data-corner="bottom-center"] .handle::before { inset: 16px 0 0; border-radius: 32px 32px 0 0; transform: none; }
1501
+ [data-corner="left-center"] .handle::before { inset: 0 16px 0 0; border-radius: 0 32px 32px 0; transform: none; }
1502
+ [data-corner="right-center"] .handle::before { inset: 0 0 0 16px; border-radius: 32px 0 0 32px; transform: none; }
1503
+ [data-corner="top-center"] .mark { transform: translate(0, -8px); }
1504
+ [data-corner="bottom-center"] .mark { transform: translate(0, 8px); }
1505
+ [data-corner="left-center"] .mark { transform: translate(-8px, 0); }
1506
+ [data-corner="right-center"] .mark { transform: translate(8px, 0); }
1507
+ [data-corner="top-center"] .mark svg { transform: rotate(225deg); }
1508
+ [data-corner="bottom-center"] .mark svg { transform: rotate(45deg); }
1509
+ [data-corner="left-center"] .mark svg { transform: rotate(135deg); }
1510
+ [data-corner="right-center"] .mark svg { transform: rotate(315deg); }
1511
+ [data-corner="top-center"] .surface, [data-corner="bottom-center"] .surface { left: 32px; right: auto; translate: -50% 0; }
1512
+ [data-corner="left-center"] .surface { left: var(--nook-surface-offset); right: auto; }
1513
+ [data-corner="right-center"] .surface { right: var(--nook-surface-offset); left: auto; }
1514
+ [data-corner="left-center"] .surface, [data-corner="right-center"] .surface {
1515
+ top: 32px; bottom: auto; translate: 0 -50%;
1516
+ max-height: min(640px, calc(var(--nook-bound-height, 100dvh) - 32px));
1517
+ max-width: calc(var(--nook-bound-width, 100vw) - var(--nook-surface-offset) - var(--nook-edge-gap));
1518
+ }
1519
+ [data-corner="top-center"] .handle, [data-corner="top-center"] .surface { transform-origin: 50% 0; }
1520
+ [data-corner="bottom-center"] .handle, [data-corner="bottom-center"] .surface { transform-origin: 50% 100%; }
1521
+ [data-corner="left-center"] .handle, [data-corner="left-center"] .surface { transform-origin: 0 50%; }
1522
+ [data-corner="right-center"] .handle, [data-corner="right-center"] .surface { transform-origin: 100% 50%; }
1523
+ [data-corner="top-center"] .handle-tooltip { top: calc(100% + 8px); bottom: auto; left: 50%; right: auto; translate: -50% 0; }
1524
+ [data-corner="bottom-center"] .handle-tooltip { bottom: calc(100% + 8px); top: auto; left: 50%; right: auto; translate: -50% 0; }
1525
+ [data-corner="left-center"] .handle-tooltip { left: calc(100% + 8px); right: auto; top: 50%; bottom: auto; translate: 0 -50%; }
1526
+ [data-corner="right-center"] .handle-tooltip { right: calc(100% + 8px); left: auto; top: 50%; bottom: auto; translate: 0 -50%; }
1527
+ [data-corner="left-center"] .surface[data-view="commands"],
1528
+ [data-corner="right-center"] .surface[data-view="commands"] {
1529
+ height: min(var(--nook-command-height, 480px), calc(var(--nook-bound-height, 100dvh) - 32px));
1530
+ }
1531
+ [data-corner="left-center"] .surface[data-view="commands"] > [part~="body"],
1532
+ [data-corner="right-center"] .surface[data-view="commands"] > [part~="body"] { flex: 1; }
1533
+ @media (pointer: coarse), (hover: none) {
1534
+ .anchor[data-corner$="center"] .surface[data-presentation="expanded"] {
1535
+ inset: 0; translate: none; max-width: none; max-height: none; width: var(--nook-bound-width, 100vw); height: var(--nook-bound-height, 100dvh);
1536
+ }
1537
+ }
1538
+ /* Text must be allowed to shrink inside flex/grid tracks before it wraps. */
1539
+ header { align-items: flex-start; }
1540
+ header h2 {
1541
+ min-width: 0;
1542
+ overflow-wrap: anywhere;
1543
+ max-height: min(6em, calc(var(--nook-bound-height, 100dvh) * .3));
1544
+ overflow: auto;
1545
+ }
1546
+ header > button { flex: none; }
1547
+ .setting > [part~="setting-label"], .setting small, .content,
1548
+ [part~="command-name"], [part~="command-description"],
1549
+ [part~="command-arg-label"], [part~="group-heading"],
1550
+ [part~="overflow-group-heading"], [part~="enum-option-text"],
1551
+ [part~="enum-option-label"], [part~="enum-option-description"] {
1552
+ min-width: 0;
1553
+ overflow-wrap: anywhere;
1554
+ }
1555
+ .setting input { min-width: 0; }
1556
+ [part~="enum-option-text"] { flex: 1; }
1557
+ [part~="enum-selected-label"] { min-width: 0; }
1558
+ .surface[data-presentation="expanded"] .item-label {
1559
+ white-space: normal;
1560
+ overflow-wrap: anywhere;
1561
+ }
1562
+ .surface[data-view="root"][data-presentation="compact"]:has(.setting) .items { flex-wrap: wrap; }
1563
+ .surface[data-view="root"][data-presentation="compact"] .setting { flex: 1 0 100%; }
1564
+ .surface[data-presentation="expanded"]:not([data-view="commands"]),
1565
+ .surface:is([data-view="full"], [data-view="all"])[data-presentation="compact"] {
1566
+ display: flex;
1567
+ flex-direction: column;
1568
+ }
1569
+ .surface[data-presentation="expanded"]:not([data-view="commands"]) { overflow: hidden; }
1570
+ .surface[data-presentation="expanded"]:not([data-view="commands"]) > header,
1571
+ .surface:is([data-view="full"], [data-view="all"])[data-presentation="compact"] > header { flex: none; }
1572
+ .surface[data-presentation="expanded"]:not([data-view="commands"]) > [part~="body"],
1573
+ .surface:is([data-view="full"], [data-view="all"])[data-presentation="compact"] > [part~="body"] {
1574
+ min-height: 0;
1575
+ overflow: auto;
1576
+ overscroll-behavior: contain;
1577
+ scroll-padding: 8px;
1578
+ padding: 4px;
1579
+ }
1580
+ .surface[data-presentation="expanded"]:not([data-view="commands"]) > header { padding-inline: 4px; }
1581
+ .command-result { grid-template-columns: minmax(0, 1fr) fit-content(40%); }
1582
+ .command-result kbd { min-width: 0; max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
1583
+ .feedback-types button, .feedback-tools button { max-width: 100%; overflow-wrap: anywhere; }
1584
+ [part~="feedback-preview"] { flex: none; }
1585
+ @media (max-width: 420px) {
1586
+ .setting:has(.enum-control), .setting:has(input:not([type="checkbox"])) {
1587
+ flex-direction: column;
1588
+ align-items: stretch;
1589
+ gap: 10px;
1590
+ }
1591
+ .setting .enum-control, .setting input:not([type="checkbox"]) { width: 100%; max-width: none; }
1592
+ .setting:has(input[type="checkbox"]) { align-items: flex-start; }
1593
+ .setting input[type="checkbox"] { margin-block-start: 2px; }
1594
+ }
1595
+ @media (pointer: coarse), (hover: none) {
1596
+ .surface[data-presentation="expanded"]:not([data-view="commands"]) > [part~="body"] { flex: 1; }
1597
+ }
1598
+ @media (hover: hover) and (pointer: fine) {
1599
+ .anchor[data-numbering] .surface:not([data-view="commands"]):not([data-view="root"]) { display: flex; flex-direction: column; }
1600
+ .anchor[data-numbering] .surface:not([data-view="commands"]) > header { flex: none; }
1601
+ .anchor[data-numbering] .surface:not([data-view="commands"]) > [part~="body"] { min-height: 0; overflow: auto; }
1602
+ .anchor[data-numbering] .command-result { grid-template-columns: auto minmax(0,1fr) fit-content(34%); }
1603
+ }
1604
+
1605
+ .surface[data-layout="list"] {
1606
+ width: min(var(--nook-width, 304px), calc(var(--nook-bound-width, 100vw) - 32px));
1607
+ display: flex;
1608
+ flex-direction: column;
1609
+ }
1610
+ .surface[data-layout="list"] > header { flex: none; }
1611
+ .surface[data-layout="list"] > [part~="body"],
1612
+ .surface[data-view="root"][data-presentation="compact"]:has(.setting) > [part~="body"] {
1613
+ min-height: 0;
1614
+ overflow: auto;
1615
+ overscroll-behavior: contain;
1616
+ }
1617
+ .surface[data-view="root"][data-presentation="compact"]:has(.setting) { display: flex; flex-direction: column; }
1618
+ .surface[data-layout="list"] .items,
1619
+ .surface[data-layout="list"] .groups,
1620
+ .surface[data-layout="list"] .group-body { grid-template-columns: minmax(0, 1fr); }
1621
+ .surface[data-layout="list"][data-presentation="compact"] > [part~="body"] > .items { display: grid; }
1622
+ .surface[data-layout="list"] .item { flex-direction: row; justify-content: flex-start; gap: 12px; padding: 10px 12px; text-align: start; }
1623
+ .surface[data-layout="list"] .item-label { display: block; flex: 1; min-width: 0; max-width: none; white-space: normal; overflow-wrap: anywhere; font-size: var(--nook-text-sm); }
1624
+ @media (pointer: coarse), (hover: none) {
1625
+ .anchor .surface[data-layout="list"][data-presentation="expanded"] { width: var(--nook-bound-width, 100vw); }
1626
+ }
1627
+ /* Wrap after choosing a readable layout, then cap extreme text visually. Full
1628
+ strings remain in the DOM and in accessible names/descriptions. */
1629
+ header h2 {
1630
+ display: -webkit-box;
1631
+ -webkit-box-orient: vertical;
1632
+ -webkit-line-clamp: var(--nook-heading-lines, 4);
1633
+ max-height: min(calc(var(--nook-heading-lines, 4) * 1.25em), calc(var(--nook-bound-height, 100dvh) * .3));
1634
+ overflow: hidden;
1635
+ }
1636
+ [part~="setting-name"], .setting small,
1637
+ [part~="command-name"], [part~="command-description"],
1638
+ [part~="enum-option-label"], [part~="enum-option-description"],
1639
+ [part~="group-heading"], [part~="overflow-group-heading"],
1640
+ [part~="feedback-attachment-name"] {
1641
+ display: -webkit-box;
1642
+ -webkit-box-orient: vertical;
1643
+ overflow: hidden;
1644
+ overflow-wrap: anywhere;
1645
+ }
1646
+ [part~="setting-name"], [part~="enum-option-label"] {
1647
+ -webkit-line-clamp: var(--nook-label-lines, 3);
1648
+ line-height: 1.4;
1649
+ max-height: calc(var(--nook-label-lines, 3) * 1.4em);
1650
+ }
1651
+ .setting small, [part~="enum-option-description"], [part~="command-description"] {
1652
+ -webkit-line-clamp: var(--nook-description-lines, 3);
1653
+ line-height: 1.5;
1654
+ max-height: calc(var(--nook-description-lines, 3) * 1.5em);
1655
+ }
1656
+ [part~="command-name"] {
1657
+ -webkit-line-clamp: var(--nook-command-name-lines, 2);
1658
+ max-height: calc(var(--nook-command-name-lines, 2) * 1.4em);
1659
+ }
1660
+ [part~="group-heading"], [part~="overflow-group-heading"] {
1661
+ -webkit-line-clamp: var(--nook-group-lines, 2);
1662
+ line-height: 1.4;
1663
+ max-height: calc(var(--nook-group-lines, 2) * 1.4em);
1664
+ }
1665
+ [part~="feedback-attachment-name"] {
1666
+ -webkit-line-clamp: var(--nook-filename-lines, 2);
1667
+ line-height: 1.5;
1668
+ max-height: calc(var(--nook-filename-lines, 2) * 1.5em);
1669
+ }
1670
+ .surface:is([data-view="full"], [data-view="all"], [data-layout="list"], [data-presentation="expanded"]) .item-label,
1671
+ .anchor[data-numbering] .item-label,
1672
+ .surface[data-view="root"]:has(.setting) .item-label {
1673
+ display: -webkit-box;
1674
+ -webkit-box-orient: vertical;
1675
+ -webkit-line-clamp: var(--nook-label-lines, 3);
1676
+ line-height: 1.4;
1677
+ max-height: calc(var(--nook-label-lines, 3) * 1.4em);
1678
+ overflow: hidden;
1679
+ overflow-wrap: anywhere;
1680
+ }
1681
+ .enum-option-content { max-height: var(--nook-option-content-max-height, 12rem); overflow: hidden; }
1682
+ .command-result kbd {
1683
+ display: -webkit-box;
1684
+ -webkit-box-orient: vertical;
1685
+ -webkit-line-clamp: 4;
1686
+ line-height: 1.4;
1687
+ max-height: 5.6em;
1688
+ overflow: hidden;
1689
+ }
1690
+ .feedback-status, .feedback-privacy, .feedback-intro, .feedback-success { min-width: 0; overflow-wrap: anywhere; }
1691
+ .feedback-status {
1692
+ display: -webkit-box;
1693
+ -webkit-box-orient: vertical;
1694
+ -webkit-line-clamp: 6;
1695
+ line-height: 1.5;
1696
+ max-height: 9em;
1697
+ overflow: hidden;
1698
+ }
1699
+ .setting input:not([type="checkbox"]):not([type="range"]):not([type="color"]) {
1700
+ min-height: 40px;
1701
+ border: 1px solid var(--nook-border);
1702
+ border-radius: 8px;
1703
+ padding: 8px 10px;
1704
+ background: var(--nook-surface);
1705
+ color: var(--nook-text);
1706
+ }
1707
+ .tooltip {
1708
+ display: grid;
1709
+ grid-template-rows: minmax(0, 1fr);
1710
+ line-height: 1.4;
1711
+ max-height: calc(var(--nook-bound-height, 100dvh) - 32px);
1712
+ overflow: hidden;
1713
+ }
1714
+ .tooltip-text {
1715
+ display: -webkit-box;
1716
+ -webkit-box-orient: vertical;
1717
+ -webkit-line-clamp: var(--nook-tooltip-lines, 8);
1718
+ min-height: 0;
1719
+ max-height: calc(var(--nook-tooltip-lines, 8) * 1.4em);
1720
+ overflow: hidden;
1721
+ overflow-wrap: anywhere;
1722
+ }
1723
+ [data-corner^="top"] .item .tooltip { top: calc(100% + 6px); bottom: auto; }
1724
+ .items > .item:is(:nth-child(-n + 2 of .item:not([hidden])), :nth-last-child(-n + 2 of .item:not([hidden]))) .tooltip {
1725
+ max-width: min(220px, calc(var(--nook-item-size) * 2 + var(--nook-gap)), calc(var(--nook-bound-width, 100vw) - 32px));
1726
+ }
1727
+ .items > .item:nth-child(1 of .item:not([hidden])) .tooltip { left: 0; right: auto; transform: none; }
1728
+ .items > .item:nth-last-child(1 of .item:not([hidden])) .tooltip { right: 0; left: auto; transform: none; }
1729
+ .surface:is([data-layout="list"], [data-presentation="expanded"]) .tooltip { display: none; }
1730
+ .surface[data-view="root"][data-presentation="compact"]:has(.setting) .item {
1731
+ flex-basis: 100%; flex-direction: row; justify-content: flex-start; gap: 12px; padding: 10px 12px;
1732
+ }
1733
+ .surface[data-view="root"]:has(.setting) .item-label { flex: 1; min-width: 0; max-width: none; white-space: normal; text-align: start; }
1734
+ .surface[data-view="root"]:has(.setting) .tooltip { display: none; }
1735
+ @media (max-height: 360px) {
1736
+ header h2 { -webkit-line-clamp: 2; max-height: 2.5em; }
1737
+ }
1738
+ /* Keep duplicate tooltip suppression last, including while layout data refreshes. */
1739
+ .anchor:is([data-alt-held], [data-numbering]) :is(.tooltip, [role="tooltip"]) { display: none; visibility: hidden; opacity: 0; transition: none; }
1740
+ @media (pointer: coarse), (hover: none) { .tooltip { display: none; } }
1741
+
1742
+ header h2 { margin-block-start: max(0px, calc((44px - 1.25em) / 2)); }
1743
+ [part~="command-arg-label"] {
1744
+ display: -webkit-box;
1745
+ -webkit-box-orient: vertical;
1746
+ -webkit-line-clamp: var(--nook-label-lines, 3);
1747
+ line-height: 1.4;
1748
+ max-height: calc(var(--nook-label-lines, 3) * 1.4em);
1749
+ overflow: hidden;
1750
+ }
1751
+ [part~="feedback-type"] {
1752
+ display: -webkit-box;
1753
+ -webkit-box-orient: vertical;
1754
+ -webkit-line-clamp: var(--nook-label-lines, 3);
1755
+ line-height: 1.4;
1756
+ max-height: calc(var(--nook-label-lines, 3) * 1.4em + 16px);
1757
+ overflow: hidden;
1758
+ }
1759
+ [part~="feedback-success-message"] {
1760
+ display: -webkit-box;
1761
+ -webkit-box-orient: vertical;
1762
+ -webkit-line-clamp: 6;
1763
+ line-height: 1.5;
1764
+ max-height: 9em;
1765
+ overflow: hidden;
1766
+ }
1767
+
1768
+ slot[part~="app"] { display: contents; }
1769
+ .boundary-measure {
1770
+ margin-top: var(--nook-inset-top, 0px); margin-right: var(--nook-inset-right, 0px);
1771
+ margin-bottom: var(--nook-inset-bottom, 0px); margin-left: var(--nook-inset-left, 0px);
1772
+ padding-top: env(safe-area-inset-top, 0px); padding-right: env(safe-area-inset-right, 0px);
1773
+ padding-bottom: env(safe-area-inset-bottom, 0px); padding-left: env(safe-area-inset-left, 0px);
1774
+ }
1775
+ .anchor { z-index: var(--nook-handle-z, var(--nook-z)); }
1776
+ .overlay-anchor { z-index: var(--nook-overlay-z, var(--nook-z)); width: 48px; height: 48px; }
1777
+ .overlay-anchor:is([data-corner="top-center"],[data-corner="bottom-center"]) { width: 64px; height: 48px; }
1778
+ .overlay-anchor:is([data-corner="left-center"],[data-corner="right-center"]) { width: 48px; height: 64px; }
1779
+ .preview, .landing-zone { z-index: var(--nook-drag-z, var(--nook-overlay-z, var(--nook-z))); }
1780
+ :host([data-capture-mode]) [part~="handle"] { visibility: hidden; pointer-events: none; }
1781
+ @media (pointer: coarse), (hover: none) {
1782
+ .anchor .surface[data-presentation="expanded"],
1783
+ .anchor[data-corner$="center"] .surface[data-presentation="expanded"] {
1784
+ inset: var(--nook-bound-top,0px) var(--nook-bound-right,0px) var(--nook-bound-bottom,0px) var(--nook-bound-left,0px);
1785
+ }
1786
+ .surface[data-presentation="expanded"]::before {
1787
+ inset: var(--nook-bound-top,0px) var(--nook-bound-right,0px) var(--nook-bound-bottom,0px) var(--nook-bound-left,0px);
1788
+ }
1789
+ }
1790
+ .capture-session {
1791
+ position: absolute;
1792
+ width: max-content;
1793
+ max-width: calc(var(--nook-bound-width, 100vw) - 24px);
1794
+ padding: 4px;
1795
+ border: 1px solid var(--nook-border);
1796
+ border-radius: var(--nook-radius);
1797
+ background: var(--nook-material-background);
1798
+ -webkit-backdrop-filter: blur(var(--nook-material-blur));
1799
+ backdrop-filter: blur(var(--nook-material-blur));
1800
+ box-shadow: var(--nook-shadow);
1801
+ max-height: calc(var(--nook-bound-height, 100dvh) - 24px);
1802
+ overflow: auto;
1803
+ }
1804
+ [data-corner^="bottom"] .capture-session { bottom: 12px; }
1805
+ [data-corner^="top"] .capture-session { top: 12px; }
1806
+ [data-corner$="right"] .capture-session { right: 12px; }
1807
+ [data-corner$="left"] .capture-session { left: 12px; }
1808
+ [data-corner="top-center"] .capture-session,[data-corner="bottom-center"] .capture-session { left: 32px; translate: -50% 0; }
1809
+ [data-corner="left-center"] .capture-session { left: 12px; top: 32px; translate: 0 -50%; }
1810
+ [data-corner="right-center"] .capture-session { right: 12px; top: 32px; translate: 0 -50%; }
1811
+ .capture-session:has(.capture-gallery:not([hidden])),
1812
+ .capture-session:has(.capture-status[data-error="true"]:not(:empty)) {
1813
+ width: min(var(--nook-capture-width, 360px), calc(var(--nook-bound-width, 100vw) - 24px));
1814
+ padding: 8px;
1815
+ }
1816
+ .capture-controls { display: flex; gap: 4px; align-items: center; }
1817
+ .capture-controls > button { min-width: 0; min-height: 44px; padding: 8px 12px; font-size: var(--nook-text-sm); overflow-wrap: anywhere; }
1818
+ .capture-controls > [part~="capture-done"] { margin-inline-start: auto; }
1819
+ [part~="capture-snapshot"] { flex: 1; }
1820
+ [part~="capture-review"] { display: inline-flex; align-items: center; justify-content: center; gap: 6px; font-variant-numeric: tabular-nums; }
1821
+ [part~="capture-review-icon"] svg { display: block; width: 18px; height: 18px; }
1822
+ .capture-status:not([data-error="true"]) { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
1823
+ .capture-status { margin: 4px 0 0; color: var(--nook-muted); font-size: var(--nook-text-xs); line-height: 1.5; overflow-wrap: anywhere; }
1824
+ .capture-status:empty { display: none; }
1825
+ .capture-status[data-error="true"] { color: var(--nook-error-color, light-dark(#a82843,#ff9cb1)); }
1826
+ [part~="capture-hide-previews"] { justify-self: end; min-height: 44px; padding: 8px 12px; font-size: var(--nook-text-sm); }
1827
+ .capture-gallery { margin-top: 12px; display: grid; gap: 12px; }
1828
+ .capture-preview-image { width: 100%; max-height: min(320px, 40dvh); object-fit: contain; background: var(--nook-surface); border-radius: 8px; }
1829
+ .capture-thumbnails { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; }
1830
+ .capture-thumbnail { min-width: 0; display: grid; gap: 4px; }
1831
+ [part~="capture-preview"] { min-width: 0; border: 1px solid var(--nook-border); border-radius: 8px; padding: 4px; background: var(--nook-surface); color: var(--nook-text); }
1832
+ [part~="capture-preview"][aria-pressed="true"] { border-color: var(--nook-accent); }
1833
+ [part~="capture-thumbnail-image"] { display: block; width: 100%; height: 48px; object-fit: cover; border-radius: 4px; }
1834
+ [part~="capture-thumbnail-label"] { display: block; margin-top: 4px; font-size: var(--nook-text-xs); overflow-wrap: anywhere; }
1835
+ [part~="capture-remove"] { min-height: 36px; padding: 4px; border-radius: 6px; background: transparent; color: var(--nook-muted); font-size: var(--nook-text-xs); }
1836
+ .swipe-dial {
1837
+ position: fixed;
1838
+ inset: var(--nook-bound-top,0px) var(--nook-bound-right,0px) var(--nook-bound-bottom,0px) var(--nook-bound-left,0px);
1839
+ pointer-events: none;
1840
+ opacity: var(--nook-dial-progress,0);
1841
+ transition: opacity 80ms linear;
1842
+ }
1843
+ .swipe-dial::before {
1844
+ content: ""; position: absolute; inset: 0;
1845
+ background: var(--nook-material-background);
1846
+ -webkit-backdrop-filter: blur(calc(var(--nook-dial-progress,0) * var(--nook-material-blur)));
1847
+ backdrop-filter: blur(calc(var(--nook-dial-progress,0) * var(--nook-material-blur)));
1848
+ }
1849
+ .swipe-dial-option {
1850
+ position: absolute; translate: -50% -50%; box-sizing: border-box; width: 88px; height: 72px; padding: 8px;
1851
+ display: grid; place-content: center; justify-items: center; gap: 4px;
1852
+ border: 1px solid var(--nook-border); border-radius: 20px; background: var(--nook-surface); color: var(--nook-text);
1853
+ box-shadow: var(--nook-shadow); opacity: .72; transition: transform 100ms ease,opacity 100ms ease,background 100ms ease;
1854
+ }
1855
+ .swipe-dial-option[data-selected] { transform: scale(1.08); opacity: 1; background: var(--nook-accent); color: var(--nook-on-accent); }
1856
+ [part~="swipe-dial-icon"] svg { display: block; width: 20px; height: 20px; }
1857
+ [part~="swipe-dial-label"] { font-size: var(--nook-text-xs); line-height: 1.2; text-align: center; overflow-wrap: anywhere; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; max-height: 2.4em; overflow: hidden; }
1858
+ [part~="settings-footer"] {
1859
+ padding-top: var(--nook-settings-footer-gap, 12px);
1860
+ margin-top: 4px;
1861
+ border-top: 1px solid var(--nook-border);
1862
+ }
1863
+ [part~="settings-footer"]:first-child { border-top: 0; margin-top: 0; padding-top: 0; }
1864
+ [part~="settings-link"] {
1865
+ display: flex; align-items: center; min-height: 44px;
1866
+ padding: 8px 4px; border-radius: 8px;
1867
+ color: var(--nook-settings-link-color, var(--nook-accent));
1868
+ font-size: var(--nook-text-sm); font-weight: var(--nook-label-weight);
1869
+ line-height: var(--nook-line-height); text-decoration: none; overflow-wrap: anywhere;
1870
+ }
1871
+ [part~="settings-link"]:hover { text-decoration: underline; text-underline-offset: .2em; }
1872
+ [part~="settings-link"]:focus-visible { outline: 2px solid var(--nook-accent); outline-offset: 2px; }
1873
+ /* Form surfaces get their own readable widths instead of the icon-menu width. */
1874
+ .surface[data-view="settings"][data-presentation="compact"] {
1875
+ width: min(var(--nook-settings-width, var(--nook-width, 420px)), calc(var(--nook-bound-width, 100vw) - 32px));
1876
+ }
1877
+ .surface[data-view="feedback"][data-presentation="compact"] {
1878
+ width: min(var(--nook-feedback-width, var(--nook-width, 520px)), calc(var(--nook-bound-width, 100vw) - 32px));
1879
+ }
1880
+ @media (hover: hover) and (pointer: fine) {
1881
+ .surface[data-view="settings"][data-presentation="expanded"] {
1882
+ width: min(var(--nook-settings-width, var(--nook-width, 420px)), calc(var(--nook-bound-width, 100vw) - 32px));
1883
+ }
1884
+ .surface[data-view="feedback"][data-presentation="expanded"] {
1885
+ width: min(var(--nook-feedback-width, var(--nook-width, 520px)), calc(var(--nook-bound-width, 100vw) - 32px));
1886
+ }
1887
+ }
1888
+ /* The root is the same persistent dial used by a held swipe. */
1889
+ .anchor .surface[data-view="root"] {
1890
+ position: fixed; inset: var(--nook-bound-top,0px) var(--nook-bound-right,0px) var(--nook-bound-bottom,0px) var(--nook-bound-left,0px);
1891
+ width: auto; height: auto; max-width: none; max-height: none;
1892
+ margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent;
1893
+ box-shadow: none; overflow: visible; translate: none; transform: none;
1894
+ pointer-events: none; display: block; isolation: isolate;
1895
+ -webkit-backdrop-filter: none; backdrop-filter: none;
1896
+ opacity: var(--nook-dial-progress,1);
1897
+ }
1898
+ .anchor .surface[data-view="root"] > header { display: none; }
1899
+ .anchor .surface[data-view="root"] > [part~="body"],
1900
+ .anchor .surface[data-view="root"] .items {
1901
+ display: contents; pointer-events: none; padding: 0; margin: 0; max-width: none;
1902
+ }
1903
+ .anchor .surface[data-view="root"]::before {
1904
+ position: absolute; inset: 0; border: 0; border-radius: 0; box-shadow: none;
1905
+ background: var(--nook-material-background);
1906
+ -webkit-backdrop-filter: blur(var(--nook-material-blur)); backdrop-filter: blur(var(--nook-material-blur));
1907
+ }
1908
+ .anchor .surface[data-view="root"] .item {
1909
+ position: absolute; left: var(--nook-dial-x); top: var(--nook-dial-y);
1910
+ translate: -50% -50%; transform: none; width: 56px; height: 56px; min-height: 56px;
1911
+ flex: none; display: flex; align-items: center; justify-content: center; padding: 0; gap: 0;
1912
+ pointer-events: auto; touch-action: manipulation; user-select: none; -webkit-touch-callout: none; border: 1px solid var(--nook-border); border-radius: 50%;
1913
+ background: var(--nook-surface); box-shadow: var(--nook-shadow);
1914
+ }
1915
+ .anchor .surface[data-view="root"] .item[data-dial-hidden] { display: none !important; }
1916
+ .anchor .surface[data-view="root"] .dial-caption {
1917
+ position: absolute; left: calc(50% + var(--nook-caption-x, 0px)); top: calc(50% + var(--nook-caption-y, -64px));
1918
+ translate: -50% -50%; width: max-content; max-width: 96px;
1919
+ display: var(--nook-label-display,block); padding: 4px 8px; pointer-events: auto;
1920
+ border: 1px solid var(--nook-border); border-radius: 8px;
1921
+ color: var(--nook-text); background: var(--nook-surface); box-shadow: var(--nook-shadow);
1922
+ }
1923
+ .anchor .surface[data-view="root"] .item .item-label {
1924
+ position: static; display: -webkit-box; flex: none; width: auto; max-width: 100%; max-height: 2.8em;
1925
+ padding: 0; margin: 0; white-space: normal; text-align: center;
1926
+ font-size: var(--nook-text-xs); line-height: 1.4;
1927
+ -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; overflow-wrap: anywhere;
1928
+ }
1929
+ .anchor[data-numbering] .surface[data-view="root"] .dial-caption,
1930
+ .anchor .surface[data-view="root"][data-labels] .dial-caption,
1931
+ .anchor .surface[data-view="root"][data-preview] .dial-caption,
1932
+ .anchor .surface[data-view="root"] .item:active .dial-caption { display: block; }
1933
+ .anchor .surface[data-view="root"] .item .number {
1934
+ position: absolute; inset: -5px -5px auto auto; min-width: 22px; height: 22px;
1935
+ padding: 0 4px; font: var(--nook-text-xs)/20px var(--nook-font); border-radius: 6px;
1936
+ }
1937
+ .anchor .surface[data-view="root"] .item[data-selected] { transform: scale(1.08); background: var(--nook-accent); color: var(--nook-on-accent); }
1938
+ .anchor .surface[data-view="root"][data-preview] .tooltip,
1939
+ .anchor .surface[data-view="root"][data-labels] .tooltip { display: none; }
1940
+
1941
+ .anchor .surface[data-view="root"] .item:focus-visible { outline-offset: 1px; }
1942
+
1943
+ .anchor .surface[data-view="root"] { animation: reveal var(--nook-duration) ease-out; }
1944
+ .anchor .surface[data-view="root"][data-preview] { animation: none; }
1945
+ .tutorial-badge {
1946
+ position: absolute; top: 1px; right: 1px; width: 10px; height: 10px;
1947
+ border: 2px solid var(--nook-surface); border-radius: 50%; background: var(--nook-accent);
1948
+ box-shadow: 0 0 0 1px var(--nook-border); pointer-events: none;
1949
+ animation: tutorial-bead 900ms ease-out 2;
1950
+ }
1951
+ @keyframes tutorial-bead { 50% { box-shadow: 0 0 0 5px color-mix(in srgb,var(--nook-accent) 18%,transparent); } }
1952
+ .tutorial-shortcuts { margin: 0 0 16px; display: grid; gap: 8px; }
1953
+ .tutorial-shortcuts > div { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; }
1954
+ .tutorial-shortcuts dt { min-width: 0; font-size: var(--nook-text-sm); font-weight: var(--nook-label-weight); overflow-wrap: anywhere; }
1955
+ .tutorial-shortcuts dd { margin: 0; min-width: 0; text-align: end; }
1956
+ .tutorial-shortcuts kbd { font-size: var(--nook-text-xs); overflow-wrap: anywhere; white-space: normal; }
1957
+ ${tutorialGraphicsStyles}
1958
+
1959
+ .anchor .surface[data-view="root"] .item[data-caption-visible] .tooltip { display: none; }
1960
+ `;